Kurzusok
/
Julia
Julia
/
Feladatok
/
Elyse varázslatai
Elyse varázslatai

Elyse varázslatai

Tanulófeladat

Bevezetés

A Julia egyik központi célja, hogy gyorsan és hatékonyan tudjunk számításokat végezni numerikus adatokon. Renegeteg numerikus adaton.

Az adatok általában tömbökben (vagy valamilyen kapcsolódó típusban) tárolódnak, így nyugodtan mondhatjuk, hogy a tömbök a Julia nyelv középpontjában állnak.

A tömbök tetszőleges méretűek lehetnek (amit csak a hardver memóriakorlátai szabnak meg), és tetszőleges számú dimenziójuk lehet.

Ez a bevezető fogalom az egydimenziós tömbök alapjaival foglalkozik, amelyeket vektoroknak nevezünk.

Vektorok létrehozása

A Juliában a vektor értékek rendezett sorozata, amelyeket indexszám alapján érhetünk el.

A vektor létrehozásának legegyszerűbb módja, ha a szögletes zárójelbe felsoroljuk az értékeket:

julia> num_vec = [1, 4, 9]
3-element Vector{Int64}:
 1
 4
 9

julia> str_vec = ["arrays", "are", "important"]
3-element Vector{String}:
 "arrays"
 "are"
 "important"

A vektor típusa megegyezik az egyes elemek típusával.

Tehát a vektoroknak homogéneknek kell lenniük (minden elem azonos típusú)?

Bizonyos szinten igen, és ha a legjobb teljesítményt szeretnéd elérni, érdemes erre törekedni. Ha azonban szükséges, a Julia megkerülheti ezt a korlátot az Any típus használatával:

julia> mixed_vector = [1, "str", 'c']
3-element Vector{Any}:
 1
  "str"
  'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)

Üres vektor létrehozásakor a Julia alapértelmezés szerint az Any elemtípust használja, de ez pontosabban is megadható, ha az üres tömböt a kívánt elemtípussal annotáljuk.

julia> empty_vec = []
Any[]

julia> empty_int_vec = Int64[]
Int64[]

Olvasd el és jegyezd meg ezt a szabályt:

  • A Juliában az indexelés alapértelmezés szerint 1-től kezdődik, nem 0-tól.

Ez ismerős mindenkinek, aki használt már más adatelemző nyelveket (R, Matlab, Fortran...), de sokkoló lehet azoknak az informatikusoknak, akik C-szerű nyelvekhez szoktak.

Egyébként az indexek úgy működnek, ahogy gondolnád: csak tedd őket szögletes zárójelbe:

squares = [0, 1, 4, 9, 16]
squares[1]  # 0
squares[3]  # 4
squares[begin]  # 0 ("begin" is synonym for 1)
squares[end]  # 16 ("end" is synonym for length(squares))

Figyeld meg, milyen kényelmes az indexelés end-del (ami nagyon hasznos) és begin-nel (ami valószínűleg nem az).

A Python-programozók talán a negatív indexeken gondolkodnak. Ne tedd: ezek nem részei a Juliának, és BoundsError hibát váltanak ki, akárcsak bármely 1-nél kisebb vagy length(squares)-nél nagyobb index.

Vektorműveletek

A vektorok a Juliában módosíthatók: az egyes cellák tartalmát megváltoztathatjuk.

julia> vals = [1, 3, 5, 7]
4-element Vector{Int64}:
 1
 3
 5
 7

julia> vals[2] = 4  # reassign the value of this element
4

# Only the value at position 2 changes:
julia> vals
4-element Vector{Int64}:
 1
 4
 5
 7

Sok függvény áll rendelkezésre a vektorok manipulálására, bár a Julia dokumentációja ezeket vektorok helyett inkább „kollekciókként” általánosítja.

Figyeld meg, hogy a konvenció szerint azoknak a függvényeknek a nevében, amelyek módosítják a bemenetüket, ! szerepel. A fordító ezt nem kényszeríti ki, de a Julia világában ez egy nagyon erős konvenció.

