commit 99725aa337edeb3a7994d6f3d515750752ecad4e Author: Vasek Sraier Date: Sat Sep 26 15:18:23 2020 +0200 init commit - renderovatko a definice uloh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..89f9ac0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +out/ diff --git a/graphviz_render.py b/graphviz_render.py new file mode 100644 index 0000000..e032321 --- /dev/null +++ b/graphviz_render.py @@ -0,0 +1,29 @@ +import sys +import json + +# pokus se naimportovat graphviz +try: + from graphviz import Digraph +except ModuleNotFoundError as e: + print("ERROR: Nainstaluj si graphviz - `pip install graphviz`", file=sys.stderr) + exit(1) + +# nacist definici grafu +with open("tasks.json", "r") as f: + definition = json.load(f) + + + + +dot = Digraph(comment='The Round Table') + +# nodes +for task in definition["tasks"]: + dot.node(task["id"], task["id"]) + +# edges +for task in definition["tasks"]: + for req in task["requires"]: + dot.edge(req, task['id']) + +dot.render('out/round-table.gv', view=True) diff --git a/tasks-random.txt b/tasks-random.txt new file mode 100644 index 0000000..781eed5 --- /dev/null +++ b/tasks-random.txt @@ -0,0 +1,133 @@ +26. a 29. ročník + +Triviální výpočet +31-Z1-1: triviální (odčítání času) + +Triviální průchod 1D pole +{"id": "26-Z1-1", "comment": "Kevin a magnety - triviální, lineární průchod pole"}, +{"id": "26-Z2-1", "comment": "Had z domina - triviální, linerání průchod pole a počítání, na kolika místech platí podmínka, vyžaduje práci se dvojicemi"}, +{"id": "27-Z2-1", "comment": "Závorky z cereálií - 2 průchody pole, závorky"}, + +Triviální průchody 2D pole +{"id": "26-Z1-2", "comment": "Piškvorky - detekce vítězství v piškvorkách, procházení 2D pole v různych směrech", "requires": []}, +{"id": "26-Z4-3", "comment": "Hra Othello - link na 26-Z1-2, procházení 2D pole po různých směrech", "requires": []}, +{"id": "29-Z3-1", "comment": "Želva na dvorku — spíš triviální, netriviální udělat efektivně (ale asi to není třeba pro úspěch), volně navazuje na 29-Z2-1 a 29-Z1-1, průchod po 2D souřadnicích, invalidní příkazy (směrem do překážky) ignorujeme", "requires": []}, +{"id": "31-Z1-4", "comment": "2D pole (až na poslední vstup), hešování (piškvorky) - navazuje na 26-Z1-2", "requires": []}, + +Želvy +{"id": "29-Z1-1", "comment": "Kevinova želva — triviální, průchod po 2D souřadnicích", "requires": []}, +{"id": "29-Z2-1", "comment": "Krocení zlé želvy — triviální, průchod po 2D souřadnicích, přímo navazuje na 29-Z1-1", "requires": []}, +{"id": "29-Z4-3", "comment": "Želva v akváriu — malej voser, triviální, přímo navazuje na 29-Z2-1 a 29-Z1-1, průchod po 3D souřadnicích", "requires": []}, + + +Komplexnější práce s poli +{"id": "26-Z2-4", "comment":"Životně důležitá úloha - dostanu pole čísel, potřebuju v něm najít pravidelně se opakující výskyty hodnot, relativně složitá práce s poli, dvojcemi apod.", "requires":[]}, +{"id": "29-Z1-3", "comment":"Petrova statistika — ne úplně triviální, tvorba histogramu z pole", "requires":[]}, + +Práce s čísly +{"id": "26-Z2-2", "comment": "SADO - triviální, procházení celých čísel v intervalu a kontrola podmínky", "requires": []}, +{"id": "26-Z3-3", "comment": "Hádanka - triky s dělitelností devíti a rozkladem čísel, docela hard teorie", "requires": []}, +{"id": "26-Z4-1", "comment": "Vražedná čísla- WTF, teorie čísel, hard as fuck, divný", "requires": []}, +{"id": "29-Z3-3", "comment": "Šestková čísla — mega voser implementovat, spíš matematická úloha, převod dešitkových čísel do hacknutých římských", "requires": []}, + +Práce s řetězci +{"id": "26-Z1-3", "comment": "Zamilovaný dopis - triviální, procházení stringů po znacích a kontrola podmínek", "requires":[]}, +{"id": "26-Z2-3", "comment": "Šifrovaná zpráva - práce s řetězci, hledání mapování mezi písmenky (substitučka) a validace, že jinde substitučka funguje", "requires":[]}, +{"id": "26-Z3-2", "comment": "Čarodějova šifra - šifrování mřížkou, práce se stringy, rotace matice, vhodné na code review?, docela hard", "requires":[]}, +{"id": "29-Z3-2", "comment": "Písemka z angličtiny — voser implementovat, easy dřevorubecký řešení, optimálně trie, což na Z IMHO hard", "requires":[]}, + +Grafy +{"id": "26-Z1-4", "comment": "Hroch v jezeře - BFS či jiné prohledávání, počítání velikosti komponent v 2D poli, ", "requires":[]}, +{"id": "26-Z4-4", "comment": "Hlídači v labyrintu - policajti hlídající na grafu, konkrétně na stromě, rekurze, technicky asi až DP", "requires":[]}, +{"id": "26-Z3-4", "comment": "Tvar labyrintu - nejdelší cesta ve stromě, graf", "requires":[]}, +{"id": "29-Z1-4", "comment": "Zuzčin výlet — DFS (topologické pořadí)", "requires":[]}, +{"id": "31-Z1-2", "comment": "BFS (šachovnice, custom figurka, nejkratší cesta) ", "requires":[]}, +{"id": "31-Z3-2", "comment": "DFS (hledání cesty v grafu po písmenech)", "requires":[]}, +{"id": "31-Z3-3", "comment": "barvení bipartitního grafu (hledání partit), na vstupu hrany", "requires":[]}, + +Nápad +{"id": "26-Z4-2", "comment": "Sbírání vajíček - hledení mediánu, musí se to ale vymyslet, nejkratší cesta při chození tam a zpět", "requires": []}, + +Voser +{"id": "26-Z3-1", "comment": "Zámky labyrintu - hromada ifů, vhodné možná na code review, hledání čísla z trojice takového, že je trojice aritmetrická posloupnost", "requires": []}, + + +-------- +ODZHORA POCAD PREBUSENO DO tasks.json +-------- + +29-Z1-2 — Sářiny pamlsky — triviální, výpis přirozených čísel na základě pravidel + +29-Z2-2 — Sářina volba — spíš triviální, hledání společných vlasností na dvou stejně dlouhých polích +29-Z2-3 — Petr v říši divů — grafy - prohledávání (rozpad na komponenty) +29-Z2-4 — Zuzka: Cesta tam a zase zpátky — nejdelší rostoucí podposloupnost splňující podmínku, příběh i vstup připomínají 28-Z4-5 + +29-Z3-4 — Zdobení stromečku — grafy - prohledávání, hledání kružnice v grafu, zmateně zadané + +29-Z4-1 — Šíření viru — vopruz načítat vstup, přímočaré kvadratické řešení, trochu důmyslnější optimální, podhodnocená as fuck, šíření viru v grafu +29-Z4-2 — Vybírání atrakcí — ezy hladový řešení, pokud si ho umíte zdůvodnit, což není úplně triviální, máme K lidí, pro každého přípustný interval a K² čísel, které každému chceme přidělit + +29-Z4-4 — Hledání součtu — ezy housenka pokud umíte číst, hledání podposloupnosti se součtem co nejbližším zadanému, celé v kladných číslech + +28. Ročník +28-Z1-1 triviální, průchod pole +28-Z1-2 dělitelnost +28-Z1-3 dělení a modulení +28-Z1-4 hledání komponent souvislosti + +28-Z2-1 hledání podřetězce +28-Z2-2 Collatzova domněnka +28-Z2-3 seznam sousedů, hledání kružnic dané velikosti (3) +28-Z2-4 spojový seznam nebo eulerovský tah + +28-Z3-1 nalezení minima a maxima +28-Z3-2 matematika +28-Z3-3 zjednodušení problému?? +28-Z3-4 rekurze (není to jednoduché) + +28-Z4-1 souřadnice +28-Z4-2 triviální průchod 2D pole +28-Z4-3 binární vyhledávání, třídění +28-Z4-4 dynamické programování, práce s čísly + + + +30. ročník +30-Z1-1 Open-data Kevinova nepatnáctka - Trivka, chození po souřadnicích +30-Z1-2 Open-data Sářiny loutky - Hladový algoritmus +30-Z1-3 Open-data Petrovo luštění zprávy - Hledání nejčastějšího výskytu +30-Z1-4 Open-data Zuzčin projekt - Sousednost v grafu +30-Z2-1 Open-data K-k-koktavý K-K-Kevin - Trivka, projít string a skippovat duplikáty +30-Z2-2 Open-data Hřiště pro tarantule - Chození po souřadnicích, detekce kolizí +30-Z2-3 Open-data Klonování pavouků - Sestavení stromu a vypsání cesty do kořene +30-Z2-4 Open-data Příliš bílý displej - Práce s 2d polem +30-Z3-1 Open-data Rozkolísaná produktivita - Hledání dvou čísel s co největším rozdílem +30-Z3-2 Open-data Podlézání Číňanům - Výroba palindromu +30-Z3-3 Open-data Teambuilding - +30-Z3-4 Open-data Korporátní seznamka +30-Z4-1 Open-data Statistika sprintů +30-Z4-2 Open-data Klíče od tělocvičny +30-Z4-3 Open-data Uhlazovací válec +30-Z4-4 Open-data Ohrazení zahrádky + + +31. ročník + + +31-Z1-3: průnik N intervalů (3D na kvádrech) + +31-Z2-1: hešování (objednávka pizzy po dílcích, ceil(group by typ, sum, / 8))) +31-Z2-2: 2D pole (simulace tetrisu) +31-Z2-3: ňáký šachy, předzpracování, hledání nejbližších věží a střelců in bulk - chce lepší tag +31-Z2-4: hledání periody v desetinném čísle +31-Z3-1: triviální - zapamatování stringů (vybírání rýmů) + + +31-Z3-4: geometrie - přihrádky/zametání (vypsat všechny dvojice bodů s vzdáleností max K) +31-Z4-1: sort + průchod pole (nejosamělejší bod na přímce) +31-Z4-2: binární čísla + + + + + diff --git a/tasks.json b/tasks.json new file mode 100644 index 0000000..2c1927b --- /dev/null +++ b/tasks.json @@ -0,0 +1,241 @@ +{ + "tasks": [ + { + "id": "start", + "requires": [], + "comment": "úvodní kecy o tom, jak to celé funguje" + }, + { + "id": "jak-resit-ulohy", + "requires": [ + "start" + ], + "comment": "kecy o tom, jak se může řešit taková úloha" + }, + { + "id": "31-Z1-1", + "requires": [ + "jak-resit-ulohy" + ], + "comment": "úloha s odčítáním času" + }, + { + "id": "26-Z1-1", + "comment": "Kevin a magnety - triviální, lineární průchod pole", + "requires": [ + "jak-resit-ulohy" + ] + }, + { + "id": "26-Z2-1", + "comment": "Had z domina - triviální, linerání průchod pole a počítání, na kolika místech platí podmínka, vyžaduje práci se dvojicemi", + "requires": [ + "26-Z1-1" + ] + }, + { + "id": "27-Z2-1", + "comment": "Závorky z cereálií - 2 průchody pole, závorky", + "requires": [ + "26-Z1-1" + ] + }, + { + "id": "26-Z1-2", + "comment": "Piškvorky - detekce vítězství v piškvorkách, procházení 2D pole v různych směrech", + "requires": [ + "26-Z4-3" + ] + }, + { + "id": "26-Z4-3", + "comment": "Hra Othello - link na 26-Z1-2, procházení 2D pole po různých směrech", + "requires": [ + "26-Z1-1" + ] + }, + { + "id": "29-Z3-1", + "comment": "Želva na dvorku — spíš triviální, netriviální udělat efektivně (ale asi to není třeba pro úspěch), volně navazuje na 29-Z2-1 a 29-Z1-1, průchod po 2D souřadnicích, invalidní příkazy (směrem do překážky) ignorujeme", + "requires": [ + "26-Z4-3" + ] + }, + { + "id": "31-Z1-4", + "comment": "2D pole (až na poslední vstup), hešování (piškvorky) - navazuje na 26-Z1-2", + "requires": [ + "26-Z4-3" + ] + }, + { + "id": "29-Z1-1", + "comment": "Kevinova želva — triviální, průchod po 2D souřadnicích", + "requires": [ + "jak-resit-ulohy" + ] + }, + { + "id": "29-Z2-1", + "comment": "Krocení zlé želvy — triviální, průchod po 2D souřadnicích, přímo navazuje na 29-Z1-1", + "requires": [ + "29-Z1-1" + ] + }, + { + "id": "29-Z4-3", + "comment": "Želva v akváriu — malej voser, triviální, přímo navazuje na 29-Z2-1 a 29-Z1-1, průchod po 3D souřadnicích", + "requires": [ + "29-Z1-1", + "29-Z2-1" + ] + }, + { + "id": "26-Z2-4", + "comment": "Životně důležitá úloha - dostanu pole čísel, potřebuju v něm najít pravidelně se opakující výskyty hodnot, relativně složitá práce s poli, dvojcemi apod.", + "requires": [] + }, + { + "id": "29-Z1-3", + "comment": "Petrova statistika — ne úplně triviální, tvorba histogramu z pole", + "requires": [] + }, + { + "id": "26-Z2-2", + "comment": "SADO - triviální, procházení celých čísel v intervalu a kontrola podmínky", + "requires": [] + }, + { + "id": "26-Z3-3", + "comment": "Hádanka - triky s dělitelností devíti a rozkladem čísel, docela hard teorie", + "requires": [] + }, + { + "id": "26-Z4-1", + "comment": "Vražedná čísla- WTF, teorie čísel, hard as fuck, divný", + "requires": [] + }, + { + "id": "29-Z3-3", + "comment": "Šestková čísla — mega voser implementovat, spíš matematická úloha, převod dešitkových čísel do hacknutých římských", + "requires": [] + }, + { + "id": "26-Z1-3", + "comment": "Zamilovaný dopis - triviální, procházení stringů po znacích a kontrola podmínek", + "requires": [] + }, + { + "id": "26-Z2-3", + "comment": "Šifrovaná zpráva - práce s řetězci, hledání mapování mezi písmenky (substitučka) a validace, že jinde substitučka funguje", + "requires": [] + }, + { + "id": "26-Z3-2", + "comment": "Čarodějova šifra - šifrování mřížkou, práce se stringy, rotace matice, vhodné na code review?, docela hard", + "requires": [] + }, + { + "id": "29-Z3-2", + "comment": "Písemka z angličtiny — voser implementovat, easy dřevorubecký řešení, optimálně trie, což na Z IMHO hard", + "requires": [] + }, + { + "id": "26-Z1-4", + "comment": "Hroch v jezeře - BFS či jiné prohledávání, počítání velikosti komponent v 2D poli, ", + "requires": [] + }, + { + "id": "26-Z4-4", + "comment": "Hlídači v labyrintu - policajti hlídající na grafu, konkrétně na stromě, rekurze, technicky asi až DP", + "requires": [] + }, + { + "id": "26-Z3-4", + "comment": "Tvar labyrintu - nejdelší cesta ve stromě, graf", + "requires": [] + }, + { + "id": "29-Z1-4", + "comment": "Zuzčin výlet — DFS (topologické pořadí)", + "requires": [] + }, + { + "id": "31-Z1-2", + "comment": "BFS (šachovnice, custom figurka, nejkratší cesta) ", + "requires": [] + }, + { + "id": "31-Z3-2", + "comment": "DFS (hledání cesty v grafu po písmenech)", + "requires": [] + }, + { + "id": "31-Z3-3", + "comment": "barvení bipartitního grafu (hledání partit), na vstupu hrany", + "requires": [] + }, + { + "id": "26-Z4-2", + "comment": "Sbírání vajíček - hledení mediánu, musí se to ale vymyslet, nejkratší cesta při chození tam a zpět", + "requires": [] + }, + { + "id": "26-Z3-1", + "comment": "Zámky labyrintu - hromada ifů, vhodné možná na code review, hledání čísla z trojice takového, že je trojice aritmetrická posloupnost", + "requires": [] + } + ], + "clusters": { + "Triviální výpočet": [ + "31-Z1-1" + ], + "Triviální průchod 1D pole": [ + "26-Z1-1", + "26-Z1-1", + "26-Z1-1" + ], + "Triviální průchody 2D pole": [ + "26-Z1-2", + "26-Z4-3", + "29-Z3-1", + "31-Z1-4" + ], + "Želvy": [ + "29-Z1-1", + "29-Z2-1", + "29-Z4-3" + ], + "Komplexnější práce s poli": [ + "26-Z2-4", + "29-Z1-3" + ], + "Práce s čísly": [ + "26-Z2-2", + "26-Z3-3", + "26-Z4-1" + ], + "Práce s řetězci": [ + "26-Z1-3", + "26-Z2-3", + "26-Z3-2", + "29-Z3-2" + ], + "Grafy": [ + "26-Z1-4", + "26-Z4-4", + "26-Z3-4", + "29-Z1-4", + "31-Z1-2", + "31-Z3-2", + "31-Z3-3" + ], + "Voser": [ + "26-Z3-1", + "29-Z3-3" + ], + "Nápad": [ + "26-Z4-2" + ] + } +}