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.