Hello!
Írtam néhány predikátumot, ami egy mátrixnak összegyűjti az összes
2x2-es blokkját, majd ezekre felvesz egy korlátot.
Hogyan lehetne kiküszöbölni a keletkező választási pontokat? A
blokkokat gyűjtsem listába, vagy van más megoldás is?
Peti
% block2x2(M, block(NW,NE,SW,SE))
% M mátrix 2x2-es blokkjait visszaadja egy block struktúrában.
% NW=north-west, stb.
block2x2([Row1,Row2|_], B) :-
block2x2line(Row1, Row2, B).
block2x2([_,Row2|MT], B) :-
block2x2([Row2|MT], B).
block2x2line([NW,NE|_], [SW,SE|_], block(NW,NE,SW,SE)).
block2x2line([_,NE|Row1], [_,SE|Row2], Block) :-
block2x2line([NE|Row1], [SE|Row2], Block).
% blockconstraints(M)
% Létrehozza a 2x2-es blokkokra a korlátokat
blockconstraints(M) :-
block2x2(M, block(NS,NE,SW,SE)),
sum([NS,NE,SW,SE], #\=, 3).