====== Dilema III ====== ===== Program ===== * Řešení DU * Diskuze kódu hráče vezňova dilematu * Krátký programovací testík * Práce s 2D daty * Hádanka /* ===== Diskuse odevzdaných hráčů PD ===== [[https://cw.felk.cvut.cz/cmpTestík/courses/a4b99rph/pages/pd_tournaments/tournament11a/index.html|Turnaj]] se základním hráči. Analyzujte s rozvahou, viz diskuse na cvičení (množství podvádějících vs. kooperujících hráčů, ...) > {{page>courses:a4b99rph:internal:cviceni:tyden04#priklad_1&editbtn}} > {{page>courses:a4b99rph:internal:cviceni:tyden04#priklad_2&editbtn}} */ ===== Hádanka ===== /* [[https://forms.gle/kFqxMq54p7hjByPu6|101]] [[https://forms.gle/3nLTaoxHoVa3zQVk7|102]] [[https://forms.gle/QaZvFUtncp1Ne1CH7|103]] [[https://forms.gle/vzsGD3QyLgcqMk1g7|104]] [[https://forms.gle/oMqTMgeh4ao4uiwL8|105]] [[https://forms.gle/uyin2XUR2RuBFCna6|106]] [[https://forms.gle/MuffuZrZW4u4wWx8A|107]] [[https://forms.gle/4kfZisGQAbhkvdvHA|108]] [[https://forms.gle/yARdGc2Gxtt5qAudA|109]] */ > {{page>courses:b4b33rph:internal:puzzles#cviceni_4}} ===== (Ne tak úplně) Vězňovo dilema v praxi ===== Velmi zajímavá rozuzlení! https://www.youtube.com/watch?v=TKaYRH6E36U http://www.youtube.com/watch?v=S0qjK3TWZE8#!a https://www.youtube.com/watch?v=7FbkwrhW_0I ===== Jak splnit zadání úlohy ===== Několik základních kontrolních bodů, kterých je rozumné se držet: * správně pojmenovat soubor * správně pojmenovat třídu a metody (pozor na malá a velká písmena) * správné parametry metody (self)! * výstup metody * správné odsazení * nepřepisovat vnitřní proměnné nebo funkce Pythonu /* > {{page>old:courses:a4b99rph:internal:cviceni:tyden04#jak_naucit_studenty_splnit_zadani&editbtn}} PP: Odkaz na staré stránky nefunguje. Informace zde vložené asi nejsou potřeba. */ ===== Programovací testík ===== Zadání testíku 2 v interní části stránek. ===== Programovací úlohy na cvičení ===== Programujte samostatně a ptejte se cvičícího. Snažte se o eleganci. Rozmyslete si trochu řešení předem, třeba na papír. * Vytvořte funkci na výpis dvourozměrného seznamu(listu) ''print_data(data)'': * funkce má jako parametr libovolně velký, dvourozměrný seznam * funkce by měla vypisovat seznam "čitelně" - tak aby bylo zřejmé v jakém je dané číslo řádku a sloupci * Vytvořte funkci ''generate_data(n_rows, n_cols)'', která vytvoří dvourozměrný seznam s ''n_rows'' řádky a ''n_cols'' sloupci s náhodným rozmístěním nul a jedniček, například pomocí funkce ([[https://docs.python.org/3/library/random.html#random.randint|randint]]) * otestujte funkci ''print_data(data)'' na vytvořeném seznamu Pokud jste hotoví, začněte pracovat na programovací úloze z domácího úkolu. ====== Domácí úkol ====== Nadcházející neděli do 23:59:59 je třeba odevzdat PD hráče pro turnaj. [[courses:b4b33rph:cviceni:veznovo_dilema:specifikace]] ===== Programování ===== * Pokuste se naprogramovat funkci ''line_size(r,c,data)'' která bude počítat velikost oblasti v řádku zaměřeném pozicí ''r'', ''c''. Oblastí je myšlena nepřerušovaná část 2d seznamu (v tomto případě řádku) se stejnou hodnotou v okolí zadané pozice, tedy stejnou hodnotou jako je v ''data[r][c]''. Parametr ''data'' je dvourozměrný seznam nul a jedniček, ''r'' určuje řádek a ''c'' sloupec odkud se má velikost oblasti počítat. Hodnota oblasti(buď 0 nebo 1) je určena hodnotou ''data[r][c]''. Návratovou hodnotou funkce je počet jedniček nebo nul v dané oblasti. * Rozmyslete jak by se dala funkce napsat tak, aby mohla případně počítat nejen v řádcích ale v obecném směru - (sloupcích, na diagonále). * Příklad:
r=5
c=5
data = [
[0, 1, 1, 1, 1, 0, 0, 0 ],
[1, 1, 0, 1, 0, 1, 1, 1 ],
[0, 1, 1, 0, 0, 1, 0, 1 ],
[1, 1, 1, 0, 1, 1, 0, 1 ],
[0, 1, 0, 0, 0, 0, 1, 1 ],
[1, 0, 1, 1, 0, 0, 0, 0 ],
[0, 1, 1, 1, 0, 1, 1, 1 ],
[1, 1, 0, 1, 0, 1, 1, 1 ]]
reg_size = line_size(r , c, data)
print(reg_size)
4