[3,5] Kávovar
Máme hlučný kávovar. Podle toho, v jakém je zrovna stavu, umí vydávat celou škálu zvuků.
Kdosi zvuky pečlivě zapsal – pochopitelně bez oddělovačů, jako jeden dlouhý řetězec. Programu v této úloze má rozhodnout, zda může jít o zápis zvuků, které kávovar postupně vydával. Víme navíc, že na začátku i na konci záznamu byl kávovar vypnutý.
- Když kávovar zapneme, nejdřív se ozve "klik". Pak se nějakou dobu opakovaně ozývá "bz", a to přinejmenším jednou.
- Když během zapínání kávovar vypneme, ozve se "klak" a jinak nic. Když se kávovar úspěšně zapne, udělá "píp". Když vypneme zapnutý kávovar, ozve se "klak" a jinak nic.
- Zapnutý kávovar můžeme požádat o kávu stisknutím tlačítka, které udělá "klik". Kávovar potom namele kávu, ohřeje vodu, přepresuje ji přes kávu a nakonec udělá "píp".
- Během mletí kávy můžeme kávovar vypnout, v tom případě se ozve "klak" a jinak nic. Během hřátí nebo presování můžeme kávovar vypnout, v tom případě vypustí nahřátou vodu se zvukem "pss", po kterém může následovat ještě libovolný počet dalších "s".
- Během mletí kávy se opakovaně ozývá "trr", aspoň jednou. Během nahřívání vody se může opakovaně ozývat "bubly". Během presování se ozývá "tr", aspoň jednou.
Přesně pro tenhle účel se hodí funkce re.fullmatch, která ale bohužel není dostupná tady na webu. Použít ji můžete, jen vám kód tady nepůjde otestovat. Alternativou je použít re.match a na konec regulárního výrazu napsat $
.
Každý regulární výraz jde nakreslit taky jako stavový automat. Kdyby zvuky byly jednopísmenné, je to hezky přehledný automat. Jinak musíme každý přechod nahradit několika mezistavy.