Čtvrtá série začátečnické kategorie třicátého sedmého ročníku KSP

Právě se díváte na leták čtvrté série 37. ročníku KSP-Z, neboli Korespondenčního Semináře z Programování, Začátečnické kategorie. Zapojit se může každý středoškolák i základoškolák.

Letos bude v KSP-Z pět sérií po čtyřech úlohách za celkem 220 bodů. Pokud budete mít jakoukoliv otázku, neváhejte se zeptat. Kontaktní adresy najdete v patičce na konci letáku. Přejeme hodně štěstí!

Zadání úloh


Praktická opendata úloha37-Z4-1 Kevinova dieta (8 bodů)


Kevin se jednoho dne rozhodl, že vyrazí na výlet. Sbalil svačinu, nazul pohorky a vyrazil. Když už nějakou dobu chodil, rozhodl se, že si dá čokoládu, kterou si vzal s sebou. Jak známo, Kevin má rád čtverce. A čím větší, tím lepší, což aplikuje i na jedení čokolády. Vždycky se tedy snaží jako první dílek sníst co největší čtverec. Když vytáhl tu dnešní z batohu, zjistil, že se mu po cestě rozlámala. Aspoň si už nebude muset s dělením lámat hlavu. Ale který dílek má sníst jako první?

Čokoládu si můžete představit jako tabulku s R řádky a S sloupci. Dále víte, na jakých místech se čokoláda přelomila. Každý zlom nastal mezi dvěma sousedními řádky nebo sloupečky, vždy po celé délce čokolády. Zajímá nás, jaký největší nepolámaný čtvercový kousek lze z čokolády vybrat.

Toto je praktická open-data úloha. V odevzdávátku si necháte vygenerovat vstupy a odevzdáte příslušné výstupy. Záleží jen na vás, jak výstupy vyrobíte.

Formát vstupu: Na prvním řádku jsou dvě přirozená čísla RS – počet řádků a sloupců tabulky. Na druhém řádku jsou dvě přirozená čísla HV – počet horizontálních a vertikálních zlomů. Na dalším řádku dostanete H přirozených čísel hi oddělených mezerou, kde i-té z nich značí, že došlo ke zlomení čokolády mezi řádky hi a hi+1. Na dalším řádku dostanete obdobně V čísel vi, z nichž i-té značí, že se čokoláda rozlomila mezi sloupečky vivi+1. Řádky i sloupce číslujeme od jedné. Slibujeme, že nějaký čtvercový kousek bude vždy existovat.

Formát výstupu: Na výstup vypište délku strany největšího celistvého čtverce, který lze z rozlámané čokolády vybrat.

Ukázkový vstup:
6 7
3 3
1 2 5
2 3 6
Ukázkový výstup:
3
Máme čokoládu se šesti řádky a sedmi sloupečky. K přelomením došlo mezi prvním a druhým řádkem, druhým a třetím, a pátým a šestým řádkem. Vertikálně se čokoláda rozlomila mezi druhým a třetím sloupečkem, třetím a čtvrtým, a šestým a sedmým sloupečkem. Největší nerozlomený čtverec má tedy délku strany tři.

Praktická opendata úloha37-Z4-2 Poker (10 bodů)


Kevinovi kamarádi hráli o přestávce mezi vyučováním poker. Kevin se chtěl přidat, ale vůbec neznal pravidla. Rozhodl se tedy, že bude zatím pozorovat, jak ostatní hrají. Podle toho, kdo vyhraje, se časem naučí poznat, která ruka karet je silnější.

Proběhlo několik her a Kevin je stále ztracen. Pomozte mu tím, že za něj seřadíte všechny ruky od nejsilnější po nejslabší.

Školní poker probíhá tímto způsobem: Každý hráč dostane své dvě karty. Následně se na stůl vyloží tři společné karty, které doplní karty jednotlivých hráčů. Tím získá každý hráč ruku sestávající z pěti karet.

Ruky se následně porovnají podle standardních pravidel pokeru. Zde nabízíme jejich souhrn.

Ruky se rozřadí podle výherních kombinací, které určí primární pořadí. V případě rovnosti se porovnávají hodnoty karet, kde nejsilnější je eso (A), následuje král (K), dáma (Q), kluk (J), 10 (T) a poté čísla 9 až 2.

Výherní kombinace od nejsilnější po nejslabší jsou:

Ve všech případech se barvou karty myslí piky, srdce, káry nebo kříže (nikoli červená nebo černá).

Toto je praktická open-data úloha. V odevzdávátku si necháte vygenerovat vstupy a odevzdáte příslušné výstupy. Záleží jen na vás, jak výstupy vyrobíte.

Formát vstupu: Karty popisujeme dvojicí znaků, kde první znak značí hodnotu (AKQJT98765432), druhý znak značí barvu (shdc, z angličtiny).

Na prvním řádku dostanete počet hráčů N. Na druhém řádku jsou mezerou oddělené popisy tří karet na stole. Následuje N řádků, kde každý popisuje jednoho hráče: jméno bez diakritiky a dvě karty, které dostal.

Formát výstupu: Vypište jména hráčů seřazené podle síly jejich ruky, od nejsilnější po nejslabší. Slibujeme, že žádné dvě ruky nemají stejnou sílu (to by mohlo nastat, kdyby se lišily jen barvami karet).

Lehčí variantaLehčí varianta (za 4 body): V prvních dvou vstupech mohou nastat pouze nejslabší čtyři výherní kombinace, tedy three of a kind, two pairs, one pair a high card.

