Hodnocení 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

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

Hodnocení

Funkčnost1 bodProgram načítá vstupní text a zobrazuje text výstupní s viditelně proházenými znaky (použijte text o alespoň desítkách znaků).
2 bodyPrvní a poslední znak slova zůstává vždy na svém místě.
2 bodyMíra proházení znaků odpovídá zadanému číslu P. Pro P=0 je výstup bez prohozů.
2 bodyČeské znaky jsou chápány jakou součást slova.
2 bodyČíslice nejsou chápány jakou součást slova.
dokumentace1 boddokumentace, komentáře, přehlednost, výstižné názvy proměnných, …

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.

Hodnocení

Úloha je hodnocena deseti body, které se rozdělí následovně:

9 bodů

Funkčnost a efektivita.

Program soutěžících se vyhodnotí na devíti vstupních adresářích robin-hood/adresar-NN, za každý dostane soutěžící 0 bodů nebo 1 bod.

Při vyhodnocování adresáře se z něj zkopíruje soubor zlosyni.txt do adresáře s programem soutěžícího a program se spustí. Program musí do 10 vteřin zobrazit výsledek. Pokud program v limitu zobrazí výsledek a ten se shoduje se vzorovým řešením (tj. počet zlosynů a přímka přesně odpovídají), dostane soutěžící 1 bod, jinak žádný.

1 bod Dokumentace, komentáře, přehlednost a výstižné názvy proměnných.
Funkčnost1 bodúspěšné zpracování adresar-01
1 bodúspěšné zpracování adresar-02
1 bodúspěšné zpracování adresar-03
1 bodúspěšné zpracování adresar-04
1 bodúspěšné zpracování adresar-05
1 bodúspěšné zpracování adresar-06
1 bodúspěšné zpracování adresar-07
1 bodúspěšné zpracování adresar-08
1 bodúspěšné zpracování adresar-09
dokumentace1 boddokumentace, komentáře, přehlednost, výstižné názvy proměnných, …

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.

Hodnocení

Funkčnost1 bodprogram určí správně výsledek pro všechna čísla 1 (hledané číslo neexistuje), 2 (hledané číslo neexistuje), 3 (hledané číslo je 2) a 4 (hledané číslo je 3)
1 bodpro 17 vrátí 13
1 bodpro 997 vrátí 983
1 bodpro 20000 vrátí 19867
1 bodpro 3000000 vrátí 2987651
1 bodpro 500000000 vrátí 498763021
1 bodpro 909090909 vrátí 908764123
1 bodpro 1000000000 vrátí 987654103
1 bodpro 2147483647 vrátí 987654103
dokumentace1 boddokumentace, komentáře, přehlednost, výstižné názvy proměnných, …

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.

Hodnocení

Funkčnost1,5 boduprogram načte data souboru dle volby uživatele a zobrazí je - oboje dohromady max 15 sekund. Testovací soubory: test10hesel.txt, test1000hesel.txt, test9999hesel.txt. Za každý 0,5 bodu.
1 bodnačtená data jsou správně zobrazena a hesla správně seřazená
0,5 bodulze vytvořit nové heslo
0,5 bodulze vyhledat heslo podle názvu
0,5 bodulze editovat libovolné heslo
0,5 bodulze smazat libovolné heslo (i poslední)
0,5 bodulze vyhledat text v názvech i popisech
1 bodlze uložit do datového souboru (Save i Save As)
1 bodlze exportovat do HTML do uživatelem určeného souboru. (testovací soubory: test10hesel.txt, test1000hesel.txt
1 bodHTML soubor načtený do prohlížeče odpovídá obsahem původním datům.
1 bodV HTML fungují správně vnitřní odkazy. Ukázkový soubor: ukázka5hesel.html. Testovací soubor: ukázka5hesel.txt
dokumentace1 boddokumentace, komentáře, přehlednost, výstižné názvy proměnných, …