Een Tectonic is een logisch puzzel bestaande uit een diagram dat is opgedeeld in zones. In een zone van n vakjes moeten de cijfers 1 t.e.m. n elk 1 keer voorkomen. Het is de bedoeling het diagram in te vullen, zodat er nergens twee gelijke cijfers elkaar raken (horizontaal, verticaal of diagonaal).
Hierboven zie je een voorbeeld van hoe een Tectonic wordt opgelost. Onderaan de
afbeelding zie je hoe we een Tectonic zullen voorstellen in Prolog. Elk van de
zone krijgt een eigen atoom die het voorstelt (hier a
, b
, c
, d
en e
).
Elk vakje wordt voorgesteld als een koppel zone-Var
waarbij zone
de zone is
en Var
een variabele is die geünificeerd moet worden met de waarde in het
vakje.
Schrijf een predicaat solution(+Field,-Result)
dat Result
unificeert met het
opgeloste veld (zonder zone markers).
Voorbeeld:
?- Field=[
[a-_,a-1,b-_,b-4],
[c-_,b-_,b-2,b-1],
[c-_,c-_,c-3,c-5],
[d-_,d-_,d-2,d-_],
[e-_,e-_,e-_,e-_]],
solution(Field, OV),
maplist(portray_clause, OV).
[2, 1, 3, 4].
[4, 5, 2, 1].
[2, 1, 3, 5].
[3, 4, 2, 1].
[2, 1, 3, 4].
Field = ...
OV = ...
Tip: om het aantal constraints in te perken en zo grotere diagrammen op te lossen kun je de beperking dat aanliggende vakjes niet dezelfde inhoud hebben beperken tot alleen die vakjes die in een andere zone liggen.
Tip: In de boilerplate die je van ons krijgt, is er al een predicaat
only_vars/2
beschikbaar dat de zone markers van zijn eerste argument zonder
zonemarkers unificeert met het 2de argument.