Sakktábla

Sakktábla

Tanulófeladat

Bevezetés

Tegyük fel, hogy szükséged van az összes nemnegatív egész számra 1000-ig. Nevetséges lenne, ha ezeket egy tömbbe kellene begépelned.

Erre való a range típus:

julia> 0:1000
0:1000

julia> typeof(0:1000)
UnitRange{Int64}

A range-ek nagyon gyakoriak: nemcsak gépelést spórolnak meg, hanem függvények visszatérési típusaként is előfordulnak.

Figyeld meg, hogy a range-ek nem vektorok. Nem mások, mint utasítások halmaza egy sorozat előállításához („lusta” kiértékelés, vagy egy „iterátor”).

Ha a range-re vektorként van szükséged, a collect() függvénnyel alakíthatod át:

julia> collect(0:5)
6-element Vector{Int64}:
 0
 1
 2
 3
 4
 5

A lépésköz is megadható, ebben az esetben 0.3:

julia>  collect(1.0:0.3:2.0)
4-element Vector{Float64}:
 1.0
 1.3
 1.6
 1.9

A szintaxis tehát start:stepsize:stop. Mindkét végpont beleértendő, ahogy az egész számos példában is látszik. Ha a lépésköz nem osztja pontosan a stop - start értéket, az utolsó elem nem haladja meg a stop-ot.

Betűk range-ei

A range-ekben nem numerikus sorozatok is szerepelhetnek. A legegyszerűbb példa az ASCII-betűk:

julia> 'a':'d'
'a':1:'d'

julia> typeof('a':'d')
StepRange{Char, Int64}

julia> collect('a':'d')
4-element Vector{Char}:
 'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
 'b': ASCII/Unicode U+0062 (category Ll: Letter, lowercase)
 'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
 'd': ASCII/Unicode U+0064 (category Ll: Letter, lowercase)

A Char típussal egy másik fogalom foglalkozik majd részletesebben. Egyelőre tekintsd ezeket egyszeres idézőjelbe tett egyetlen karaktereknek.

Függvények és operátorok range-ekhez

A range határait a first() és a last() függvénnyel ellenőrizheted.

 r = 1:10  # => 1:10
 first(r)  # => 1
 last(r)   # => 10

Még több a vektorindexelésről

Vektorindexelésben egész számokat tartalmazó range-ek és vektorok is használhatók:

nums = collect(10.0:50.0)
nums[3:2:7]  # gives [12.0, 14.0, 16.0]
nums[ [3, 5, 7] ] # also gives [12.0, 14.0, 16.0]

Utasítások

Sakkrajongóként szeretnéd megírni a játék saját változatát. Igaz, máris rengeteg sakkimplementáció elérhető az interneten, de a tiéd egyedi lesz!

De mielőtt szabadjára engednéd a fantáziádat, a legalapvetőbb dolgokkal kell kezdened. Kezdjük a tábla előállításával.

A sakktábla minden mezőjét egy betűből és egy számból álló pár azonosítja. A mezők függőleges oszlopait, amelyeket file-oknak neveznek, A-tól H-ig jelölik. A mezők vízszintes sorait, amelyeket rank-oknak neveznek, 1-től 8-ig számozzák.

1. A rank-tartomány meghatározása

Valósítsd meg a rank_range() függvényt. Egy egész számokból álló tartományt kell visszaadnia 1-től 8-ig.

julia> rank_range()
# output omitted

2. A file-tartomány meghatározása

Valósítsd meg a file_range() függvényt. Egy karakterekből álló tartományt kell visszaadnia a nagybetűs A-tól a nagybetűs H-ig.

julia> file_range()
# output omitted

3. A rank-tartomány átalakítása rank-ok vektorává

Valósítsd meg a ranks() függvényt. Egy egész számokból álló vektort kell visszaadnia 1-től 8-ig. Ne írd le kézzel a vektort, hanem a rank_range() függvény által visszaadott tartományból állítsd elő.

julia> ranks()
[1, 2, 3, 4, 5, 6, 7, 8]

4. A file-tartomány átalakítása file-ok vektorává

Valósítsd meg a files függvényt. Egy karakterekből álló vektort kell visszaadnia 'A'-tól 'H'-ig. Ne írd le kézzel a vektort, hanem a file_range() függvény által visszaadott tartományból állítsd elő.

julia> files()
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Julia Exercism

Készen állsz elkezdeni a(z) Sakktábla 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.