Kedves Hallgatók!
                            
A Logikai programozás II. (a régi képzés szerint), illetve a Logikai programozás előadás (a 2022-es képzés szerint) kurzusokból a kívánt jegy feltétele egy megfelelő minőségű SICStus Prolog program elkészítése és bemutatása.
Ennek jellemzőit szeretném most írásban is rögzíteni.

A feladat lényegében véve szabadon választható,
de kérem és elvárom, hogy azt velem előre egyeztessék.
Ez szóban is lehetséges, de a választott feladatról
minden esetben kérek egy levelet az   asvanyi@inf.elte.hu   címre.
A feladatválasztáshoz segítséget jelenthet az alábbi feladatsor.
MÁS FELADAT IS VÁLASZTHATÓ!

A program bemutatását mindenkivel külön beszélem meg.
A programot SZEMÉLYESEN kérem bemutatni, ami kb. fél-egy órát szokott igénybe venni.
Elvárom, hogy az alkalmazott módszer(eke)t érthetően elmagyarázzák.
A programot kipróbálom. A forráskódot is megnézem.

Alapvető szempontok:
  -- A program oldja meg a kitűzött feladatot!
 -- A programnak az aktuális SICStus Prolog 4 verzióban kell működnie.
 -- A program felülete konzolos, de az input megadása kényelmes,
     outputja könnyen érthető legyen.
 -- A maximális pontszámhoz egy minimum 80 programsort tartalmazó forrásfájl tartozik.
 -- Kövessük a jegyzetek módszertani és formai útmutatásait!
 -- Hatékony megoldást válasszunk! Ld. a nyomtatott jegyzeteket és
    a SICStus Prolog kézikönyv "Writing Efficient Programs" c. fejezetét!


                                               Beadható feladatok

Az alábbi feladatsor csak ötleteket kíván adni. Az a legjobb, ha mindenki
olyan feladatot talál ki magának, aminek a megoldása érdekli.

I. Gráfkeresés

1. A tizenötös játék A vagy B algoritmussal, P és/vagy keret-heurisztikával.

2. A fekete-fehér játék A vagy B algoritmussal,
   az inverziószámtól függő heurisztikával.

3. A  három kancsó probléma szélességi gráfkereséssel.

4. Az N királynő probléma A vagy B algoritmussal, valamilyen heurisztikával.

5. A fekete-fehér királynő (kutya-macska) probléma.

II. kétszemélyes játékok

Az egyes játékokat lehet alfa/béta algoritmussal, direkt stratégiával,
tanuló algoritmussal vagy egyéb módszerrel programozni.

1. Amőba (korlátos táblaméret)

2. Grundy (Halmokat nem egyforma részekre vágunk.)

3. Hex (Szabályos hatszögekből álló "paralelogramma" szemközti oldalait
        próbáljuk összekötni.)

4. Kalah (Maya)

5. Nim (Gyufaszál-kupacokból kell gyufákat elvenni.)

6. Othello (Piros/kék korongok felrakása és átforgatása NxN-es négyzethálón.)

7. Tac-Tix (NxN-es tábla tele koronggal: egy-egy sor vagy oszlop egy-egy
            szakaszának levétele.)

III. Generate and Test feladatok, "nem-determinisztikus" programozás

1. Puzzle megoldó program (Ki a gyilkos/győztes, hol a gyöngy, stb.)

2. Betűszámtannal kapcsolatos feladatok. (Pl. SEND+MORE=MONEY)

3. Tervgenerálás (Pl.kockavilág)

4. Válaszadás (ANALOGY)

5. Beszélgetés (ELIZA)

6. Sztori kiegészítése, azaz pletykaprogram (McSAM)

7. Mastermind (a gyakorlaton szereplőtől különböző megoldás)

10. Táblák bejárásai

11. N+M (fekete-fehér) királynő (kutya-macska) probléma

IV. Interpreterek

1. Véges (verem) automaták (Véges működés!)

2. Interpreter valamilyen logikai, funkcionális, imperatív, vagy egyéb
   alapelvű (egyszerű) programozási nyelvre.

3. Program nyomkövető program

4. Szabály alapú mini szakértői rendszer

5. Mini adatbázis kezelő rendszer

V. Programtranszformációk

1. (Logikai) Programok redukciója. (Szabályok összevonása ill. elhagyása,
   ismétlődő programrészekből eljárás generálása, stb.)

2. Rekurziófeloldás imperatív programoknál

3. Programnyelvek kiterjesztéseinek implementálása, előfordítók

VI. Logikai nyelvtanok

1. Szintaktikus, szemantikus elemzők

2. Interpreter logikai nyelvtanhoz

3. Kis méretű nyelv fordítóprogramja

4. Előfordító logikai nyelvtan által leírt programnyelvhez (Pl. Prolog programot generál.)

5. Logikai nyelvtan egy természetes nyelv egy részhalmazának leírására

VII. Szimbolikus számítások

1. Függvények differenciálása ill. integrálása

2. Algebrai kifejezések egyszerűsítései

3. Nyelvtanok transzformációi (Pl. redukció, valamilyen normálformára hozás,
   valamely speciális alakú szabályok kiküszöbölése, stb.)

4. Logikai formulák transzformációi (Pl. klóz formára hozás)

5. Következtető gépek (Rezolúcióval, szabály alapú következtetővel, esetleg
   tanuló algoritmussal, stb.)

VI. Programanalízis ill. szintézis

1. Programhelyesség bizonyító program

2. Programtesztelést támogató eszköz

3. Program származtatása a specifikációból

4. Program származtatása a tesztadatokból

VII. Az Önök ötletei
       . . .
       . . .
       . . .