| BME Villamosmérnöki és Informatikai Kar
Műszaki informatika szak |
Nappali tagozat
2007/2008-as tanév, tavaszi félév
|
k a cellák oldalhossza, akkor a megengedett
mezőértékek az 1..k*k közötti egész számok.
A Sudoku-táblát a nagy házi feladatban specifikált Prolog-struktúrával, illetve SML-párral adjuk meg.
A vizsgálandó sort, oszlopot és cellát a Sudoku-tábla adott mezőjének a koordinátáival határozzuk meg. A Sudoku-tábla bal felső mezőjének koordinátája: (1,1). Az eredmény a keresett - azaz az adott Sudoku-táblában megengedett, de az adott sorból, oszlopból és cellából hiányzó - mezőértékeket tartalmazó lista.
ertekek néven, amely egy Sudoku-táblából
előállítja a keresett mezőértékek listáját. Ha a megadott paraméterekkel a
lista nem állítható elő, az eredmény az üres lista legyen.
(* type col = int
type row = int
ertekek : (sspec, col, row) -> field list
ertekek (t, x, y) = a t Sudoku-tábla (x,y) koordinátájú mezőjével meghatározott
sorából, oszlopából és cellájából hiányzó mezőértékek listája
*)
ertekek/4 néven, amely egy
Sudoku-táblából előállítja a keresett mezőértékek listáját. Ha a megadott
paraméterekkel a lista nem állítható elő, az eljárás hiúsuljon meg.
% :- type col == int. % :- type row == int. % :- pred ertekek(sspec::in, col::in, row::in, list(field)::out). % ertekek(T,X,Y,M), ahol % T az sspec specifikációnak megfelelő Sudoku-tábla, % X a col, Y a row típusnak megfelelő koordináta, % M a list(field) típusnak megfelelő mezőlista.
| ?- ertekek(s(3, [[0,2,3, 4,1,0, 5,8,0],
[0,7,8, 0,0,0, 0,2,1],
[0,0,5, 7,2,0, 0,3,9],
[0,8,2, 9,6,1, 0,4,0],
[0,9,0, 5,0,4, 0,1,0],
[0,6,0, 2,7,3, 9,5,0]]), 5, 2, M).
M = [3, 5, 9] ? ;
no
| ?- ertekek(s(3, [[0,2,3, 4,1,0, 5,8,0],
[0,7,8, 0,0,0, 0,2,1],
[0,0,5, 7,2,0, 0,3,9],
[0,8,2, 9,6,1, 0,4,0],
[0,9,0, 5,0,4, 0,1,0],
[0,6,0, 2,7,3, 9,5,0]]), 2, 5, M).
M = [3] ? ;
no
| ?- ertekek(s(2, [[0,2, 3,4],
[0,1, 3,0],
[0,0, 1,1],
[0,1, 2,3],
[4,0, 1,0],
[3,3, 3,0]]), 2, 2, M).
M = [4] ? ;
no
| ?- ertekek(s(2, [[0,2, 3,4],
[0,1, 3,0],
[0,0, 1,1],
[0,1, 2,3],
[4,0, 1,0],
[3,3, 3,0]]), 4, 4, M).
M = [] ? ;
no
- ertekek((3, [[0,2,3, 4,1,0, 5,8,0],
[0,7,8, 0,0,0, 0,2,1],
[0,0,5, 7,2,0, 0,3,9],
[0,8,2, 9,6,1, 0,4,0],
[0,9,0, 5,0,4, 0,1,0],
[0,6,0, 2,7,3, 9,5,0]]), 5, 2);
> val it = [3, 5, 9] : int list
- ertekek((3, [[0,2,3, 4,1,0, 5,8,0],
[0,7,8, 0,0,0, 0,2,1],
[0,0,5, 7,2,0, 0,3,9],
[0,8,2, 9,6,1, 0,4,0],
[0,9,0, 5,0,4, 0,1,0],
[0,6,0, 2,7,3, 9,5,0]]), 2, 5);
> val it = [3] : int list
- ertekek((2, [[0,2, 3,4],
[0,1, 3,0],
[0,0, 1,1],
[0,1, 2,3],
[4,0, 1,0],
[3,3, 3,0]]), 2, 2);
> val it = [4] : int list
- ertekek((2, [[0,2, 3,4],
[0,1, 3,0],
[0,0, 1,1],
[0,1, 2,3],
[4,0, 1,0],
[3,3, 3,0]]), 4, 4);
> val it = [] : int list
A vizsgaosztályzat megállapításakor a határidőre beadott, helyesen megoldott kis házi feladatokért plusz 1-1 pont jár.