Általános követelmények: - A beadandó GitHubon való megosztása. - A beadandó bemutatása 5-10 perben az utolsó órán. - Határidő: 1 héttel a bemutató előtt.   A következő témák választhatók, de saját témát is hozhattok. Ebben az esetben írjatok egy emailt róla. 1. Sakk program Írjatok egy saját sakk programot. A beadandó lényege nem a sakktábla, lépések és szabályok megalkotása, hanem hogy a program tudjon sakkozni egy emberrel és más programokkal. Az egységesség kedvéért a következő csomagot használjátok https://python-chess.readthedocs.io/en/latest/. Követelmények: - Minden lépés 1 másodpercen belül történjen meg. - A program legyen képes 5 lépéses feladványokat megoldani. Azaz, ha 5 lépésen belül biztosan megnyerhető egy állás akkor azt nyerje is meg. - Legyen egy értékelő függvény, amely minden álláshoz hozzárendel egy pontszámot, hogy mennyire tartja jónak az állást. Az egyedi megfontolásokon kívül a  következő lépés megválasztásához a program minimax algoritmust is vegye figyelembe az értékelő függvény segítségével. - Hogy tudjanak egymás ellen játszani a programok, készíts egy modult a programból, melynek van egy make_move(board) függvénye ami egy chess.Board objektumot  vár és megteszi rajta a következő lépést. A modult töltsd fel PyPi-ba. 2. Sudokus kisérletezés Sudokut könnyű megoldani, ha jó a memóriánk. De mi a helyzet ha nagyon feledékenyek vagyunk, mondjuk egyszerre csak k mező értékére emlékszünk? Mely k-kra tudunk megoldani sudokut a következő stratégiával? Még a feladvány ismerete nélkül készítünk egy L listát, aminek minden eleme k darab pozíció a 9*9-es tábláról. Ezután megkapjuk a feladványt. Végigmegyünk a L-en újra és újra és minden elemére az ott adott k pozíció alapján próbálunk új számokat beírni a sudokuba. Ha egyszer úgy érünk végig L-en, hogy nem tudtunk beírni új számot akkor veszítettünk. Ha kitöltődik a feladvány nyertünk. Megjegyzés: A fenti stratégia mesterkéltnek tűnhet, de a legtöbb ember így oldja meg a sudokut. Pl először végignéznek minden 3*3-as blokkot, majd minden sort, majd minden  oszlopot. És ha sikerült közben valamit beírni akkor kezdik elölről. Persze, általában nem tartják szigorúan ugyanazt a sorrendet, de ez nem lényeges.  Az ügyesebbek bevetnek bonyolultabb mintázatokat is. Több mezővel, pl 3 sort együtt figyelnek. Itt találtok néhány sudoku feladványt, amit teszteléshez lehet használni: http://lipas.uwasa.fi/~timan/sudoku/ Követelmények: - Írjatok egy sudoku megoldót, ami minél kisebb k-ra működik. - Az L listát nem kell feltétlen legenerálni, a lényeg, hogy egy lépésben csak legfeljebb k mezőt használjunk egy következő kitalálásához. - Írjatok egy "nehéz sudoku generálót", azaz egy programot ami olyan sudokukat készít, amiket csak nagy k értékekkre tudtok megoldani. - A program ne fusson tovább pár másodpercnél. 3. 15-ös tologatós játék. A jéték leírása: https://hu.wikipedia.org/wiki/Tizen%C3%B6t%C3%B6s_j%C3%A1t%C3%A9k Korábban feladtam ezt a játékot, hogy oldják meg brute force algoritmussal és az derült ki, hogy ez nem igazán megy, túl sok eset van. A feladat, hogy minél elegánsabb algoritmust írjatok, ami mindig megoldja a feladványt, amikor megoldható. Követelmények: - Egy minél egyszerűbb algoritmus, ami hatékonyan megoldja a feladatot. - Elméleti háttér bemutatása, amivel gyorsan eldönthető a megoldhatóság (permutációk).   - Egy játszható verzió.   4. Saját ötlet