BME Villamosmérnöki és Informatikai Kar
Mérnök-informatikus alapszak |
Nappali tagozat
2009/2010-es tanév, tavaszi 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.