Druhá série pátého ročníku KSP

Tyto úlohy pocházejí z desetileté ročenky KSP. Jejich řešení bohužel nemáme v elektronické podobě, takže na ně budete muset přijít sami.

Zadání úloh


5-2-1 Milijón čísel


Na disku je soubor s nejvýše 27 000 16-bitovými čísly od 1 do 27 000. K dispozici je dost místa na disku, ale pouze 4 KB (= 4 096 bajtů) paměti. Vaším úkolem je napsat program, který zkontroluje, zda se v souboru nějaké číslo opakuje, a pokud ne, vytiskne všechna čísla v rostoucím pořadí.

Poznámka: Tato úloha prý vznikla v USA při rozdělování volebních okrsků do volebních okruhů.


5-2-2 Posloupnost


Na vstupu je dána uspořádaná posloupnost celých čísel a1, … , an. Navrhněte algoritmus a napište program, který zjistí, zda se ve vstupní posloupnosti vyskytují tři čísla x, x2, x3 a pokud ano, vytiskne je.

Příklad: Vstupní posloupnost je -5, -1, 2, 4, 5, 7, 8, 10; hledaná čísla jsou 2, 4, 8.


5-2-3 Generování


Vstupem programu jsou reálná čísla p1, … , pn, pro než platí:

0 ≤ p1 ≤ p2 ≤ … ≤ pn ≤ 1
p1 + p2 + … + pn = 1

V určitém místě programu bude třeba generovat náhodná čísla od 1 do n, a to tak, aby číslo i bylo generováno s pravděpodobností pi. Napište co nejrychlejší funkci, která bude taková čísla generovat.

Nápověda: Před vlastním generováním náhodných čísel bude jistě dost času na nějakou vhodnou předvýpočetní přípravnou proceduru.


5-2-4 Jsem to já?


Napište program, který, najde-li na vstupu svůj vlastní zdrojový text, vytiskne „To sou teda fóry“, v opačném případě vytiskne svůj zdrojový text.


5-2-5 Konečně


Sestrojte konečné automaty, které rozpoznávají následující jazyky:

L1={w∈{a,b}*; w=xbaba, x∈{a,b}*}
L2={w∈{1,2,3,4,5}*; w  je ostře rostoucí posloupnost}

Příklad: Do jazyka L2 patří například 135, 12, e. Nepatří do něj například 534, 12321.

Poznámka: Sestrojením konečného automatu rozumíme vypsání složek pětice a nakreslení obrázku. Krátký studijní text o konečných automatech najdete v kapitole 11.