November 18, 2023

Решение задачи на 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 (это язык программирования, разрабатываемый для блокчейн-приложений). Давайте разберем его шаг за шагом:

  1. program lastnumbers.aleo: Эта строка указывает, что начинается новая программа с именем lastnumbers.aleo.
  2. transition main(a: u32) -> bool {: Это определение функции main, которая принимает один аргумент a типа u32 (32-битное беззнаковое целое число) и возвращает значение типа bool.
  3. let result: bool = false;: Создается переменная result типа bool и инициализируется значением false. Она будет использоваться для хранения результата проверки условия.
  4. let b: u32 = a.rem(10u32);: Создается переменная b типа u32 и присваивается остаток от деления значения переменной a на 10. Это позволяет получить последнюю цифру числа a.
  5. a = a/10u32;: Переменная a обновляется, делением ее текущего значения на 10. Это приведет к удалению последней цифры числа a.
  6. let c: u32 = a.rem(10u32);: Создается переменная c типа u32 и присваивается остаток от деления обновленного значения переменной a на 10. Это позволяет получить новую последнюю цифру числа a.
  7. if b == c { result = true; }: Проверяется, равны ли значения переменных b и c. Если последние цифры числа a совпадают, то переменной result присваивается значение true.
  8. return result;: Функция возвращает значение переменной result, которое будет true, если последние цифры числа a совпадают, и false в противном случае.

Таким образом, эта программа проверяет, совпадают ли последние цифры в числе a и возвращает true, если они совпадают, и false в противном случае.

На этом всё! Надеюсь, моё объяснение в синергии с ChatGPT помогло вам лучше понять, как работать с Leo. До встречи!