String
konvertálása a Word
típusra (1 pont)Word
visszaalakítása String
értékre (1 pont)Használható segédanyagok: Haskell könyvtárainak dokumentációja, (lokális!) Hoogle, a tárgy honlapja és a BE-AD rendszerbe feltöltött beadandók. Ha bármilyen kérdés, észrevétel felmerül, azt a felügyelőknek kell jelezni, nem a diáktársaknak!
A feladatok egymásra épülnek ezért érdemes ezeket a megadásuk sorrendjében megoldani, de legalább megérteni az aktuális feladatot megelőző feladatokat! A függvények definíciójában lehet, sőt javasolt is alkalmazni a korábban definiált függvényeket (függetlenül attól, hogy sikerült-e azokat megadni).
Tekintve, hogy a tesztesetek, bár odafigyelés mellett íródnak, nem fedik le minden esetben a függvény teljes működését, határozottan javasolt még külön próbálgatni a megoldásokat beadás előtt, vagy megkérdezni a felügyelőket!
Részpontszámokat csak az elégséges szint elérése után lehet kapni!
Keresünk négybetűs szavak esetén egy olyan levezetést, amelyben el tudunk jutni egy szóból egy másikba csupán lépésenkénti egyetlen karakter megváltoztatásával. A megoldás során ügyelni fogunk arra, hogy a megoldásban felhasznált szavak mindegyike pontosan négybetűs legyen, illetve az eredményként kapott levezetés mindig egy adott szótár szerint jöjjön létre.
A szavak hosszának megtartásához ezért létrehozzuk a Word
típust, amelyet egy rendezett négyesként ábrázolunk:
String
konvertálása a Word
típusra (1 pont)Készítsük el azt a függvényt, amelyik lehetővé teszi, hogy pontosan négy karakterből álló láncokat a Word
típusra alakítsuk! Amennyiben a bemenet nem megfelelő, a függvénynek nincs értéke; ezt az error
alkalmazásával lehet jelezni.
Word
visszaalakítása String
értékre (1 pont)Adjuk meg azt a függvényt, amellyel Word
értékekből tudunk visszanyerni karakterláncokat!
Írjunk egy függvényt, amellyel Word
típusú értékként ábrázolt (négybetűs) szavak távolságát tudjuk meghatározni!
Két szó távolságát úgy tudjuk meghatározni, hogy összeszámoljuk az egyes pozíciókban eltérő karaktereket. Ennek megfelelően egy szó saját magától mért távolsága mindig 0, valamint két teljesen különböző szó távolsága 4. A kis- és nagybetűket megkülönböztetjük.
Állapítsuk meg egy függvény segítségével, hogy két szó következhet-e egymás után!
Ezt akkor mondjuk, ha a két szó távolsága pontosan egy. Értelemszerűen ezzel kizárjuk, hogy egy szó saját maga után következzen, ami a későbbiekben fontos lesz.
Határozzuk meg, hogy egy adott szóhoz viszonyítva szavak egy listájából mely elemek tekinthetőek rákövetkezőnek és melyek nem!
Ebben az esetben egy párt kell létrehoznunk, amelynek első komponense az adott szóra rákövetkezőeket tartalmazza egy listában, a második komponense pedig az eredeti lista maradékát. Tehát az így keletkező két lista konkatenációja mindig a kiindulási lista elemeit tartalmazza.
Hozzuk létre egy lista összes lehetséges forgatását!
Például az [1,2,3]
lista esetén egymásra következő elforgatásaikkal tudjuk megadni annak összes elforgatását:
[1,2,3] --> [2,3,1] --> [3,1,2]
Ennek megfelelően egy lista elforgatottjának tekintjük a lista elemeinek azon permutációját, ahol az elemek megegyező sorrendben vannak, azonban pozíciójuk szerint (valamennyivel) balra eltolva. Az eltolás során kiszoruló elemeket a lista végén hozzuk vissza.
Készítsünk egy olyan függvényt, amely a paraméterként megadott célfüggvény alapján kiválasztja egy lista elemeinek egyikét! Jelezzük az error
függvénnyel, ha valamiért ezt a választást nem tudjuk megtenni.
A célfüggvényünk a lista elemeihez hozzárendel egy egész számot. A feladatunk az, hogy válasszuk ki azt az elemet, amelyhez elsőként a legkisebb értéket rendeltük ezzel a függvénnyel.
Készítsünk egy függvényt, amellyel meg tudjuk adni, hogy egy kezdőszóból indulva egy adott szótár felhasználásával milyen módon érhető el a megadott végszó, amennyiben az lehetséges!
Az eredményként előállítandó szósorozat tagjaira páronként igaznak kell lennie, hogy a köztük levő (szó)távolság pontosan egy. Kivéve természetesen, ha a kezdőszó és a végszó megegyezik. A megoldás lehetőleg ne tartalmazzon ismétlődő részleteket!
A megvalósítás során az alábbi egyszerű eseteket célszerű vizsgálni:
Ha a kezdőszó megegyezik a végszóval, akkor a megoldásunk maga a kezdőszó;
Ha a végszó nincs a szótárban, akkor a megoldás eleve nem létezik, ilyenkor üres lista az eredmény;
Ha a végszó rákövetkezője a kezdőszónak, akkor a kettő megadja a megoldást.
Ha ezek közül egyik sem áll fenn, akkor folytassuk a megoldás keresését a következők szerint:
Válasszuk ki a kezdőszóból egy lépéssel elérhető szavakat a szótárból. Amennyiben ez a lista üres, nem tudunk továbblépni, nem létezik megoldás;
Ellenkező esetben állítsuk elő a lehetséges rákövetkezők felhasználásával az összes lehetséges megoldást úgy, mintha az egyes rákövetkezőből indulva keresnénk eredetileg a megoldást;
Válasszuk ki az előbbi lépésben generált lehetséges megoldások közül az optimálisat egy megfelelő célfüggvény segítségével: az optimális megoldás a lehető legrövidebb, de nem üres és az utolsó eleme a végszó.