Ukázkový vstup:
10
8d Jd 9d
Zita 8c 8s
Lubos 4d As
Oliver 9c 2d
Ursula 7s Ts
Jiri Th Qc
Vaclav Td Qd
Silvie Td 2d
Beata 8h Kh
Tatana Jh 9c
Borivoj 4d 5d
Ukázkový výstup:
Vaclav
Silvie
Borivoj
Jiri
Ursula
Zita
Tatana
Oliver
Beata
Lubos

Václav má straight flush. Silvie a Bořivoj mají flush; u Silvie jsou hodnoty seřazené JT982, u Bořivoje J9854. Jiří a Uršula mají straight; Jiří má postupku zakončenou královnou, Uršula klukem. Zita má jako jediná three of a kind. Taťána má jako jediná two pairs. Oliver a Beáta mají one pair; Beáta má sice krále, ale rozhoduje hodnota páru a ten má vyšší Oliver. Luboš žádnou výherní kombinaci nemá.


Praktická opendata úloha37-Z4-3 Turistka na blátě (12 bodů)


Přichází jaro, sníh začíná tát a všechno se mění v bláto. Kevin se rozhodl, že půjde na procházku do hor, ale protože mu ve městě bylo horko, zapomněl si vzít pořádné boty a má jen sandály. V batohu mu zbylo K náhradních ponožek, které vyhrál v pokeru. Kevin si také přinesl drona, protože chtěl natočit krásné záběry hor. Dron mu teď ale poslouží k jinému účelu. Kevin si s jeho pomocí umí udělat mapu hor a lokalizovat, kde se nachází bláto.

Pomůžete Kevinovi najít cestu v blátivých horách?

Toto je praktická open-data úloha. V odevzdávátku si necháte vygenerovat vstupy a odevzdáte příslušné výstupy. Záleží jen na vás, jak výstupy vyrobíte.

Kevin potřebuje projít ze startu v údolí U na vrchol hory V, přičemž může projít přes políčko s blátem nejvýše K-krát. Dron umí Kevinovi vytisknout mapu o velikosti R ×S pixelů, kde každý pixel představuje políčko. Na každém políčku je buď suchá země, nebo bláto. Kevin se může pohybovat po suché zemi a může se posunout pouze na sousední políčka (tedy východ, západ, sever, jih). Protože Kevin má jen sandály, musí využít jedny ponožky z batohu za každé políčko s blátem, které projde.

Formát vstupu:

Na prvním řádku jsou tři čísla R, SK, které reprezentují rozměry mapy a počet ponožek, které Kevin má (jeho batoh je velký). Na dalších R řádcích je S znaků, které reprezentují mapu. Znak Z značí suchou zemi a znak B značí bláto. Někde na mapě je také políčko startu z údolí U a vrcholu hory V.

Formát výstupu:

Na prvním řádku vypište délku vaší cesty D. Na dalších D řádcích vypište cestu, kterou Kevin šel. Cestu reprezentujte znaky V (východ), Z (západ), S (sever) a J (jih).

Zaručujeme, že z U do V vždy existuje cesta, kterou se Kevin dostane na vrchol hory a Kevin má dostatek ponožek na to aby to zvládl.

Poznámka: Kevin nemusí najít nejkratší cestu, ale jen cestu která ho dovede na vrchol hory.

Ukázkový vstup:
4 10 2
BZBZUBZZZB
BBZBZZBZBB
BBVBBZZZZB
BZZBZBZZBB
Ukázkový výstup:
4
Z
J
Z
J

Teoretická úloha37-Z4-4 Velikonoční zajíčci (14 bodů)


Blíží se Velikonoce a Kevin se vydal hledat proutky na pomlázku do nedalekého lesa. Koho ale nepotkal – velkou skupinu velikonočních zajíčků, hádajících se o svá vajíčka.

Zající se dělí do dvou skupin. Jedni mají vajíčka rádi malovaná a druzí čistá. Každý zajíc má svou preferenci. Zajíci jsou velmi mírumilovná stvoření, ale jak jde o vejce, tak jdou všechny žerty stranou. V takovém případě se hádají tak nahlas, že to slyší až v Hroším Týnci. Jak Kevin procházel, tak slyšel vždy dva zajíce se hádat. Pokud se dva zajíci hádají, tak jsou zcela určitě v opačných skupinách. Kevinovi se ale něco na tom, kdo se spolu hádá, nezdálo. Pomozte mu ověřít, jestli to, co slyšel, dávalo smysl.

Na vstupu dostanete seznam dvojic králíků, které Kevin zaslechl se mezi sebou hádát. Určete, jestli je možné je rozdělit do dvou skupin tak, aby se vždy hádali dva z různých skupin.

Toto je teoretická úloha. Není nutné ji programovat, odevzdává se pouze slovní popis algoritmu. Více informací zde.


Praktický kurz programování

Praktická opendata úloha

Pokud Tě lákají praktické úlohy, ale ještě neumíš žádný programovací jazyk, můžeš se podívat na náš Základní kurz programování, kde se můžeš naučit základy Pythonu: https://ksp.mff.cuni.cz/kurz/.

Zdrojáky praktických úloh

Praktická opendata úloha

Řešení praktických úloh může být ze začátku složité. Velmi často i nějaká triviální technická chyba ve zdrojovém kódu programu může znamenat, že program vrací špatný výsledek – a některé chyby se ze začátku špatně hledají. Proto Ti nabízíme možnost poslat zdrojový kód programu nějaké úlohy na adresu zdrojaky@ksp.mff.cuni.cz, kde se Ti pokusíme poradit. Do emailu prosím připiš:

Před termínem série Ti nemůžeme radit s algoritmem, ale pomůžeme s odladěním zdrojáku. Po termínu série pak můžeme poradit i s návrhem algoritmu – získáš tak znalosti do dalších sérií.