Kis házi feladat: számkeresztrejtvény
A feladat
- Adott egy keresztrejtvény, amelyek egyes kockáiba 1..Max
számokat kell elhelyezni (szokásosan Max = 9).
- A vízszintes és függőleges szavak meghatározásaként a benne levő
számok összege van megadva.
- Egy szóban levő betűk (kockák) mind különböző értékkel kell bírjanak.
A keresztrejtvény Prolog ábrázolása
- listák listájaként megadott mátrix;
- a fekete kockák helyén F\V alakú struktúrák vannak, ahol F
és V az adott kockát követő függőleges ill. vízszintes szó összege, vagy
x
, ha nincs ott szó;
- a kitöltendő fehér kockákat (különböző) változók jelzik.
Példa:
pelda(mini, [[x\ x,11\x,21\x, 8\x],
[x\24, _, _, _],
[x\10, _, _, _],
[x\6, _, _, x\x]], 9).
A megirandó Prolog eljárás
% szamker(SzK, Max): SzK az 1..Max számokkal
% helyesen kitöltött számkeresztrejtvény.
A szamker/2
egy a fentiekben leírt keresztrejtvény-mintát és a
maximális számértéket kapja bemenetként, feladata a kockák kitöltése, azaz
a mintában levő változók behelyettesítése. Egy példafutás:
| ?- pelda(mini, SzK, _Max), szamker(SzK, _Max).
SzK = [[x\x, 11\x,21\x,8\x],
[x\24,8, 9, 7 ],
[x\10,2, 7, 1 ],
[x\6, 1, 5, x\x]] ? ; no
Néhány tesztadat
pelda(p1, [[x\x, 22\x, 28\x, 12\x, x\x, 29\x, 6\x, 16\x],
[x\24, _, _, _, 5\17, _, _, _ ],
[x\42, _, _, _, _, _, _, _ ],
[x\11, _, _, 8\7, _, _, 14\x, 19\x],
[x\x, 18\11,_, _, 17\10,_, _, _ ],
[x\17, _, _, _, _, 12\16,_, _ ],
[x\7, _, _, x\27, _, _, _, _ ],
[x\8, _, _, x\9, _, _, _, x\x ]], 9).
pelda(p2, [[x\x, 19\x, 21\x, 9\x, 8\x, x\x, 20\x, 14\x, 14\x, x\x ],
[x\19, _, _, _, _, x\21, _, _, _, 23\x],
[x\27, _, _, _, _, 15\17,_, _, _, _ ],
[x\4, _, _, 24\7, _, _, _, 9\11, _, _ ],
[x\10, _, _, _, 21\16,_, _, _, _, _ ],
[x\x, 10\x, 28\34,_, _, _, _, _, 13\x, 21\x],
[x\29, _, _, _, _, _, 20\17,_, _, _ ],
[x\11, _, _, 6\22, _, _, _, 15\11,_, _ ],
[x\12, _, _, _, _, x\12, _, _, _, _ ],
[x\x, x\9, _, _, _, x\21, _, _, _, _ ]], 9).