Функция, которая определяет 3 числа, которые идут подряд на Leo
Всем привет! Продолжаем с вами изучать язык программирования Leo. Для тех кто здесь впервые напоминаю, что Leo - это язык программирования, основанный на rust для создания приложений на технологии доказательств с нулевым знанием (ZKP). В своих статьях я вместе с вами изучаю этот язык программирования и делюсь своим опытом.
Задача имеет следующее содержание:
Напишите логическую функцию, которая возвращает истину, если в целом 5ти-значном числе есть 3 цифры, которые идут подряд. В противном случае функция возвращает ложь.
В принципе, максимально простая и понятная задача. Давайте начну с описания логики данной функции. Для начала нам нужно записать все цифры данного числа в отдельные переменные, мы это уже делали в предыдущей статье. Для этого мы находим остаток от деления числа на 10, тем самым записываем последнюю цифру числа в переменную. Далее делим на 10 и снова повторяем предыдущее действие. После этого остается лишь сравнить все тройки чисел с помощью условного оператора if. Давайте приступим к реализации.
P.S. Если вам удобнее изучать информацию в видео-формате, то вот ссылка на мой ролик по созданию данной функции.
Открываем Aleo Studio или просто создаём проект в Git Bash через командную строку. В этот раз я буду показывать на примере Aleo Studio (как работать с Git Bash я не раз показывал в своих статьях, можете изучить). Создаем программу, нажимая New leo project. Я назову его podryad.
Нажимаем кнопку create и ждем когда приложение откроется. Если что-то не работает (а это почти каждый раз, так как aleo studio ещё дорабатывается), то можете перезайти в программу.
Создалась программа по умолчанию, которая является helloworld на языке Leo. Давайте её видоизменять.
Для начала поменяем вход и выход функции. Поступает одна переменная типа u32, назовём её a
, а на выходе переменная типа bool (boolean имеет значение true или false). Подробнее про типы переменных и вход и выход функции вы можете узнать в бесплатном курсе по leo на моём канале.
Таким образом функция имеет следующий вид:
transition main(a: u32) -> bool {
Теперь нам нужно создать переменную, которую мы и будем возвращать по результатам работы функции. Она будет иметь типо boolean и иметь значение false.
let result: bool = false;
Следующим шагом мы должны сохранить все цифры числа в отдельные переменные. Алгоритм, как это происходит я описал выше. Напомню, что мы находим последнюю цифра числа с помощью поиска остатка от деления на 10 и потом делим наше число на 10 чтобы перейти на порядок больше. Да, таким образом мы получаем сначала единицы и идём к тысячам (то есть справа на лево,а не слева направо), но для нас это роли не играет, так как нам нужно определить лишь факт, что 3 цифры подряд одинаковые.
let n_1: u32 = a.rem(10u32); a = a/10u32; let n_2: u32 = a.rem(10u32); a = a/10u32; let n_3: u32 = a.rem(10u32); a = a/10u32; let n_4: u32 = a.rem(10u32); a = a/10u32; let n_5: u32 = a.rem(10u32);
Теперь остаётся лишь написать условное выражение, которое будет сравнивать по 3 числа. Для этого используем условный оператор if.
if n_1 == n_2 && n_2 == n_3 n_2 == n_3 && n_3 == n_4 n_3 == n_4 && n_4 == n_5 {
С помощью && мы обозначаем "и", а с помощью || - "или". Если это условие верно, то мы даем переменной result значение true.
result = true;
Остается вернуть данную переменную.
return result;
program podryad.aleo { transition main(a: u32) -> bool { let result: bool = false; let n_1: u32 = a.rem(10u32); a = a/10u32; let n_2: u32 = a.rem(10u32); a = a/10u32; let n_3: u32 = a.rem(10u32); a = a/10u32; let n_4: u32 = a.rem(10u32); a = a/10u32; let n_5: u32 = a.rem(10u32); if n_1 == n_2 && n_2 == n_3 n_2 == n_3 && n_3 == n_4 n_3 == n_4 && n_4 == n_5 { result = true; } return result; } }
Теперь указываем входные данные.
В данном случае мы должны получить true, так как идёт 3 единицы подряд.
Всё верно. Теперь давайте попробуем другие данные.
И всё правильно, мы получаем false.
На этом всё! Надеюсь, данная статья была вам полезна. Можете задавать вопросы в комментариях.