Perlivá soutěž

Abychom vás motivovali si s Perlem 6 trochu hrát, připravili jsme pro vás malou soutěž. Výsledky nemají žádný vliv na získání zápočtu, ale nejúspěšnější oceníme sladkou odměnou.

Níže najdete zadání několika úloh. Řešení budeme nezávisle vyhodnocovat ve dvou kategoriích:

Můžete u jedné úlohy odeslat pro každou kategorii jiné řešení, nebo pro obě společné, pokud si myslíte, že splňuje obě kritéria.

Pokud úkolem je napsat funkci, může být jak anonymní, tak libovolně pojmenovaná. Není třeba ošetřovat chybové situace, nesprávné vstupu, atp.

Svá řešení prosím posílejte na adresu perl@ucw.cz.

Úlohy

Frekvence slov

Napište program, který přečte textový soubor (určený parametrem příkazového řádku) a vypíše všechna slova v něm obsažená, v sestupném pořadí dle četnosti. Za slovo považujte libovolný řetězec vyhovující \w+. Porovnávejte case-insensitive.

Příklad vstupu: Perl 6: it is Perl but it is not Perl.
Příklad výstupu:

Perl
it
is
but
not
6

Strom

Napište funkci, která jako paremetr dostane neorientovaný graf popsaný seznamem hran a rozhodne, zda se jedná o strom (souvislý graf bez cyklů, smyček a multihran).

Příklad vstupu: [(1,2), (2,3), (1,3)]
Příkald výstupu: False

Dekódování morseovky

Napište funkci, která na jako parametr dostane zápis textu v Morseově abecedě (řetězec znaků ., - a /) a dekóduje jej. Text obsahuje pouze písmena anglické abecedy a mezery (dvě lomítka za sebou). Můžete předpokládat, že se nevyskytnou mezery na začátku či konci řetězce, ani dvě za sebou.

Příklad vstupu: ".--././.-./.-..//.../../-..-"
Příklad výstupu: PERL SIX

Římská čísla

Napište funkci, která na vstupu dostane řetězec obsahující římský zápis přirozeného čísla a vrátí jeho číselnou hodnotu.

Zápis na vstupu splňuje následující pravidla:

Platná čísla tedy jsou třeba I, IX, MCMXLIV, MMXIV.

Příklad vstupu: 'XLII'
Příklad výstupu: 42

Look-and-say

Napište funkci, která vrátí (jako nekonečný seznam) Conwayovu posloupnost (look and say sequence).

Příklad výstupu: (1, 11, 21, 1211, 111221, 312211, ...)

Síťová maska

Napište funkci, která dostane jako parametr IPv4 síťovou masku v desítkové notaci, a vrátí délku síťového prefixu v bitech.

Příklad vstupu: '255.255.255.224'
Příklad výstupu: 27

Stránku spravuje Martin Mareš