Ez a feladat arra az adatveremre és veremhatás-jelölésre épül, amivel a Cargo Shuffle feladatban találkoztál. Itt olyan szavakat írsz majd, amelyek Boolean értékeket kombinálnak.
A leggyakoribb shuffle szavak a kernel szótárban találhatók:
dup ( x -- x x )
dupd ( x y -- x x y )
drop ( x -- )
swap ( x y -- y x )
swapd ( x y z -- y x z )
over ( x y -- x y x )
pick ( x y z -- x y z x )
rot ( x y z -- y z x )
-rot ( x y z -- z x y )
rotd ( w x y z -- w y z x )
spin ( x y z -- z y x )
nip ( x y -- y )
tuck ( x y -- y x y )
2dup ( x y -- x y x y )
3dup ( x y z -- x y z x y z )
4dup ( w x y z -- w x y z w x y z )
2drop ( x y -- )
3drop ( x y z -- )
4drop ( w x y z -- )
2nip ( x y z -- z )
2swap ( x y z w -- z w x y )
Két Boolean-literál létezik: t és f. A Factorban az f az egyetlen hamis érték. Minden más igaz értékű, köztük a 0 és az üres gyűjtemények is.
t . ! => t
f . ! => f
Ez a három Boolean szó a kernel szótárból származik:
and ( x y -- ? ) ! true when both inputs are truthy
or ( x y -- ? ) ! true when either input is truthy
not ( x -- ? ) ! inverts its argument
t t and . ! => t
t f and . ! => f
f t or . ! => t
t not . ! => f
A kimenetekben szereplő ? a veremhatás-jelölés megállapodása szerint »Boolean értéket« jelöl.
Az alábbi részfeladatok egyikéhez szükséged lesz a swap szóra.
Ebben a feladatban egy videójátékhoz írsz logikát, amelyet egy barátod fejleszt. A játék főszereplője Annalyn, egy bátor lány, aki mellett ott van egy harcias és hűséges kutyája. Sajnos azonban bekövetkezik a baj: a legjobb barátját elrabolják, miközben az erdőben bogyókat keres. Annalyn megpróbálja megkeresni és kiszabadítani a barátját, és ha úgy akarja, magával viszi a kutyáját is erre a küldetésre.
Annalyn végül megtalálja a tábort, amelyben a barátját fogva tartják, és kiderül, hogy két emberrabló van: egy hatalmas lovag és egy ravasz íjász.
A játékos elé kiírunk néhány lehetőséget, hogy mit tegyen legközelebb. A négy lehetséges lehetőség mindegyikéhez írnod kell egy szót, amely megmondja a játéknak, hogy meg kell-e jelenítenie az adott lehetőséget.
Ha a lovag alszik, Annalyn gyors támadást tud intézni a tábor ellen, mielőtt a lovag rendesen felébredne és magára öltené a páncélját.
Készíts egy can-do-fast-attack nevű szót, amely egy Boolean értéket vár, ami megmutatja, hogy a lovag ébren van-e.
t-t ad vissza, ha a „Gyors támadás” akció elérhető, egyébként f-et:
t can-do-fast-attack .
! => f
A csoportot meg lehet kémlelni, ha legalább az egyikük ébren van. Egyébként a kémkedés csak időpocsékolás.
Készíts egy can-spy nevű szót, amely három Boolean értéket vár, és ezek rendre azt mutatják, hogy a lovag, az íjász és a fogoly ébren van-e.
t-t ad vissza, ha a „Kémkedés” akció elérhető, egyébként f-et:
f t f can-spy .
! => t
A fogolynak madárhangokkal lehet jelezni, ha ő ébren van, az íjász pedig alszik. Ha az íjász ébren van, akkor nem lehet biztonságosan jelezni, mert az íjász is képzett a madárjelzésben.
Készíts egy can-signal-prisoner nevű szót, amely két Boolean értéket vár, és ezek rendre azt mutatják, hogy az íjász és a fogoly ébren van-e.
t-t ad vissza, ha a „Jelzés a fogolynak” akció elérhető, egyébként f-et:
f t can-signal-prisoner .
! => t
Annalyn megpróbálhat belopózni a táborba, hogy kiszabadítsa a barátját. Ez kockázatos dolog, és csak kétféleképpen sikerülhet:
Ha Annalyn magával hozta a kutyáját, akkor ki tudja szabadítani a foglyot, ha az íjász alszik. A lovag fél a kutyától, az íjásznak pedig nem lesz ideje felkészülni, mielőtt Annalyn és a barátja elszökhet.
Ha Annalynnél nincs ott a kutyája, akkor neki és a fogolynak nagyon óvatosnak kell lennie! Annalyn akkor tudja kiszabadítani a foglyot, ha a fogoly ébren van, a lovag és az íjász pedig alszik. Ha a fogoly alszik, nem lehet kiszabadítani: Annalyn hirtelen felbukkanása megijesztené, és felébresztené a lovagot meg az íjászt.
Készíts egy can-free-prisoner nevű szót, amely négy Boolean értéket vár.
A paraméterek sorrendben azt mutatják, hogy az íjász ébren van-e, ott van-e a kutya, a fogoly ébren van-e, és a lovag ébren van-e.
t-t ad vissza, ha a „Fogoly kiszabadítása” akció elérhető, egyébként f-et:
f t t f can-free-prisoner .
! => t (archer asleep, dog present, prisoner awake, knight asleep)
t t f f can-free-prisoner .
! => f (archer is awake, so no rescue possible)
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Factor nyelvet 47 fogalom163 feladat segítségével, valódi emberi mentorálással, mindez ingyen.