Kurzusok
/
Haskell
Haskell
/
Feladatok
/
Atbash-rejtjel
Atbash-rejtjel

Atbash-rejtjel

Közepes

Utasítások

Készítsd el az Atbash-rejtjel implementációját. Ez egy ősi titkosítási rendszer, amely a Közel-Keleten született.

Az Atbash-rejtjel egy egyszerű helyettesítő rejtjel, amely az ábécé összes betűjét megfordítja, így a kapott ábécé hátulról előre halad. Az első betűt az utolsóra cseréli, a másodikat az utolsó előttire, és így tovább.

A latin ábécéhez tartozó Atbash-rejtjel így néz ki:

Plain:  abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba

Ez egy nagyon gyenge rejtjel, mert csak egyetlen lehetséges kulcsa van, ráadásul egyszerű monoalfabetikus helyettesítő rejtjel. A rejtjel korában azonban ez talán nem jelentett problémát.

A rejtjelszöveget rögzített hosszúságú csoportokban írjuk le, a hagyományos csoportméret 5 betű, a számokat változatlanul hagyva, az írásjeleket pedig kihagyjuk. Ezzel nehezebb a szóhatárok alapján következtetni. Minden szöveg kisbetűvel lesz kódolva.

Példák

  • A test kódolása: gvhg
  • A x123 yes kódolása: c123b vh
  • A gvhg dekódolása: test
  • A gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt dekódolása: thequickbrownfoxjumpsoverthelazydog

Tippek

Meg kell valósítanod a decode és encode függvényeket, amelyek Atbash-rejtjel segítségével dekódolnak, illetve kódolnak egy String-et. Használhatod a megadott szignatúrát, ha nem vagy biztos a típusokban, de ne hagyd, hogy ez korlátozza a kreativitásodat.

Ez a feladat szöveges adatokkal dolgozik. Történelmi okokból a Haskell String típusa megegyezik a [Char] típussal, ami karakterek listája. A szöveges adatok hatékonyabb kezeléséhez használhatod a Text típust.

A feladat opcionális kiterjesztéseként a következőket teheted:

import qualified Data.Text as T
import           Data.Text (Text)
  • használd a Text típust, például decode :: Text -> Text, és hivatkozz a Data.Text kombinatoraira például a T.pack formában.
  • nézd meg a Data.Text dokumentációját.
  • cseréld le a String összes előfordulását Text-re az Atbash.hs fájlban, azaz:
decode :: Text -> Text
decode cipherText = ...

encode :: Text -> Text
encode plainText = ...

Ez a rész teljesen opcionális.


Forrás

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

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