====== 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