Kurzusok
/
Cairo
Cairo
/
Feladatok
/
Bűvésztanonc
Bűvésztanonc

Bűvésztanonc

Tanulófeladat

Bevezetés

Tömbök

A Cairo alaptára egy Array típust valósít meg.

Hasonló a más programozási nyelvekben megszokott tömbtípusokhoz, de néhány lényeges különbséggel:

  • Az elemeket hatékonyan csak az Array típus végéhez lehet hozzáadni, és hatékonyan csak az elejéről lehet eltávolítani.
  • A tömb indexével nem lehet egy elemet kézzel beállítani.

Tömböket az ArrayTrait::new függvénnyel és az array! makróval is létrehozhatsz:

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

Az elemeket az ArrayTrait::append függvénnyel adhatod hozzá a tömbhöz:

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

Az elemeket az ArrayTrait::pop_front függvénnyel távolíthatod el a tömbből:

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

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

A Cairo emellett bevezet egy Span típust, amely az Array „pillanatképeként” viselkedik.

Minden Array átalakítható Span típussá a ToSpanTrait::span függvénnyel:

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

Egy tömb Span típussá alakítása nagyon hatékony, mert a Span valójában csak egy adatszerkezet, amely lehetővé teszi a Cairo számára, hogy „rálásson” a tömb egy szakaszára, és semmilyen módon nem módosítja azt.

Azzal, hogy egy tömböt Span típussá alakítasz, a Cairo több műveletet tesz lehetővé, mint amit az Array típuson közvetlenül megengedne, például egy elem eltávolítását a span elejéről.

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]

Figyeld meg, hogy a one_to_four_span változót a mut kulcsszóval kellett módosíthatóvá tennünk ahhoz, hogy meghívhassuk a pop_back metódust, amely úgy módosítja a spant, hogy lerövidíti a tömbnek azt a szakaszát, amelyre a span „rálát”.

Utasítások

Leendő varázslóként Elyse-nek gyakorolnia kell néhány alapvető dolgot.

Van egy kártyapaklija, amit szeretne mozgatni.

Hogy egy kicsit könnyebb legyen, csak az 1-től 10-ig terjedő kártyákat használja.

A kártyapaklit egy Array reprezentálja: a pakli alja a tömb elején, a teteje pedig a tömb végén van.

1. Szúrj be egy kártyát a pakli tetejére

Valósítsd meg az insert_top függvényt, amely a pakli egy másolatát adja vissza úgy, hogy a megadott új kártya a pakli tetejére kerül.

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

2. Vegyél le egy kártyát a pakli tetejéről

Valósítsd meg a remove_top_card függvényt, amely a pakli egy másolatát adja vissza, miután eltávolította annak felső kártyáját.

Ha a megadott pakli üres, akkor az eredeti paklit kell visszaadni, változatlanul.

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

3. Szúrj be egy kártyát a pakli aljára

Valósítsd meg az insert_bottom függvényt, amely a pakli egy másolatát adja vissza úgy, hogy a megadott új kártya a pakli aljára kerül.

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

4. Vegyél le egy kártyát a pakli aljáról

Valósítsd meg a remove_bottom_card függvényt, amely a pakli egy másolatát adja vissza, miután eltávolította annak alsó kártyáját.

Ha a megadott pakli üres, akkor az eredeti paklit kell visszaadni, változatlanul.

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

5. Ellenőrizd a pakli méretét

Valósítsd meg a check_size_of_stack függvényt, amely ellenőrzi, hogy a pakli mérete megegyezik-e a megadott stack_size értékkel vagy sem.

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

Ahhoz, hogy megértsd, miért nem olyan egyszerű a Cairoban a tömbökkel dolgozni, mint más programozási nyelvekben, érdemes szem előtt tartani, hogy a Cairo egy változtathatatlan memóriamodellt használ: ha egyszer egy memóriacellába írtak, azt soha többé nem lehet felülírni, csak olvasni belőle.

A nyelv némileg elfedi ezt a tulajdonságot, és lehetővé teszi, hogy a fejlesztők úgy deklarálják és használják a változóikat, mintha azok változtathatók lennének.

Bár mindez kicsit megnehezíti a kódírást, különösen az olyan kódét, amely az Array típust használja (beleértve a ByteArray-t is, amely a háttérben valójában egy „bájtokból álló tömb”), ez teszi lehetővé, hogy bizonyítható programokat írjunk, amelyeket még nem megbízható gépeken is nyugodtan futtathatunk, így a kompromisszum bőven megéri.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Cairo Exercism

Készen állsz elkezdeni a(z) Bűvésztanonc feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Cairo nyelvet 25 fogalom68 feladat segítségével, valódi emberi mentorálással, mindez ingyen.