BME Villamosmérnöki és Informatikai Kar
Mérnök-informatikus szak |
Nappali tagozat
2008/2009-es tanév, őszi félév
|
A Sudoku-táblát a nagy házi feladatban is specifikált Prolog-struktúra:
% :- type sspec ---> s(size, board).
% :- type size == int.
% :- type field == int.
% :- type board == list list field.
illetve Erlang-pár:
%% @type sspec() = {size(), board()}.
%% @type size() = integer().
%% @type field() = integer().
%% @type board() = [[field()]].
írja le.
Emlékeztetőül: a Sudoku-táblát leíró adatstruktúra első - size
típusú - mezője a négyzetes cella mérete, második - board
típusú -
mezője pedig a tábla sorainak listája.
A szóbanforgó részmá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ényt egy olyan lista formájában várjuk, amely a keresett részmátrix mezőinek értékét oszlopfolytonosan tartalmazza.
matrix/4
néven, amely egy
Sudoku-táblából egy cellaméretű részmátrixot vág ki, és a fent specifikált
módon adja vissza. 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): C a T Sudoku-tábla (X,Y) koordinátájú mezőjével
% meghatározott cellaméretű mátrix, oszlopfolytonos ábrázolással;
% 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/3
néven, amely egy
Sudoku-táblából egy cellaméretű részmátrixot vág ki, és a fent specifikált
módon adja eredményül. Ha a megadott paraméterekkel a mátrix nem állítható
elő, az eredmény az üres lista legyen.
%% @type col() = integer().
%% @type row() = integer().
%% @spec khf1:matrix(T::sspec(), X::col(), Y::row()) -> C::[field()].
%% C a T Sudoku-tábla (X,Y) koordinátájú mezőjével meghatározott
%% cellaméretű mátrix, oszlopfolytonos ábrázolással.
A programot tartalmazó modul két attribútuma ez legyen:
-module(khf1). -export([matrix/3]).
| ?- 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,2,6,0,0,1,0,0,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,2,6,6,8,1,4,6,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
1> khf1: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). [0,2,6,0,0,1,0,0,0]
2> khf1: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). [5,2,6,6,8,1,4,6,7]
3> khf1: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). []
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.