Úloha 16: Morseova abeceda

Mírně pokročilý asociativní pole str_replace() šifrování řetězce

Cíl úlohy

Vytvořte obousměrný překladač mezi běžným textem a Morseovou abecedou. Skript umožní zašifrovat zadaný text do Morseova kódu (tečky a čárky s lomítkem jako oddělovačem písmen) a naopak dešifrovat kód zpět do latinky.

Pravidla reprezentace Morseovy abecedy v textu

  • Znaky a číslice: Každé písmeno je reprezentováno sekvencí teček . a čárek - (např. S = ..., O = ---).
  • Oddělovač písmen: Za každým písmenem následuje jedno lomítko /. Např. SOS se zapíše jako .../---/.../.
  • Oddělovač slov: Mezi slovy jsou dvě lomítka //.
  • Zalomení řádku: Tři lomítka ///.

Úvahy a doporučený postup řešení

  • Odstranění diakritiky: Morseova abeceda nerozlišuje háčky a čárky. Před překladem text převeďte na malá písmena bez diakritiky (pomocí funkce bezdia() z funkce.php a mb_strtolower()).
  • České písmeno „CH“: V češtině má CH svůj vlastní speciální kód: ---- (čtyři čárky). Proto je nutné jej nahradit dříve než samostatná písmena C a H!
  • Dešifrování (z Morseovky do textu): Při dešifrování nelze bezhlavě nahrazovat tečky a čárky, protože např. kód pro E (.) je obsažen v mnoha dalších písmenech (např. S ...). Vhodnou strategií je rozdělit Morseův text podle lomítek explode('/', $text) na jednotlivé kódy písmen a ty vyhledat v obráceném poli array_flip($morse).

Doplňující otázky k zamyšlení a náměty na rozšíření

  • 1. Kdo a kdy vynalezl Morseovu abecedu a jaký byl první slavný telegram odeslaný Samuelem Morsem v roce 1844 („What hath God wrought“)?
  • 2. Jak funguje zvuková signalizace Morseovky pomocí Web Audio API v moderním JavaScriptu (generování tónu pro tečku a čárku)?
  • 3. Proč mají v Morseově abecedě nejčastěji se vyskytující písmena (např. E . a T -) nejkratší kód? Jak tento princip předchází modernímu Huffmanovu kódování a kompresi dat?

Vyzkoušejte funkční řešení: Otevřít vzorovou úlohu morse.php