July 27, 2023

Практика по языку Leo. Часть 3. feat. ChatGPT.

Привет! Сегодня мы с вами напишем 2 программы на языке программирования Leo. Сначала я дам вам свои объяснения и мы вместе напишем код, а дальше посмотрим, что нам скажет chatGPT по нашему коду.

Данная статья есть в формате видео, можете посмотреть его по ссылке.

1 задача.

Для начала открываем Aleo Studio и создаем новый проект.

Задача звучит следующим образом. Безумный титан Танос собрал все 6 камней бесконечности и намеревается уничтожить половину населения Вселенной по щелчку пальцев. При этом если население Вселенной является нечетным числом, то титан проявит милосердие и округлит количество выживших в большую сторону. Помогите мстителям подсчитать количество выживших.

Задача достаточно простая, давайте её решим.

В функцию поступает одна переменная, которая хранит в себе количество населения Вселенной, она будет иметь тип u32. На выходе будет также переменная типа u32.

transition main(public a: u32) -> u32 {

Далее нам нужно просто изменить переменную а

Нам сначала нужно найти половину жителей, а после прибавить 1, если количество жителей четное. Мы сделаем это с помощью оператора "%", который обозначает остаток от деления. Если остаток от деления на 2 равен 0, то число четное и мы ничего не прибавляем. Если число нечетное, тогда остаток от деления на 2 равен 1 и мы прибавим эту единицу. Реализация через код выглядит так:

a = a / 2u32 + a % 2u32;

После этого мы возвращаем переменную а;

return a;

Полный код выглядит следующим образом.

Переходим в файл во вкладе inputs и указываем входные данные.

[main]

public a: u32 = 1001u32;

Поскольку число четное, по результату работы программы мы должны получить значение 501. Давайте запустим наш код.

Всё правильно. Давайте посмотрим объяснение ChatGPT.

Задача 2. Объяснение ChatGPT.

Эта программа написана на языке программирования Aleo. Она содержит функцию main, которая принимает один аргумент a типа u32 (32-битное целое число без знака) и возвращает значение типа u32.

Цель программы состоит в вычислении значения a, которое равно половине значения a, округленному вверх до ближайшего целого числа. Вот как работает программа:

  1. Внутри функции main переменная a изменяется следующим образом: a = a / 2u32 + a % 2u32.
    • Оператор / выполняет деление значения a на 2 и возвращает целую часть результата деления (округленную вниз).
    • Оператор % выполняет операцию остатка от деления значения a на 2 и возвращает остаток от этого деления.
    • Затем результаты деления и остатка складываются вместе, чтобы получить округленное вверх значение a.
  2. В конце функция main возвращает значение переменной a, которое будет содержать округленное вверх значение исходного числа.

Чтобы использовать эту программу, вы можете вызвать функцию main с аргументом типа u32 и она вернет округленное вверх значение этого числа.

Задача 2. Нахождение суммы цифр трехзначного числа.

Как вы понимаете из названия, в программу поступает трехзначное число, это будет переменная а с типом u32.

На выходе будет переменная типом u32, хотя можно использовать и u8, так как сумма цифр трехначного числа не может быть больше 27.

transition main(a: u32) -> u32 {

Далее нам нужно создать 3 переменные, которые будут хранить в себе цифры этого числа.

let a1: u32 = 0u32;       

let a2: u32 = 0u32;       

let a3: u32 = 0u32;

Также создадим переменную, которая будет хранить в себе сумму этих цифр и мы будем ее возвращать по результату работы данной программы.

let c: u32 = 0u32;

Теперь мы делаем следующее. Находим остаток от деления данного числа на 10. Это и будет последняя цифра числа, а после делим число на 10.

a1 = a.rem(10u32);

a = a / 10u32;

Делаем так и со второй цифрой.

a2 = a.rem(10u32);

a = a / 10u32;

В отношении к третьей цифре мы можем поступить иначе. Так как мы уже поделили число 2 раза на 10, то и осталась лишь первая цифра трехзначного числа (так как цифры могут быть только целыми в leo).

a3 = a;

Осталось найти сумму ээтих цифр.

c = a1 + a2 + a3;

И возвращаем переменную с.

return c;

Так выглядит финальный код.

Осталось указать входные данные. Например, число 999. На выходе должны получить 27.

[main]

a:u32 = 999u32;

Да, мы получили корректный результат. Давайте попросим ChatGPT объяснить код.

Задача 2. Объяснение ChatGPT.

Эта программа написана на языке программирования Aleo. Она содержит функцию main, которая принимает один аргумент a типа u32 (32-битное целое число без знака) и возвращает значение типа u32.

Цель программы состоит в вычислении суммы цифр числа a. Вот как работает программа:

  1. Внутри функции main создаются временные переменные a1, a2, a3 и c, все типа u32, и инициализируются значением 0.
  2. Затем число a обрабатывается следующим образом:
    • Оператор a.rem(10u32) возвращает остаток от деления значения a на 10, то есть последнюю цифру числа a. Это значение присваивается переменной a1.
    • Затем значение a делится на 10, чтобы удалить последнюю цифру.
    • Повторяется процесс получения остатка от деления и деления на 10 для оставшихся двух цифр числа a, которые присваиваются переменным a2 и a3.
    • Затем переменные a1, a2 и a3 складываются в переменную c, чтобы получить сумму цифр числа a.
  3. В конце функция main возвращает значение переменной c, которое будет содержать сумму цифр числа a.

Чтобы использовать эту программу, вы можете вызвать функцию main с аргументом типа u32 и она вернет сумму цифр этого числа.

Вывод

Меня не перестает удивлять ChatGPT тем, что он может анализировать задачу, которую выполняет программа. До встречи в 4ой статье!