August 16, 2023

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

Привет! В этом видео видео мы решаем интресную задачу под названием "Ход короля". Решив задачу, я загружу её в ChatGPT и посмотрим, поймет ли нейросеть, какой смысл у этой задачи.

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

Решение задачи

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

Так звучит текст задачи:

Шахматный король ходит по горизонтали, вертикали и диагонали, но только на 1 клетку. Даны две различные клетки шахматной доски, определите, может ли король попасть с первой клетки на вторую одним ходом. Программа получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки. Программа должна вывести TRUE, если из первой клетки ходом короля можно попасть во вторую или FALSE в противном случае.

Мы рассмотрим 1 вариант решения данной задачи. Второй вариант вы можете посмотреть в видео.

Для начала нам нужно определить какие данные поступают в функцию. Это 4 переменные, которые обозначают кординаты первой и второй клетки.

transition main(x1: i32, y1: i32, x2: i32, y2: i32) -> bool {

На выходе переменная типа bool. Если король может так сходить, тогда на выходе будет значение true, иначе, false. Для наглядности прилагаю ниже шахматную доску с цифровыми кординатами.

Давайте создадим переменную типа bool, которую мы будем возвращать по результату работы программы.

let result: bool = false;

Теперь самое интересное - это составить правильное условие. Мы будем использовать оператор .abs() . Он вычисляет абсолютную разницу или проще говоря модуль числа. С помощью него мы самым оптимальным способом проверим, чтобы разница между первой и второй клеткой была не более единицы по обеим осям.

if (x1 - x2).abs() <= 1i32 && (y1 - y2).abs() <= 1i32 {

Таким образом, если этим условием мы проверяем возможность короля пройти но вторую клетку. Если оно выполняется, то мы меняем нашу переменную:

result = true;

Далее нам остается вернуть переменную с результатом. Если условие выполнилось, то будет значение true. Если же не выполнилось, то значение меняться не будет и останется таким, которое мы задали при создании - false.

return result;

Итоговый код имеет следующий вид.

Теперь вводим входные данные в папке inputs.

[main]

x1: i32 = 2i32;

y1: i32 = 2i32;

x2: i32 = 1i32;

y2: i32 = 1i32;

Исходя из них, мы должны получить значение true, то есть король может сходить на эту клетку. Давайте запустим данную программу.

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

Взгляд ChatGPT

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

Цель программы состоит в проверке, находятся ли две координаты (x1, y1) и (x2, y2) на расстоянии не более одного шага друг от друга на шахматной доске (где шаг - это смещение на одну клетку по горизонтали, вертикали или диагонали). Вот как работает программа:

  1. Создается переменная result типа bool и инициализируется значением false.
  2. Программа проверяет условие (x1 - x2).abs() <= 1i32 && (y1 - y2).abs() <= 1i32.
    • Выражение (x1 - x2).abs() вычисляет абсолютную разницу между x1 и x2.
    • Выражение (y1 - y2).abs() вычисляет абсолютную разницу между y1 и y2.
    • Если оба выражения имеют значение, не превышающее 1, то условие считается истинным, и переменной result присваивается значение true.
  3. В конце функция main возвращает значение переменной result, которое будет содержать true, если координаты находятся на расстоянии не более одного шага друг от друга, и false в противном случае.

Чтобы использовать эту программу, вы можете вызвать функцию main с четырьмя аргументами типа i32 и она вернет логическое значение (true или false), указывающее, находятся ли координаты на расстоянии не более одного шага друг от друга.

Вывод

Надеюсь, данная серия статей была для вас полезна. Я думаю, что мои объяснения в связке с ChatGPT помогли вам понять суть кода, который мы с вами делали. До встречи в следующих статьях!