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).

Voorbeeld van een Tectonic die wordt opgelost.

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.