====== Cvičení 5: 2D pole ======
===== náplň cvičení =====
==== Úkol 1-2 Opakování ====
* Nedokončený příklad z minulého cvičení
==== Dvourozměrné pole ====
* Načtení matice - dvourozměrného pole - ze souboru kombinuje načítání vektoru z minulého cvičení
pole=[]
f=open('pole.txt','r')
for line in f:
pole.append(list(map(int, line.split())))
==== Matice ====
* 2D pole se hodí např. pro reprezentaci matic
==== Úkol 3 Výpis matice ====
* Napište funkci ''printMatrix'', která vypíše matici zadanou 2D polem
* Prvky budou odděleny mezerou a každý řádek bude vypsán na nový řádek
* Kromě prvků matice nebude vypsán žádný jiný znak
==== Úkol 4 Násobení vektoru a matice ====
* Napište funkci ''multiVecMat(v,m)'', která vypočte součin vektoru $v$ a matice $m$.
* Pokud nesouhlasí rozměry matice a vektoru, pak funkce vrací ''None''.
* Vypočtete výsledek násobení $v \cdot m$:
m=[[0,0,1],[0,1,0],[1,0,0]]
v=[2, 4, 6]
===== Domácí příprava =====
Implementujte následující úlohy:
* Funkce, která v matici najde všechny záporné hodnoty, vraťte seznam jejich indexů
* Funkce pro násobení dvou matic
* Funkce pro výpočet determinantu matice
* Funkce pro výpočet [[ https://en.wikipedia.org/wiki/Trace_(linear_algebra) | stopy ]] matice
===== Domácí úkol =====
==== Lehká varianta ====
* Napište program, který řeší dvousměrku (lehčí variantu osmisměrky).
* **Vstup:**
* Jména dvou souborů zadaná na příkazové řádce.
* První soubor obsahuje 2D matici **písmen**
* Druhý soubor obsahuje slova, která jsou v osmisměrce obsažena.
* **Výstup:**
* Index řádku $r$ a sloupce $s$ matice $I$, kde zadané slovo začíná a směr (0 - zleva doprava, 1 - shora dolů).
* Soubor odevzdejte do BRUTE, úloha HW05, soubor **wordsearch.py**
* Předpokládejte, že
* Program je volán se jmény existujících souborů
* Soubory jsou neprázdné a vždy obsahují správně zadané matice
* V případě, že existuje více řešení, vypište libovolné z nich
Příklady:
python3 wordsearch.py osmismerka.txt slova.txt
Testovat můžete na následujícím příkladu:
'osmismerka.txt'
xmuinjekci
evelkochov
cadvouhrac
feminizaci
pyzlanpbik
ldvojlinky
osvrhloubd
dqldrvandy
yevergreen
olympskout
'slova.txt'
dvojlinky
feminizaci
velkochov
dvouhra
olympskou
plody
dyn
rab
svrhlou
np
jo
lordem
velko
injekci
skout
mva
vandy
dvou
evergreen
ech
zla
kb
un
hrr
aj
ona
Výsledek Vašeho programu bude:
5 1 0
3 0 0
1 1 0
2 2 0
9 0 0
4 0 1
6 9 1
2 7 1
6 1 0
4 5 0
0 5 1
4 3 1
1 1 0
0 3 0
9 5 0
0 1 1
7 5 0
2 2 0
8 1 0
0 6 1
4 2 0
5 8 1
6 7 1
6 4 1
4 4 1
2 4 1
==== Těžká varianta ====
* Napište program **go.py**, který načte soubor zadaný na příkazové řádce (''argv[1]''). Tento soubor kóduje stav gobanu po tahu černého. Program zkontroluje, zda černý zajal nějaké kameny bílého. Výstupem programu je stav gobanu po odebrání kamenů, které mají být odstraněny.
* Pokud by program odhalil po odebrání kamenů bílého nějaké kameny černého, které mají být také odebrány, pak se jedná o chybný stav a na výstup vypíšete pouze hlášení ERROR a nebudete vypisovat hodnotu gobanu.
* Soubor (viz. příklad {{courses:b3b33alp:cviceni:goban.txt|goban.txt}}) obsahuje dvourozměrné pole, ve kterém jsou hodnoty 0 - nepoužité pole, 1 - kámen bílého, 2 - kámen černého.
* Kameny, které nemají svobodu jsou z desky odebrány - viz [[https://cs.wikipedia.org/wiki/Go_(hra)#Stru.C4.8Dn.C3.A1_pravidla|Pravidla Go]]
* Program provede odebrání kamenů z desky a výsledný stav gobanu vytiskne
* Program v souboru **go.py** odevzdejte pomocí odevzdávacího systému (úloha HW05).
Například pro zadaný {{courses:b3b33alp:cviceni:goban.txt|goban.txt}} je výsledek spuštění //python3.py go.py goban.txt// tento:
0 0 0 0 0 2 0 0 0
0 0 0 0 0 1 2 0 2
2 0 0 2 1 0 1 2 0
0 2 2 1 1 1 1 2 1
0 0 0 2 2 2 2 0 2
2 0 0 0 2 0 0 0 0
0 0 2 0 2 0 0 0 0
0 0 0 0 2 0 0 0 0
0 0 0 2 0 0 0 0 0