Решение задачи на 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. До встречи!