Stiskněte "Enter" pro přeskočení obsahu

Prozohy znkaů – soutěže v programování – část 1: Teorie

Michal Poláček 0

Kdysi, asi před rokem jsem byl účastníkem krajského kola soutěže v programování. Chtěl bych vám dát možnost nahlédnout jak taková soutěž probíhá, konkrétně co musíme udělat. Začneme tou nejjednodušší úlohou – prozohy znkaů.
Ve zkratce jde o to, že vezme slova delší než 3 písmenka a budeme jim prohazovat písmenka, jen první a poslední zůstanou. A aby to nebylo až tak jednoduché, zadána nám bude klidně celá věta a ve slově budeme mít určený počet prohozů, podle zadaného vzorce. Tady si můžete vychutnat celé zadání:

Říká se, že při čtení textu dokážeme bez problému přečíst i slova s přeházenými znaky, pokud zůstane první a poslední písmenko na svém místě. Vaším úkolem je napsat program, který to pomůže ověřit. Na vstupu programu je text a celé číslo P v rozsahu od 0 do 1000 určující míru prohazování (viz dále). Výstupem je text s proházenými písmenky.
Přesný postup prohazování písmen je takovýto: Změny budeme provádět pouze ve slovech, slovem se rozumí posloupnost písmen české abecedy oddělená alespoň jedním nepísmenem (jakýmkoliv jiným znakem, mezerou, číslicí a pod). Znaky mimo slova nebudeme nijak měnit. Slova kratší než 4 písmena ponecháme také beze změn. Pro slova o čtyřech a více znacích určíme nejdříve počet prováděných prohozů pro dané slovo – má-li slovo N písmen, pak počet prohozů X bude náhodné číslo v rozsahu od 0 do P*(N-3)/100. Následně X-krát vybereme vždy náhodně dvě pozice písmen ve slově mimo první a poslední a písmena na nich umístěná prohodíme. Prohazujeme bez ohledu na to, zda již dříve na daném místě k prohozu došlo.
Pro zjednodušení chápejte písmeno „ch“ jako dvě samostatná písmena „c“ a „h“.
Má-li váš program grafické rozhraní, bude vstupní text vložen uživatelem do vstupního pole dle zvyklostí daného rozhraní. Programátoři pracující v prostředích preferujících příkazový řádek mohou pracovat se standardím vstupem a výstupem. Předpokládejte délky textů maximáně do osmi tisíc znaků.
Příklad 1. Příklad vstupu
Důležitá věc je, aby byla první a poslední písmena na správném místě.
Příklad 2. Příklad výstupu pro parametr P = 200
Dleůitžá věc je, aby blya pnvrí a psoelndí pímesna na srpváénm mstíě.

Tak, teď už víte, o co jde a můžeme se do toho pustit. Dneska jen teorie, programování až příště :). 
Náš program bude muset splňovat tato kritéria

  • Budeme měnit pouze slova (tzn. ne čísla atd.)
  • Slova co mají méně, než 4 písmena necháme být

Pokud jsou tato kritéria splněná, tak nejprve musíme spočítat počet prohozů – číslo X, to bude z intervalu od nuly do P*(N-3)/100, kdy P je číslo co zadá uživatel a N je počet znaků ve slově. Potom vybereme dvě náhodná písmena (kromě prvního a posledního) a prohodíme je. Toto opakujeme X-krát.
Pokud tedy shrnu, co musíme udělat, nejprve rozdělíme větu na slova (podle mezer). Zbytek kódu už budeme provádět v cyklu a to přesně tolikrát kolik je slov. Pak zjistíme počet znaků ve slově a odečteme 2 (kvůli prvnímu a poslední písmenu), tomu budeme říkat číslo Y, poté náhodně vybereme 2 čísla, která jsou minimálně 1 (v PHP má první písmenko číslo 0) a maximálně Y. To budou čísla znaků, které budeme prohazovat. Písmena prohodíme a opakujeme X-krát. 
V příštím díle si to naprogramujeme (v PHP). 

Komentáře jsou uzavřeny.