Íme néhány a hasznos függvények közül:

  • Ha értékeket szeretnél hozzáadni a vektor végéhez, használd a push!() függvényt.
  • Az utolsó érték eltávolításához a pop!() függvényt használd.
  • A vektor elején végzett műveletekhez a megfelelő függvények a pushfirst!() és a popfirst!().
  • Egy elem beszúrásához vagy eltávolításához bármely pozícióban az insert!() és a deleteat!() áll rendelkezésre.
julia> vals = [1, 3]
2-element Vector{Int64}:
 1
 3

julia> push!(vals, 5, 6)  # can add multiple values
4-element Vector{Int64}:
 1
 3
 5
 6

julia> pop!(vals)  # mutates vals, return popped value
6

julia> vals
3-element Vector{Int64}:
 1
 3
 5

Utasítások

Elyse, a leendő varázsló, éppen az alapokat gyakorolja. Van egy pakli kártyája, amit szeretne manipulálni.

Hogy kicsit könnyebb legyen a dolga, csak az 1-től 10-ig terjedő kártyákat használja, így a kártyapaklija egy számvektorral ábrázolható. Egy adott kártya pozíciója a vektor indexének felel meg.

1. Kártya lekérése a pakliból

Egy kártya kiválasztásához add vissza a megadott pakli position indexű kártyáját.

julia> stack = [1, 2, 4, 1];
julia> position = 3;
julia> get_item(stack, position)
4

2. Kártya cseréje a pakliban

Végezz egy kis kézügyességet, és cseréld ki a position indexű kártyát a megadott cserekártyára. Add vissza a módosított paklit.

julia> stack = [1, 2, 4, 1];
julia> position = 3;
julia> replacement_card = 6;
julia> set_item!(stack, position, replacement_card)
[1, 2, 6, 1]

3. Kártya beszúrása a pakli tetejére

Varázsolj elő egy kártyát úgy, hogy egy új kártyát szúrsz be a pakli tetejére. Add vissza a módosított paklit.

julia> stack = [5, 9, 7, 1];
julia> new_card = 8;
julia> insert_item_at_top!(stack, new_card)
[5, 9, 7, 1, 8]

4. Kártya eltávolítása a pakliból

Tüntesd el a kártyát úgy, hogy eltávolítod a megadott position helyen lévő kártyát a pakliból. Add vissza a módosított paklit.

julia> stack = [3, 2, 6, 4, 8];
julia> position = 3;
julia> remove_item!(stack, position)
[3, 2, 4, 8]

5. A felső kártya eltávolítása a pakliból

Tüntesd el a kártyát úgy, hogy eltávolítod a pakli tetején lévő kártyát. Add vissza a módosított paklit.

julia> stack = [3, 2, 6, 4, 8];
julia> remove_item_from_top!(stack)
[3, 2, 6, 4]

6. Kártya beszúrása a pakli aljára

Varázsolj elő egy kártyát úgy, hogy egy új kártyát szúrsz be a pakli aljára. Add vissza a módosított paklit.

julia> stack = [5, 9, 7, 1];
julia> new_card = 8;
julia> insert_item_at_bottom!(stack, new_card)
[8, 5, 9, 7, 1]

7. Kártya eltávolítása a pakli aljáról

Tüntesd el a kártyát úgy, hogy eltávolítod a pakli alján lévő kártyát. Add vissza a módosított paklit.

julia> stack = [8, 5, 9, 7, 1];
julia> remove_item_at_bottom!(stack)
[5, 9, 7, 1]

8. A pakli méretének ellenőrzése

Ellenőrizd, hogy a pakli mérete egyenlő-e a stack_size értékkel vagy sem.

julia> stack = [3, 2, 6, 4, 8];
julia> stack_size = 4;
julia> check_size_of_stack(stack, stack_size)
false
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Julia Exercism

Készen állsz elkezdeni a(z) Elyse varázslatai feladatot?

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