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 féléves nagy házi feladatban specifikált Sudoku-feladvány és egy részlegesen kitöltött Sudoku-megoldás összevetése a távolságinfók szempontjából. Pontosítva: egy adott Sudoku-feladvány és egy részleges Sudoku-megoldás esetén el kell dönteni, hogy a megoldás teljesíti-e a feladványban szereplő távolságinfók által támasztott feltételeket.
Egy részlegesen kitöltött Sudoku-megoldás annyiban tér el a nagy házi feladatban specifikált Sudoku-megoldástól, hogy benne 0 értékek is szerepelhetnek, amelyek a még ki nem töltött mezőknek felelnek meg (hasonlóan az első kis házi feladathoz). Ha egy távolságinfó által kijelölt két mező közül legalább az egyik 0, akkor az adott távolságinfót teljesültnek tekintjük.
Egy részleges Sudoku-megoldás tehát nem teljesíti egy adott Sudoku-feladvány távolságinfói által támasztott feltételeket, ha a Sudoku-megoldásban van két nem-nulla értékű oldalszomszédos mező, amely mezőpárra
n
; vagy
n
;
ahol n
a Sudoku-feladványban megadott távolságkonstans.
A kisházi megoldásában a Sudoku-feladványban szereplő száminfókat figyelmen kívül kell hagynia. Emellett annak sincs jelentősége, hogy a Sudoku-megoldás (az 1. kisházi értelmében) ellentmondásmentes-e vagy sem.
khf2:n_away/2
néven egy
Sudoku-tábla távolságinfók szerinti részleges helyességének a
megállapítására.
%% @type sspec() = {dist(), board()}.
%% @type dist() = integer().
%% @type field() = [info()].
%% @type info() = s | w | integer().
%% @type board() = [[field()]].
%% @type ssol() = [[integer()]].
%% @spec khf2:n_away(SSpec::sspec(), SSol::ssol()) -> B::bool().
%% B igaz, ha az SSol részleges Sudoku-megoldás teljesíti az SSpec
%% Sudoku-feladványban szereplő távolságinfók által támasztott feltételeket.
A programot tartalmazó modul attribútumai ezek legyenek:
-module(khf2). -author(email@unit.org.hu). -vsn('year-mm-dd'). -export([n_away/2]). %-compile(export_all).
n_away/2
néven egy Sudoku-tábla
távolságinfók szerinti részleges helyességének a megállapítására.
% :- type sspec ---> s(dist, board).
% :- type dist == int.
% :- type field == list(info).
% :- type info ---> s; w; int.
% :- type board == list(list(field)).
% :- type ssol == list(list(int)).
% :- pred n_away(sspec::in, ssol::in).
% n_away(SSpec, SSol): Az SSol részleges Sudoku-megoldás teljesíti az SSpec
% Sudoku-feladványban szereplő távolságinfók által támasztott feltételeket.
| ?- n_away(s(1, [[[s], [], [],[s]], [ [], [], [], []], [ [],[s], [s,w], []], [[4], [], [w], []] ] ), [[ 2, 4, 1, 3], [ 3, 1, 4, 2], [ 1, 3, 2, 4], [ 4, 2, 3, 1]] ). yes
| ?- n_away(s(1, [[[s], [], [],[s]], [ [], [], [], []], [ [],[s], [s,w], []], [[4], [], [w], []] ] ), [[ 0, 2, 0, 2], [ 2, 0, 0, 0], [ 0, 0, 2, 0], [ 2, 0, 3, 0]] ). yes
Ebben a Sudoku-megoldásban csak egy olyan oldalszomszédos mezőpár van,
amely nem-nulla értékeket tartalmaz, mégpedig a 3. sor 3. mezője és az
alatta levő mező. Mivel ezen két mező értékének távolsága 1, és a
Sudoku-feladvány megfelelő mezője tartalmaz egy s
távolságinfót, ezért a megoldás teljesíti a feladvány távolságinfói által
támasztott feltételeket.
| ?- n_away(s(1, [[[s], [], [],[s]], [ [], [], [], []], [ [],[s], [s,w], []], [[4], [], [w], []] ] ), [[ 2, 4, 1, 3], [ 3, 1, 2, 4], [ 1, 3, 4, 2], [ 4, 2, 3, 1]] ). no
Az utóbbi esetben azért kapunk nemleges választ, mert például a feladvány
1. sorának 3. oszlopában nem szerepel az s
távolságinfó,
ugyanakkor a megoldás ezen mezőjében az 1 érték, míg a tőle délre levőben a
2 érték szerepel, azaz a két szomszédos mező távolsága a feladványban
szereplő 1 távolságkonstans.
khf2:n_away({1, [[[s], [], [],[s]], [ [], [], [], []], [ [],[s], [s,w], []], [[4], [], [w], []] ] }, [[ 2, 4, 1, 3], [ 3, 1, 4, 2], [ 1, 3, 2, 4], [ 4, 2, 3, 1]] ). true
khf2:n_away({1, [[[s], [], [],[s]], [ [], [], [], []], [ [],[s], [s,w], []], [[4], [], [w], []] ] }, [[ 0, 2, 0, 2], [ 2, 0, 0, 0], [ 0, 0, 2, 0], [ 2, 0, 3, 0]] ). true
Ebben a Sudoku-megoldásban csak egy olyan oldalszomszédos mezőpár van,
amely nem-nulla értékeket tartalmaz, mégpedig a 3. sor 3. mezője és az
alatta levő mező. Mivel ezen két mező értékének távolsága 1, és a
Sudoku-feladvány megfelelő mezője tartalmaz egy s
távolságinfót, ezért a megoldás teljesíti a feladvány távolságinfói által
támasztott feltételeket.
khf2:n_away({1, [[[s], [], [],[s]], [ [], [], [], []], [ [],[s], [s,w], []], [[4], [], [w], []] ] }, [[ 2, 4, 1, 3], [ 3, 1, 2, 4], [ 1, 3, 4, 2], [ 4, 2, 3, 1]] ). false
Az utóbbi esetben azért kapunk nemleges választ, mert például a feladvány
1. sorának 3. oszlopában nem szerepel az s
távolságinfó,
ugyanakkor a megoldás ezen mezőjében az 1 érték, míg a tőle délre levőben a
2 érték szerepel, azaz a két szomszédos mező távolsága a feladványban
szereplő 1 távolságkonstans.
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.