Kurzusok
/
Factor
Factor
/
Feladatok
/
Annalyn beszivárgása
Annalyn beszivárgása

Annalyn beszivárgása

Tanulófeladat

Bevezetés

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.

Shuffle szavak

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 )

Boolean-ok

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

Boolean szavak

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.

Utasítások

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.

1. Ellenőrizd, hogy meg kell-e jeleníteni a „Gyors támadás” 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

2. Ellenőrizd, hogy meg kell-e jeleníteni a „Kémkedés” lehetőséget

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

3. Ellenőrizd, hogy meg kell-e jeleníteni a „Jelzés a fogolynak” lehetőséget

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

4. Ellenőrizd, hogy meg kell-e jeleníteni a „Fogoly kiszabadítása” lehetőséget

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)
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Factor Exercism

Készen állsz elkezdeni a(z) Annalyn beszivárgása feladatot?

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.