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]

Témata k procvičení

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 stopy matice

Domácí úkol

Lehká varianta

  • Napište program play.py, který načte soubor zadaný jako první argument sys.argv[1] a zjistí, kam musí táhnout křížek (1), aby vyhrál, tedy aby vytvořil piškvorku.
  • Soubor obsahuje matici celých čísel n x n - celých čísel, n zjistíte podle délky a počtu řádek souboru.
  • Význam čísel:
    • 0 - volné pole
    • 1 - křížek
    • 2 - kolečko
  • Program vytiskne na standardní výstup indexy řádku a sloupce volného políčka matice, kam když zahraje hráč křížek (1), tak vyhraje.
  • Program v souboru play.py odevzdejte pomocí odevzdávacího systému (úloha HW05).
  • Můžete předpokládat, že všechny matice jsou zadány korektně, tedy všechny řádky mají stejný počet prvků, který se rovná počtu řádků souboru.

Příklad

Vstup:

0 2 0 0 0 0 2 2 1 0
0 0 2 2 1 2 1 2 1 1
1 2 2 0 1 1 1 2 0 2
2 2 0 2 0 2 2 2 2 0
0 0 0 0 1 2 2 0 0 1
1 1 1 0 2 1 1 2 1 2
1 2 1 1 1 2 2 1 1 1
2 1 0 2 2 0 2 2 1 1
0 2 1 2 2 2 0 0 2 0
0 0 1 0 1 2 2 1 0 1

Výstup:

7 2

Vysvětlení: Místo pro vytvoření piškvorky je označeno X

0 2 0 0 0 0 2 2 1 0
0 0 2 2 1 2 1 2 1 1
1 2 2 0 1 1 1 2 0 2
2 2 0 2 0 2 2 2 2 0
0 0 0 0 1 2 2 0 0 1
1 1 1 0 2 1 1 2 1 2
1 2 1 1 1 2 2 1 1 1
2 1 X 2 2 0 2 2 1 1
0 2 1 2 2 2 0 0 2 0
0 0 1 0 1 2 2 1 0 1

Těžká varianta

  • Napište program chess.py, který načte soubor zadaný na příkazové řádce (argv[1]). Tento soubor kóduje stav šachovnice před tahem bílého. Program najde tah pro bílého, aby dal černému šach.
  • Vstup
    • Stav šachovnice je zaznamenán čísly reprezentující jednotlivé figury podle následující tabulky (bíle figury mají kladnou hodnotu, černé zápornou):
figura bílý černý
král 1 -1
dáma 2 -2
věž 3 -3
střelec 4 -4
jezdec 5 -5
pěšec 6 -6
volné pole 0 0
  • Výstup (standardní výstup)
    • Výstupem Vašeho programu jsou čtyři čísla oddělená mezerou zaznamenávající souřadnice:
      • řádek sloupec kde tah začíná
      • řádek sloupec kde tah končí
      • řádky a sloupce se číslují od 0 do 7
      • poloha 0 0 je levý horní roh šachovnice, šachisty označovaný jako a8
  • Soubor (viz. příklad chess.txt) obsahuje dvourozměrné pole, ve kterém jsou výše definované hodnoty (soubor nebývá zarovnán tak, jak je to níže v textu; použití split() ale dává stejné výsledky)
  • Protože neznáme historii tahů neuvažujte tzv. braní mimochodem.
  • Také nemusíte uvažovat výměnu pěšce na posledním políčku šachovnice za jinou figuru, protože pěšci nejsou umístěni v dosahu posledního řádku šachovnice.
  • Program v souboru chess.py odevzdejte pomocí odevzdávacího systému (úloha HW05).

Vstup obsah souboru, zadaného jako vstupní argument:

 0  0  0  0  0  0  0  0
-6  0 -6  0  0  0  0  0
 0  0  0  0 -6 -6 -6 -3
 0  0  0 -6  0 -5  4  0
 0  0  0  5  6  0 -4  6
 6  0 -5  4  0  6  0  0
 0  6  6  0  0  0  0  0
 1  0  0  5 -1  0  0  0

Výstup:

3 6 6 3
tedy tah střelec (4) z pole g4 na d2

courses/b3b33alp/cviceni/t05.txt · Last modified: 2021/10/18 10:19 by stepan