Anagramma

Anagramma

Közepes

Bevezetés

Egy garázsvásáron találsz egy gyönyörű, régi írógépet bagóért! Izgatottan hazarohansz, beteszel egy lapot, és nekiállsz gépelni. A lelkesedésed azonban alábbhagy, amikor megnézed az eredményt: minden szó összekavarodott! Például „stop”-ot ír a „post” helyett, és „least”-et a „stale” helyett. Óvatosan újrapróbálod, de most „spot”-ot és „slate”-et ír. Egy kis kísérletezés után rájössz, hogy minden betű kinyomtatása előtt véletlenszerű késleltetés van, ami összekavarja a sorrendet. Most már érted, miért adták el olyan kevés pénzért!

Rájössz, hogy ez a sajátosság lehetővé teszi anagrammák készítését: az anagramma olyan szó, amit úgy kapsz, hogy egy másik szó betűit átrendezed. Örülve a felfedezésnek, a nap hátralévő részét azzal töltöd, hogy több száz anagrammát készítesz.

Utasítások

A feladatod, hogy adott célszó és jelöltszavak halmaza esetén megkeresd a jelöltek azon részhalmazát, amelyek a célszó anagrammái.

Az anagramma betűk átrendezése új szó létrehozásához: például az "owns" a "snow" anagrammája. Egy szó nem a saját anagrammája: például a "stop" nem anagrammája a "stop"-nak.

A célszó és a jelöltek egy vagy több ASCII-betűből álló szavak (A-Z és a-z). A kis- és nagybetűk egyenértékűek: például a "PoTS" a "sTOp" anagrammája, a StoP viszont nem anagrammája a sTOp-nak. Az anagrammahalmaz a jelölthalmaz azon részhalmaza, amelynek elemei a célszó anagrammái (tetszőleges sorrendben). Az anagrammahalmaz szavait ugyanolyan kis- és nagybetűvel kell írni, mint ahogy a jelölthalmazban szerepelnek.

Ha a célszó "stone", a jelöltek pedig "stone", "tones", "banana", "tons", "notes", "Seton", akkor az anagrammahalmaz a "tones", "notes", "Seton".

Tippek

A feladat megoldásához implementálnod kell az anagramsFor függvényt, amely kap egy szót és szavak egy csoportját, és visszaadja azokat, amelyek a megadott szó anagrammái.

Az anagrammákat ugyanabban a sorrendben kell visszaadnod, ahogy a jelölt szavak listájában szerepelnek.

Ha most oldod meg először ezt a feladatot, érdemes ragaszkodnod a megadott szignatúrához:

anagramsFor :: String -> [String] -> [String]

Később érdemes lehet újra elővenni ezt a problémát, és más adattípusokkal meg könyvtárakkal kísérletezni:

  • Text a text csomagból.
  • Sequence és Set a containers csomagból.
  • MultiSet a multiset csomagból

A teszteket szándékosan úgy tervezték, hogy szinte bármilyen értelmes típusszignatúrát elfogadjanak, ezért bátran keresd meg azt, amelyiket a legjobbnak tartod.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Haskell Exercism

Készen állsz elkezdeni a(z) Anagramma feladatot?

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