| BME Villamosmérnöki és Informatikai Kar
Műszaki informatika szak |
Nappali tagozat
2007/2008-as tanév, tavaszi félév
|
A Sudoku-táblát a nagy házi feladatban specifikált Prolog-struktúrával, illetve SML-párral adjuk meg.
A kért mátrix bal felső mezőjét a Sudoku-tábla egy mezőjének a koordinátáival (a tábla egy oszlopának és egy sorának a megadásával) adjuk meg. A Sudoku-tábla bal felső mezőjének koordinátája: (1,1). Az eredmény egy olyan lista, amely a keresett mátrix mezőinek értékét sorfolytonosan tartalmazza.
matrix néven, amely egy Sudoku-táblából
egy cellaméretű mátrixot állít elő. Ha a megadott paraméterekkel a
mátrix nem állítható elő, az eredmény az üres lista.
(* type col = int
type row = int
matrix : (sspec, col, row) -> field list
matrix (t, x, y) = a t Sudoku-tábla (x,y) koordinátájú mezőjével meghatározott,
cellaméretű mátrix, sorfolytonos ábrázolással
*)
matrix/4 néven, amely egy
Sudoku-táblából egy cellaméretű mátrixot állít elő. Ha a megadott
paraméterekkel a mátrix nem állítható elő, az eljárás hiúsuljon meg.
% :- type col == int. % :- type row == int. % :- pred matrix(sspec::in, col::in, row::in, list(field)::out). % matrix(T,X,Y,C), ahol % T az sspec specifikációnak megfelelő Sudoku-tábla, % X a col, Y a row típusnak megfelelő koordináta, % C a list(field) típusnak megfelelő mezőlista.
| ?- matrix(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, C).
C = [0,0,0,2,0,0,6,1,0] ? ;
no
| ?- matrix(s(3, [[6,2,3,4,1,9,5,8,7],
[9,7,8,3,5,6,4,2,1],
[1,4,5,7,2,8,6,3,9],
[5,8,2,9,6,1,7,4,3],
[3,9,7,5,8,4,2,1,6],
[4,6,1,2,7,3,9,5,8]]), 5, 2, C).
C = [5,6,4,2,8,6,6,1,7] ? ;
no
| ?- matrix(s(3, [[6,2,3,4,1,9,5,8,7],
[9,7,8,3,5,6,4,2,1],
[1,4,5,7,2,8,6,3,9],
[5,8,2,9,6,1,7,4,3],
[3,9,7,5,8,4,2,1,6],
[4,6,1,2,7,3,9,5,8]]), 8, 2, C).
no
- matrix((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 = [0,0,0,2,0,0,6,1,0] : int list
- matrix((3, [[6,2,3,4,1,9,5,8,7],
[9,7,8,3,5,6,4,2,1],
[1,4,5,7,2,8,6,3,9],
[5,8,2,9,6,1,7,4,3],
[3,9,7,5,8,4,2,1,6],
[4,6,1,2,7,3,9,5,8]]), 5, 2);
> val it = [5,6,4,2,8,6,6,1,7] : int list
- matrix((3, [[6,2,3,4,1,9,5,8,7],
[9,7,8,3,5,6,4,2,1],
[1,4,5,7,2,8,6,3,9],
[5,8,2,9,6,1,7,4,3],
[3,9,7,5,8,4,2,1,6],
[4,6,1,2,7,3,9,5,8]]), 8, 2);
> 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.