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:
- Nejkratší, měřeno počtem grafémů zdrojového kódu. Nevýznamné mezery a komentáře se do délky nepočítají. Mezera je nevýznamná, pokud se jejím vynecháním nezmění význam programu. Například mezera mezi názvem a parametry funkce při volání bez závorek je významná.
- Nejelegantnější, dle našeho subjektivního uvážení.
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:
- Odečítat se smí pouze jednou, a pouze u dvojic IV, IX, XL, XC, CD, CM.
- Odečítat se smí až od poslední číslice dané hodnoty, tj. XIX se smí, IXX ne.
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