Zadání soutěžních úloh

Kategorie žáci

Soutěž v programování – 26. ročník

Krajské kolo 2011/2012

19. až 21. dubna 2012

Prozohy znkaů
Poprask v Sherwoodu
Hrátky s čísly
Děda K. encyklopedistou

Úlohy můžete řešit v libovolném pořadí a samozřejmě je nemusíte vyřešit všechny. Za každou úlohu můžete dostat maximálně 10 bodů, z nichž je většinou 9 bodů vyhrazeno na ohodnocení funkčnosti programu, jeho shody se zadáním a efektivity a jeden bod na dokumentaci a přehlednost zdrojového kódu. Body získané za každou úlohu se ještě násobí koeficientem, který odráží složitost úlohy.

Na řešení úloh máte 4 hodiny čistého času.

Před zahájením soutěže vám pořadatel oznámí, kde najdete testovací soubory a vzorová řešení úloh. Textové testovací soubory pro všechny operační systémy používají řádky ukončené dvojicí znaků CR a LF.

Prozohy znkaů

Koeficient 1

Ří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íě.

Poprask v Sherwoodu

Koeficient 3

V sherwoodském lese už to zase vře – skupina zlosynů se snaží polapit Robina Hooda! Robin je na ně ovšem připraven a chce je přivítat bravurní střelou ze svého nového luku, který dokáže prostřelit i několik nepřátel naráz.

Problém je v tom, že zlosynů je opravdu hodně a Robin neví, jakým způsobem by jich mohl jedním výstřelem zasáhnout co nejvíc. Přemýšlel o tom, že by poprosil zlosyny, aby chvilku postáli bez pohnutí, dokud si nevyměří, odkud bude střílet, ale nebyl si jistý, že by jeho slušné žádosti zlosyni vyhověli. Poprosil nakonec raději o pomoc vás.

Napište program, který pokud možno rychle vyřeší Robinův problém. Na vstupu dostane souřadnice až 3000 různých bodů, každý zadaný dvěma souřadnicemi v rozsahu 1 až 1000. Cílem je najít přímku, která protne co nejvíc bodů. Přímka protne bod jenom tehdy, když prochází bez zaokrouhlování přesně jeho souřadnicemi. Máte zaručeno, že taková přímka je jedinečná. Výslednou přímku zobrazte spolu se všemi ostatními zlosyny v grafické podobě a vypište, kolik zlosynů dokáže Robin jedním výstřelem skolit.

Popis vstupu

Vstup načtěte ze souboru zlosyni.txt v aktuálním adresáři.

Soubor zlosyni.txt obsahuje souřadnice nepřátel, na každé řádce jsou mezerou oddělená dvě přirozená čísla v rozsahu 1 až 1000. Nepřátel je nanejvýš 3000 a každý má jedinečné souřadnice. Řádky jsou ukončeny dvojicí znaků CR a LF.

Zobrazení výstupu

Zobrazte oblast (1, 1)(1000, 1000) se všemi zlosyny a s výslednou přímkou tak, aby bod (1, 1) byl vlevo dole. Také zobrazte nebo vypište, kolik zlosynů dokáže Robin jedním výstřelem skolit.

Příklad vstupu a výstupu

zlosyni.txt obrazovka
100 900
400 700
900 100
500 500
100 100
500 900
150 200
900 900
500 100

Robin může jedním výstřelem skolit 4 zlosyny.

Ukázková data

V adresáři robin-hood se nachází ukázková data včetně příkladu ze zadání. Pro získání plného počtu bodů by měl váš program vyřešit každá z nich během vteřin.

Hrátky s čísly

Koeficient 1

Vypracujte program, který k zadanému celému kladnému číslu nalezne a vypíše co největší prvočíslo v jehož zápisu se každá číslice vyskytuje nanejvýš jednou a je menší než zadané číslo.

Například k 98777 to je prvočíslo 98731. Prvočíslo 98737 nevyhovuje protože se v něm vyskytuje číslice 7 dvakrát.

Děda K. encyklopedistou

Koeficient 3

Děda K. se rozhodl, že napíše encyklopedii. Taková encyklopedie se skládá z hesel, což je dvojice: název předmětu – popis předmětu. Vaším úkolem bude dědovi práci zjednodušit.

Napište program, pro práci s encyklopedickými hesly. Hesel nebude celkem více než 10 tisíc. Název předmětu nebude mít více než 255 znaků. Žádná dvě hesla nesmí mít stejný název. Popis nebude mít více než 32000 znaků.

Program umožní tyto funkce:

  • načítání hesel z datového souboru, určeného uživatelem,

  • zobrazování hesel – hesla jsou přitom zobrazována abecedně seřazená podle názvu předmětu, malá a velká písmena jsou rovnocená,

  • vytvoření hesla,

  • vyhledání hesla podle názvu předmětu,

  • změna hesla,

  • vymazání hesla,

  • vyhledání textu v názvech nebo popisech, případně obojím,

  • ukládání hesel do datového souboru, původního nebo do určeného uživatelem,

  • export hesel do souboru HTML a vytvoření/zvýraznění odkazů na jiná hesla v popisech.

Funkce přidávejte postupně, jak jsou uvedeny v zadání. Funkce nebude hodnocena, pokud nebudou fungovat všechny funkce předcházející. Popis datového souboru a HTML souboru najdete dále.

Prohlédněte si také ukázkový program.

Popis datového souboru

Datový soubor je textový soubor obsahující hesla, která jsou oddělena dvěma prázdnými řádky. Heslo se skládá z jedné řádky obsahující název předmětu. Následuje jedna prázdná řádka a jedna nebo více řádek popisu předmětu. Pozor: jednotlivé prázdné řádky v popisu předmětu jsou možné, zatímco dvě a více nikoliv, protože ty jsou použité jako oddělení hesel mezi sebou. Viz ukázkové soubory v adresáři encyklopedie.

Popis HTML souboru

Tento soubor – stránka HTML zobrazuje hesla (názvy předmětu i popis předmětu) seřazená podle názvů, malá a velká písmena jsou rovnocená. Hesla, jejichž název začíná stejným písmenem jsou seskupena do oddílů, na které jsou odkazy na začátku stránky. U každého hesla jsou odkazy vedoucí na začátek oddílu a stránky. Pokud se v popisu hesla objeví text, který se shoduje s názvem kteréhokoliv hesla (bez ohledu na velikost písmen), změňte tento text na odkaz na shodné heslo. Viz ukázkový soubor v adresáři encyklopedie.