Треки
/
Cairo
Cairo
/
Вправи
/
Маг-початківець
Маг-початківець

Маг-початківець

Навчальна вправа

Вступ

Масиви

Основна бібліотека Cairo реалізує тип Array.

Він схожий на звичайні типи масивів в інших мовах програмування, але має кілька ключових відмінностей:

  • Елементи можна ефективно додавати лише в кінець типу Array, а ефективно видаляти лише з початку.
  • Неможливо вручну встановити елемент за індексом масиву.

Масиви можна створювати за допомогою функції ArrayTrait::new, а також макросу array!:

let empty: Array<u32> = ArrayTrait::new();
let one_to_four = array![1, 2, 3, 4];

Елементи можна додавати до масиву за допомогою функції ArrayTrait::append:

let mut num_array = array![1, 2, 3, 4];
num_array.append(5);
// -> [1, 2, 3, 4, 5]

Елементи можна видаляти з масиву за допомогою функції ArrayTrait::pop_front:

let mut one_to_four = array![1, 2, 3, 4];

one_to_four.pop_front();
// -> [2, 3, 4]

Крім того, Cairo вводить тип Span, який поводиться як «знімок» Array.

Кожен Array можна перетворити на Span за допомогою функції ToSpanTrait::span:

let one_to_four = array![1, 2, 3, 4];
let one_to_four_span = one_to_four.span();
// -> [1, 2, 3, 4]

Перетворення масиву на Span дуже ефективне, адже Span - це просто структура даних, яка дозволяє Cairo «переглядати» частину масиву й жодним чином його не змінює.

Перетворивши масив на Span, Cairo дозволяє виконувати більше операцій, ніж було б дозволено безпосередньо над Array, наприклад видаляти елемент з початку Span:

let one_to_four = array![1, 2, 3, 4];
let mut one_to_four_span = one_to_four.span();
one_to_four_span.pop_back();
// -> [2, 3, 4]

Варто зауважити, що нам довелося зробити one_to_four_span змінним за допомогою ключового слова mut, щоб викликати pop_back, який змінює Span, скорочуючи ту частину масиву, яку Span «переглядає».

Вказівки

Як майбутня чарівниця, Еліз має попрактикуватися в основах.

У неї є стос карт, з якими вона хоче працювати.

Щоб трохи спростити собі завдання, вона використовує лише карти від 1 до 10.

Стос карт представлено Array, де низ стосу розташований на початку масиву, а верх - у кінці.

1. Вставити карту на верх стосу

Реалізуйте функцію insert_top, яка повертає копію стосу з новою наданою картою, доданою на верх стосу.

let stack = array![5, 9, 7, 1];
insert_top(stack, 8);
// -> [5, 9, 7, 1, 8]

2. Прибрати верхню карту зі стосу

Реалізуйте функцію remove_top_card, яка повертає копію стосу з прибраною верхньою картою.

Якщо наданий стос порожній, слід повернути початковий стос без змін.

let stack = array![3, 2, 6, 4, 8];
remove_top_card(stack);
// -> [3, 2, 6, 4]

3. Вставити карту в низ стосу

Реалізуйте функцію insert_bottom, яка повертає копію стосу з новою наданою картою, доданою в низ стосу.

let stack = array![5, 9, 7, 1];
insert_bottom(stack, 8);
// -> [8, 5, 9, 7, 1]

4. Прибрати карту з низу стосу

Реалізуйте функцію remove_bottom_card, яка повертає копію стосу з прибраною нижньою картою.

Якщо наданий стос порожній, слід повернути початковий стос без змін.

let stack = array![8, 5, 9, 7, 1];
remove_bottom_card(stack);
// -> [5, 9, 7, 1]

5. Перевірити розмір стосу

Реалізуйте функцію check_size_of_stack, яка перевіряє, чи дорівнює розмір стосу наданому stack_size, чи ні.

let stack = array![3, 2, 6, 4, 8];
check_size_of_stack(stack, 4);
// -> false

Щоб зрозуміти, чому працювати з масивами в Cairo не так просто, як в інших мовах програмування, варто памʼятати, що Cairo використовує незмінну модель памʼяті: щойно в комірку памʼяті щось записано, її вже не можна перезаписати, можна лише читати з неї.

Мова дещо приховує цю особливість, дозволяючи розробникам оголошувати та використовувати свої змінні так, ніби вони можуть змінюватися.

Хоча це трохи ускладнює написання коду, особливо коду, який використовує тип Array (зокрема ByteArray, який насправді є «масивом байтів»), це дає змогу писати доводжувані програми, які можна впевнено виконувати навіть на ненадійних машинах, тож компроміс цілком того вартий.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Cairo Exercism

Час розпочати Маг-початківець?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Cairo, а також 25 концепцій68 вправ та справжнє наставництво від людей, і все це безкоштовно.