| BME Villamosmérnöki és Informatikai Kar
Mérnök-informatikus alapszak |
Nappali tagozat
2009/2010-es tanév, őszi félév
|
A feladat a közismert Sudoku rejtvényhez kapcsolódik.
Egy Sudoku-tábla egy m=k*k sorból és m oszlopból
álló négyzetes táblázat, amely m darab k*k méretű
négyzetes cellára bomlik. A kis házi feladat megoldásakor feltételezheti,
hogy 1 ≤ k ≤ 5.
A feladat egy részlegesen kitöltött Sudoku-tábla ellentmondásmentességének
ellenőrzése. A Sudoku-táblát sorok listájaként adjuk meg, ahol a sorok
egész számok listái. Feltételezheti (tehát nem kell ellenőriznie), hogy a
sorok listája pontosan m sort és soronként
pontosan m számot tartalmaz, ahol a számok 0
és m közé esnek. A 0 szám a még ki nem töltött
mezőket jelöli.
Egy Sudoku-táblát ellentmondásosnak nevezünk, ha van olyan sora, oszlopa vagy cellája, amelyben egy nullától különböző egész szám legalább kétszer előfordul.
khf1:consistent/1 néven egy Sudoku-tábla
ellentmondásmentességének a megállapítására.
%% @type ssol() = [[integer()]].
%% @spec khf1:consistent(SSol::ssol()) -> B::bool().
%% B igaz, ha az SSol Sudoku-tábla minden egyes sorára, oszlopára és
%% cellájára fennáll, hogy a benne előforduló pozitív számok mind különbözőek.
A programot tartalmazó modul attribútumai ezek legyenek:
-module(khf1).
-author(email@unit.org.hu).
-vsn('year-mm-dd').
-export([consistent/1]).
%-compile(export_all).
consistent/1 néven egy Sudoku-tábla
ellentmondásmentességének a megállapítására.
% :- type ssol == list(list(int)).
% :- pred consistent(ssol::in).
% consistent(SSol): A SSol Sudoku-tábla minden egyes sorára, oszlopára és
% cellájára fennáll, hogy a benne előforduló pozitív számok mind különbözőek.
Megjegyzés: Az is/2 beépített eljárás alábbi hívásával lehet egy
M négyzetszám gyökét egész számként a K változóban
előállítani:
K is integer(sqrt(M)).
|?- consistent(
[[1]]
).
yes
|?- consistent( [[2,3, 4,1], [4,0, 2,0], [0,2, 1,4], [0,4, 0,2]] ). yes
|?- consistent(
[[2,3, 0,1],
[1,0, 2,3],
[3,2, 1,4],
[4,0, 0,1]]
).
no
|?- consistent( [[0,0, 0,0], [0,0, 0,0], [0,0, 0,0], [0,0, 0,0]] ). yes
|?- consistent( [[0,0, 0,0], [0,0, 0,0], [1,0, 0,0], [0,1, 0,0]] ). no
khf1:consistent( [[1]] ). true
khf1:consistent( [[2,3, 4,1], [4,0, 2,0], [0,2, 1,4], [0,4, 0,2]] ). true
khf1:consistent( [[2,3, 0,1], [1,0, 2,3], [3,2, 1,4], [4,0, 0,1]] ). false
khf1:consistent( [[0,0, 0,0], [0,0, 0,0], [0,0, 0,0], [0,0, 0,0]] ). true
khf1:consistent( [[0,0, 0,0], [0,0, 0,0], [1,0, 0,0], [0,1, 0,0]] ). false
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.