Решение задачи на leo. Являются ли две последние цифры числа одинаковыми
Привет! Сегодня в статье мы решим одну задачу на leo, а также я покажу новый способ давать входные данные для наших функций.
Давайте перейдём к решению задачи. Условие следующее: Напишите логическую функцию, которая возвращает истину, если в числе две последние цифры одинаковые. Например, функция вернет истину, если будет введено число 377 или 12855. В противном случае функция возвращает ложь. Программа получает на вход целое число. Программа должна вывести YES, если функция возвращает истину и NO в обратном случае.
Для начала давайте создадим новую программу. Для этого переходим в git bash (если вы не знаете, что это, то посмотрите мои статьи по установке leo на компьютер) и введём команду
leo new lastnum
Тем самым мы создадим программу, которая имеет название lastnum.
Теперь перейдём в нашу программу с помощью команды
cd lastnum
Откроем нашу программу через проводник.
И перетащим 2 нужных нам файла в sublime text. В нашем случае это файл lastnum.in в папке inputs и файл main.leo в папке src.
Теперь приступим к написанию программы. Для начала укажем вход и выход функции. На входе будет переменная a
типа u32
, на выходе переменная типа bool
так как мы будем выводить решение. True, если обе последние цифры числа совпадают и false, если иначе.
transition main(a: u32) -> bool {
Теперь нам нужно создать переменную, которую мы будем выводить по результату работы программы, она будет типа boolean. Зададим ей значение false.
let result: bool = false;
Теперь давайте найдем последную цифру числа и запишем её в новую переменную. Для этого нужно найти остаток от деления числа на 10. Запишем его в переменную b и используем оператор .rem.
let b: u32 = a.rem(10u32);
Теперь нам нужно найти предпоследнюю цифру. Для этого разделим переменную a
на 10, и далее найдем остаток от деления этого числа на 10.
a = a/10u32; let c: u32 = a.rem(10u32);
Теперь у нас есть 2 переменные, b
и c
, которые мы можем сравнить. Если они равны, выводим true, иначе, false.
if b == c { result = true; }
И осталось вывести переменную result. Для этого пишем:
return result;
Таким образом, общий код программы выглядит так:
program lastnumbers.aleo { transition main(a: u32) -> bool { let result: bool = false; let b: u32 = a.rem(10u32); a = a/10u32; let c: u32 = a.rem(10u32); if b == c { result = true; } return result; } }
Входные данные добавляем в файле с расширением .in. Пусть будет число 1111. То есть на выходе мы должны получить true.
Запускаем нашу функцию, вводим в git bash
leo run main
Всё работает корректно. Также я обещал показать второй способ давать входные данные в программу. Для этого в командной строке при вводе leo run main указываем аргумент в виде значения, которое мы хотим подать в функцию, например:
Не забульте указать тип переменной, как это показано на скриншоте.
И давайте по традиции попросим ChatGPT разобрать наш код. Вдруг он отметит, то что не сказал я. Для этого вводим наш код в ChatGPT. И получаем следующее объяснение:
Данный код представляет собой программу на языке программирования ALEO (это язык программирования, разрабатываемый для блокчейн-приложений). Давайте разберем его шаг за шагом:
program lastnumbers.aleo
: Эта строка указывает, что начинается новая программа с именемlastnumbers.aleo
.transition main(a: u32) -> bool {
: Это определение функцииmain
, которая принимает один аргументa
типаu32
(32-битное беззнаковое целое число) и возвращает значение типаbool
.let result: bool = false;
: Создается переменнаяresult
типаbool
и инициализируется значениемfalse
. Она будет использоваться для хранения результата проверки условия.let b: u32 = a.rem(10u32);
: Создается переменнаяb
типаu32
и присваивается остаток от деления значения переменнойa
на 10. Это позволяет получить последнюю цифру числаa
.a = a/10u32;
: Переменнаяa
обновляется, делением ее текущего значения на 10. Это приведет к удалению последней цифры числаa
.let c: u32 = a.rem(10u32);
: Создается переменнаяc
типаu32
и присваивается остаток от деления обновленного значения переменнойa
на 10. Это позволяет получить новую последнюю цифру числаa
.if b == c { result = true; }
: Проверяется, равны ли значения переменныхb
иc
. Если последние цифры числаa
совпадают, то переменнойresult
присваивается значениеtrue
.return result;
: Функция возвращает значение переменнойresult
, которое будетtrue
, если последние цифры числаa
совпадают, иfalse
в противном случае.
Таким образом, эта программа проверяет, совпадают ли последние цифры в числе a
и возвращает true
, если они совпадают, и false
в противном случае.
На этом всё! Надеюсь, моё объяснение в синергии с ChatGPT помогло вам лучше понять, как работать с Leo. До встречи!