soma – pyramide · soma. 2 opgaven: soma er et puslespil i 3d, som består af 7 brikker, som alle...

28
DM22 – 2. Obligatoriske Opgave Prolog Soma – Pyramide Navn: Jacob Christiansen CPR: 130282-2111 Login: moffe42

Upload: others

Post on 18-Apr-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

DM22 – 2. Obligatoriske Opgave

Prolog

Soma – Pyramide

Navn: Jacob ChristiansenCPR: 130282-2111

Login: moffe42

Page 2: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

Table of Contents 1 Formål:.............................................................................................................................................3 2 Opgaven:...........................................................................................................................................3 3 Implementatiuon:..............................................................................................................................3

3.1 Data struktur:............................................................................................................................3 3.1.1 Brikkerne:..........................................................................................................................3 3.1.2 Pyramiden:........................................................................................................................4

3.2 Funktioner:................................................................................................................................4 3.2.1 ToPyr:................................................................................................................................4 3.2.2 PutInPyrX:........................................................................................................................4

3.3 Valg ved implementation:.........................................................................................................4 3.4 Rotation:....................................................................................................................................4

4 Test:..................................................................................................................................................6 5 Konklusion:......................................................................................................................................6 6 Bilag:................................................................................................................................................6

Page 3: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

1 Formål:

Formålet med opgaven er at give et kendskab til logisk programmering. Dette gøres ved at løseen opgave vha. Sproget Prolog. Der skal laves et program der kan løse Piet Hein's puslespil,Soma.

2 Opgaven:Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik derbestår af 3 kuber. Disse brikker har forskellige form og ikke to brikker er ens. Disse brikker kankombineres i et utal af kombinationer.Opgaven går ud på at implementere en algoritme i Prolog, så der genereres en løsning tilpuslespillet Soma. Dog er det ikke 3x3x3 terningen der skal laves, men pyramiden.Der skal med andre ord findes en hensigtsmæssig repræsentation af disse brikker, så det ermuligt at finde en eller flere løsninger til problemet.

3 Implementatiuon:

3.1 Data struktur:

3.1.1 Brikkerne:

Alle brikker i spillet er representeret ved en lang liste, som er en gengivelse af de 3-dimentionelle koordinater, som den pågældende brik ville have. Det vil sige, at de tommepladser i den liste som repræsentere den pågældende brik, viser at brikket ikka har en kubepå den pågældende plads. Brikkerne er repræsenteret med et nummer. Det valgte nummersvare til brik nummereringen, som findes på opgave formuleringen. Et eksempel ses nedenfor.

Brik3([3,_,_,3,3,_3,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]).

Page 4: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har
Page 5: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

3.1.2 Pyramiden:

Pyramiden er lavet næsten på samme måde som brikkerne. Pyramiden er også en lang liste,den er dog invateret i forhold til brikkerne. Dvs. der hvor, der er plads til en brik ipyramiden er der bare et tomt feldt. Det er dette jeg udnytter senere, når jeg indsætterbrikkerne.

3.2 Funktioner:

Selve programmet indeholder et minimum af funktioner og regler, da jeg har udnyttetbacktracking funktionen i Prolog, så meget som jeg mener det er muligt for at løse denneopgave.

3.2.1 ToPyr:

toPyr er ikke en funktion i den forstand, men en regl, der kaldet på en brik, laver brikkenskoordinater om til de koordinater der er i pyramiden. ToPyr vil forsøge at finde et ledigtmønster i pyramidens liste, hvor brikkens liste kan ligge i. Da toPyr kaldes både medbrikken og pyramiden, vil den forsøge alle kombinationer, såfrem man beder Prolog omdet.

3.2.2 PutInPyrX:

putInPyrX er de funktioner som bruges til at sætte brikkerne ind i pyramiden. X er etnummer fra 1 til 7, da hver brik har sin egen funktion til at indsætte i pyramiden.Funktionen kaldes på den figur som brikken skal passe ind i. Først hentes brikken i en afdens udformninger og derefter kaldes toPyr, som finder et ledigt mønster, som brikkenpasser i. Findes der ikke et ledigt mønster i starten af figuren kaldes putInPyrX igen påresten af figuren, ind til den finder et sted der passer.

3.3 Valg ved implementation:

Jeg har valgt at lave alt med lister, da Prologs backtracking funktionalitet, kommer til at lavedet meste af arbejdet, vha. Pattern matching. Brikkernes lister og pyramidens liste er lavetomvendt af hinanden, så det at finde en løsning, bliver et spørgsmål om at få listerne til atpasse sammen.Brikkerne er i første omgang beskrevet ved en liste, der gengiver en terning på 3x3x3. Denneliste overføres til pyramiden, som er gengivet ved en liste, som svare til en 5x5x6 terning.Terningen er en længere på den ene side, så man undgår at brikkernes lister ikke folder

Page 6: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

omkring pyramiden. Desuden er pyramidens liste højre end selve pyramiden. Dette er gjort,da brikkerne i pyramidens liste er længere og derfor ikke ville have nok plads i pyramiden tilat putte brikkerne ind på nogle af de sidste pladser i pyramiden.

Page 7: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

3.4 Rotation:

Jeg har valgt at indtaste alle brikkerne i alle deres rotationer omkring alle akser. Dette vil somudgangspunkt vil give 24 versioner af alle brikkerne. Men på grund af symetri om kring nogleaf akserne, kommer der en del kopier. Dermed bliver antallet af indtastede brikker mindre.Desuden giver måden som problemet løses på, også en del af rotationerne automatisk. Det sesbedst på brik 1. Når man forsøger at pattern matche den på pyramidens liste, kommer en delaf den rotationer automatisk, dermed kan disse også undlades.

4 Test:

For at teste programmet, har jeg kørt programmet, som så finder alle løsninger. Disse løsningerer tegnet ind, som en tredelt lag tegning. Og her ses det at alle de løsninger, som programmetkommer med. Er rigtigt.

5 Konklusion:

Opgaven gik ud på at lave et Prolog program, som kunne finde løsninger til Soma puslespillet.Jeg har lavet en løsning som finder 14 løsninger til pudslespillet, når det er pyramiden deforskellige brikker skal passe ind i. Da alle 14 løsninger passer, må programmet være rigtig. Menda jeg ikke har mulighed for at kontrollere om der er mere end 14 løsninger, kan jeg ikke sigemed sikkerhed at programmet er helt korrekt. Jeg kan dog ikke forestille mig at der skulle væreflere løsninger.

6 Bilag:Udskrift af kildekode: soma.proUdskrift af test-resultater: testTegninger af de fundne løsninger. (De er desværre på ternet papir og ikke udskrift fra PC.)

Page 8: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

/* Liste som indeholder pyramiden */ pyr([e,e,e,e,e,n, e,e,e,e,e,n, e,e,_,e,e,n, e,e,e,e,e,n, e,e,e,e,e,l, e,e,e,e,e,n, e,e,_,e,e,n, e,_,_,_,e,n, e,e,_,e,e,n, e,e,e,e,e,l, e,_,_,_,e,n, _,_,_,_,_,n, _,_,_,_,_,n, _,_,_,_,_,n, e,_,_,_,e,l, e,e,e,e,e,n, e,e,e,e,e,n, e,e,e,e,e,n, e,e,e,e,e,n, e,e,e,e,e,l, e,e,e,e,e,n, e,e,e,e,e,n, e,e,e,e,e,n, e,e,e,e,e,n, e,e,e,e,e,l, e,e,e,e,e,n, e,e,e,e,e,n, e,e,e,e,e,n, e,e,e,e,e,n, e,e,e,e,e,l]). /* Brik 1 og alle rotationer der er nødvendige */ brick1([1,1,_, 1,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick1([1,1,_, _,_,_, _,_,_,

Page 9: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

1,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick1([1,_,_, _,_,_, _,_,_, 1,1,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). /* Brik 2 og alle rotationer der er nødvendige */ brick2([2,_,_, _,_,_, _,_,_, 2,_,_, _,_,_, _,_,_, 2,2,_, _,_,_, _,_,_]). brick2([_,_,_, 2,_,_, _,_,_, _,_,_, 2,_,_, _,_,_, 2,_,_, 2,_,_, _,_,_]). brick2([2,_,_, _,_,_, _,_,_, 2,2,2, _,_,_, _,_,_, _,_,_, _,_,_,

Page 10: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

_,_,_]). brick2([2,_,_, 2,_,_, _,_,_, 2,_,_, _,_,_, _,_,_, 2,_,_, _,_,_, _,_,_]). brick2([_,_,_, _,_,_, 2,_,_, 2,_,_, 2,_,_, 2,_,_, _,_,_, _,_,_, _,_,_]). brick2([2,2,2, _,_,2, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick2([2,_,_, 2,_,_, 2,_,_, 2,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick2([2,2,2, _,_,_, _,_,_, _,_,2, _,_,_, _,_,_, _,_,_,

Page 11: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

_,_,_, _,_,_]). brick2([2,2,2, 2,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick2([2,_,_, 2,_,_, 2,2,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick2([2,_,_, 2,_,_, _,_,_, _,_,_, 2,_,_, _,_,_, _,_,_, 2,_,_, _,_,_]). brick2([2,_,_, 2,_,_, 2,_,_, _,_,_, _,_,_, 2,_,_, _,_,_, _,_,_, _,_,_]). brick2([2,2,_, _,2,_, _,2,_, _,_,_, _,_,_, _,_,_,

Page 12: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

_,_,_, _,_,_, _,_,_]). brick2([2,2,2, _,_,_, _,_,_, 2,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick2([2,2,_, 2,_,_, 2,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick2([2,_,_, _,_,_, _,_,_, 2,_,_, 2,_,_, 2,_,_, _,_,_, _,_,_, _,_,_]). brick2([2,2,_, _,_,_, _,_,_, 2,_,_, _,_,_, _,_,_, 2,_,_, _,_,_, _,_,_]). brick2([_,2,_, _,_,_, _,_,_, _,2,_, _,_,_, _,_,_,

Page 13: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

2,2,_, _,_,_, _,_,_]). brick2([2,_,_, _,_,_, _,_,_, 2,_,_, _,_,_, _,_,_, 2,_,_, 2,_,_, _,_,_]). brick2([2,2,_, _,_,_, _,_,_, _,2,_, _,_,_, _,_,_, _,2,_, _,_,_, _,_,_]). brick2([_,_,2, _,_,_, _,_,_, 2,2,2, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick2([2,_,_, 2,2,2, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick2([_,2,_, _,2,_, 2,2,_, _,_,_, _,_,_,

Page 14: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

_,_,_, _,_,_, _,_,_, _,_,_]). brick2([_,_,2, 2,2,2, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). /* Brik 3 og alle rotationer der er nødvendige */ brick3([3,_,_, _,_,_, _,_,_, 3,_,_, 3,_,_, _,_,_, 3,_,_, _,_,_, _,_,_]). brick3([3,_,_, 3,_,_, 3,_,_, _,_,_, 3,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick3([_,_,_, 3,_,_, _,_,_, 3,_,_, 3,_,_, _,_,_, _,_,_, 3,_,_, _,_,_]). brick3([3,3,3,

Page 15: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

_,_,_, _,_,_, _,3,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick3([_,3,_, _,_,_, _,_,_, 3,3,3, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick3([_,3,_, _,_,_, _,_,_, 3,3,_, _,_,_, _,_,_, _,3,_, _,_,_, _,_,_]). brick3([_,_,_, 3,_,_, _,_,_, 3,_,_, 3,_,_, 3,_,_, _,_,_, _,_,_, _,_,_]). brick3([3,_,_, _,_,_, _,_,_, 3,3,_, _,_,_, _,_,_, 3,_,_, _,_,_, _,_,_]).

Page 16: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

brick3([_,3,_, 3,3,3, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick3([3,_,_, 3,3,_, 3,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick3([3,3,3, _,3,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick3([_,3,_, 3,3,_, _,3,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). /* Brik 4 og alle rotationer der er nødvendige */ brick4([_,_,_, 4,_,_, 4,_,_, 4,_,_, 4,_,_, _,_,_,

Page 17: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

_,_,_, _,_,_, _,_,_]). brick4([_,_,_, 4,_,_, _,_,_, 4,_,_, 4,_,_, _,_,_, 4,_,_, _,_,_, _,_,_]). brick4([_,4,_, _,_,_, _,_,_, 4,4,_, _,_,_, _,_,_, 4,_,_, _,_,_, _,_,_]). brick4([_,4,_, 4,4,_, 4,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick4([4,_,_, 4,4,_, _,4,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick4([4,4,_, _,4,4, _,_,_, _,_,_, _,_,_,

Page 18: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

_,_,_, _,_,_, _,_,_, _,_,_]). brick4([_,4,4, 4,4,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick4([_,4,4, _,_,_, _,_,_, 4,4,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick4([4,_,_, 4,_,_, _,_,_, _,_,_, 4,_,_, 4,_,_, _,_,_, _,_,_, _,_,_]). brick4([4,_,_, _,_,_, _,_,_, 4,_,_, 4,_,_, _,_,_, _,_,_, 4,_,_, _,_,_]). brick4([4,_,_, _,_,_, _,_,_, 4,4,_,

Page 19: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

_,_,_, _,_,_, _,4,_, _,_,_, _,_,_]). brick4([4,4,_, _,_,_, _,_,_, _,4,4, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). /* Brik 5 og alle rotationer der er nødvendige */ brick5([5,_,_, _,_,_, _,_,_, 5,5,_, _,5,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick5([5,5,_, _,5,_, _,_,_, _,_,_, _,5,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick5([_,5,_, _,_,_, _,_,_, _,5,_, 5,5,_, _,_,_, _,_,_, _,_,_, _,_,_]).

Page 20: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

brick5([_,5,_, _,5,_, _,_,_, 5,5,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick5([_,_,_, _,5,_, _,_,_, 5,_,_, 5,5,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick5([_,_,_, 5,5,_, _,_,_, _,5,_, _,5,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick5([5,5,_, 5,_,_, _,_,_, _,5,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick5([5,_,_, 5,_,_, _,_,_, _,_,_, 5,5,_, _,_,_, _,_,_, _,_,_, _,_,_]).

Page 21: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

brick5([5,5,_, _,_,_, _,_,_, 5,_,_, 5,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick5([_,5,_, 5,5,_, _,_,_, _,_,_, 5,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick5([5,_,_, 5,5,_, _,_,_, 5,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick5([_,_,_, 5,_,_, _,_,_, 5,5,_, 5,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). /* Brik 6 og alle rotationer der er nødvendige */ brick6([6,6,_, 6,_,_, _,_,_, _,_,_, 6,_,_,

Page 22: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

_,_,_, _,_,_, _,_,_, _,_,_]). brick6([6,_,_, 6,6,_, _,_,_, _,_,_, _,6,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick6([6,6,_, _,_,_, _,_,_, _,6,_, _,6,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick6([6,_,_, 6,_,_, _,_,_, 6,6,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick6([6,_,_, _,_,_, _,_,_, 6,_,_, 6,6,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick6([_,_,_, 6,6,_, _,_,_, 6,_,_,

Page 23: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

6,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick6([_,6,_, _,_,_, _,_,_, 6,6,_, 6,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick6([_,_,_, 6,_,_, _,_,_, _,6,_, 6,6,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick6([_,6,_, 6,6,_, _,_,_, _,6,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick6([_,6,_, _,6,_, _,_,_, _,_,_, 6,6,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick6([_,_,_, _,6,_, _,_,_,

Page 24: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

6,6,_, _,6,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick6([6,6,_, _,6,_, _,_,_, 6,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). /* Brik 7 og alle rotationer der er nødvendige */ brick7([7,_,_, 7,7,_, _,_,_, _,_,_, 7,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick7([7,7,_, 7,_,_, _,_,_, 7,_,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick7([_,_,_, _,7,_, _,_,_, _,7,_, 7,7,_, _,_,_, _,_,_, _,_,_, _,_,_]).

Page 25: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

brick7([7,7,_, _,7,_, _,_,_, _,7,_, _,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick7([_,7,_, _,_,_, _,_,_, 7,7,_, _,7,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick7([_,_,_, 7,_,_, _,_,_, 7,_,_, 7,7,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick7([7,_,_, _,_,_, _,_,_, 7,7,_, 7,_,_, _,_,_, _,_,_, _,_,_, _,_,_]). brick7([_,7,_, 7,7,_, _,_,_, _,_,_, _,7,_, _,_,_, _,_,_, _,_,_,

Page 26: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

_,_,_]). /* Funktion der tager en brik og føre den over i ryramiden */ toPyr([A1,A2,A3, A4,A5,A6, A7,A8,A9, B1,B2,B3, B4,B5,B6, B7,B8,B9, C1,C2,C3, C4,C5,C6, C7,C8,C9] , [A1,A2,A3,_,_,_, A4,A5,A6,_,_,_, A7,A8,A9,_,_,_, _,_,_,_,_,_, _,_,_,_,_,_, B1,B2,B3,_,_,_, B4,B5,B6,_,_,_, B7,B8,B9,_,_,_, _,_,_,_,_,_, _,_,_,_,_,_, C1,C2,C3,_,_,_, C4,C5,C6,_,_,_, C7,C8,C9,_,_,_, _,_,_,_,_,_, _,_,_,_,_,_|_]). /* Funktioner der finder hvor i pyramiden, de forskellige brikker kan ligge */ putInPyr1([H|T]) :- brick1(B),toPyr(B,[H|T]) ; putInPyr1(T). putInPyr2([H|T]) :- brick2(B),toPyr(B,[H|T]) ; putInPyr2(T). putInPyr3([H|T]) :- brick3(B),toPyr(B,[H|T]) ; putInPyr3(T). putInPyr4([H|T]) :- brick4(B),toPyr(B,[H|T]) ; putInPyr4(T). putInPyr5([H|T]) :- brick5(B),toPyr(B,[H|T]) ; putInPyr5(T). putInPyr6([H|T]) :- brick6(B),toPyr(B,[H|T]) ; putInPyr6(T). putInPyr7([H|T]) :- brick7(B),toPyr(B,[H|T]) ; putInPyr7(T). /* Funktion der finder en løsning */ findPyr(X) :- pyr(X),putInPyr1(X),putInPyr7(X),putInPyr5(X),putInPyr6(X),putInPyr4(X),putInPyr3(X),putInPyr2(X).

Page 27: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

GNU Prolog 1.2.9 By Daniel Diaz Copyright (C) 1999-2001 Daniel Diaz | ?- findPyr(X). X = [e,e,e,e,e,n,e,e,e,e,e,n,e,e,1,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,6,e,e,n,e,7,1,1,e,n,e,e,5,e,e,n,e,e,e,e,e,l,e,6,6,3,e,n,2,7,6,3,3,n,2,7,7,3,4,n,2,2,5,4,4,n,e,5,5,4,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l] ? a X = [e,e,e,e,e,n,e,e,e,e,e,n,e,e,1,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,6,e,e,n,e,7,1,1,e,n,e,e,5,e,e,n,e,e,e,e,e,l,e,6,6,4,e,n,2,7,6,4,4,n,2,7,7,3,4,n,2,2,5,3,3,n,e,5,5,3,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l] X = [e,e,e,e,e,n,e,e,e,e,e,n,e,e,1,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,6,e,e,n,e,7,1,1,e,n,e,e,5,e,e,n,e,e,e,e,e,l,e,6,6,3,e,n,2,2,6,3,3,n,2,7,7,3,4,n,2,7,5,4,4,n,e,5,5,4,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l] X = [e,e,e,e,e,n,e,e,e,e,e,n,e,e,1,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,6,e,e,n,e,7,1,1,e,n,e,e,5,e,e,n,e,e,e,e,e,l,e,6,6,4,e,n,2,2,6,4,4,n,2,7,7,3,4,n,2,7,5,3,3,n,e,5,5,3,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l] X = [e,e,e,e,e,n,e,e,e,e,e,n,e,e,7,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,7,e,e,n,e,6,7,7,e,n,e,e,5,e,e,n,e,e,e,e,e,l,e,1,1,3,e,n,2,1,6,3,3,n,2,6,6,3,4,n,2,2,5,4,4,n,e,5,5,4,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l] X = [e,e,e,e,e,n,e,e,e,e,e,n,e,e,7,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,7,e,e,n,e,6,7,7,e,n,e,e,5,e,e,n,e,e,e,e,e,l,e,1,1,4,e,n,2,1,6,4,4,n,2,6,6,3,4,n,2,2,5,3,3,n,e,5,5,3,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l] X = [e,e,e,e,e,n,e,e,e,e,e,n,e,e,7,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,5,e,e,n,e,7,7,6,e,n,e,e,7,e,e,n,e,e,e,e,e,l,e,1,1,4,e,n,2,1,5,4,4,n,2,5,5,6,4,n,2,2,3,6,6,n,e,3,3,3,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l] X = [e,e,e,e,e,n,e,e,e,e,e,n,e,e,7,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,6,e,e,n,e,5,7,7,e,n,e,e,7,e,e,n,e,e,e,e,e,l,e,1,1,6,e,n,5,1,6,6,2,n,5,5,2,2,2,n,3,3,3,4,4,n,e,3,4,4,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l

Page 28: Soma – Pyramide · Soma. 2 Opgaven: Soma er et puslespil i 3D, som består af 7 brikker, som alle består af 4 kuber, på nær en brik der består af 3 kuber. Disse brikker har

,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l] X = [e,e,e,e,e,n,e,e,e,e,e,n,e,e,7,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,6,e,e,n,e,5,7,7,e,n,e,e,7,e,e,n,e,e,e,e,e,l,e,1,1,6,e,n,5,1,6,6,2,n,5,5,2,2,2,n,4,4,3,3,3,n,e,4,4,3,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l] X = [e,e,e,e,e,n,e,e,e,e,e,n,e,e,7,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,7,e,e,n,e,6,7,7,e,n,e,e,5,e,e,n,e,e,e,e,e,l,e,2,2,2,e,n,1,1,6,2,3,n,1,6,6,3,3,n,4,4,5,5,3,n,e,4,4,5,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l] X = [e,e,e,e,e,n,e,e,e,e,e,n,e,e,7,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,5,e,e,n,e,7,7,6,e,n,e,e,7,e,e,n,e,e,e,e,e,l,e,2,2,2,e,n,1,1,5,2,6,n,1,5,5,6,6,n,3,3,3,4,4,n,e,3,4,4,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l] X = [e,e,e,e,e,n,e,e,e,e,e,n,e,e,7,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,5,e,e,n,e,7,7,6,e,n,e,e,7,e,e,n,e,e,e,e,e,l,e,2,2,2,e,n,1,1,5,2,6,n,1,5,5,6,6,n,4,4,3,3,3,n,e,4,4,3,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l] X = [e,e,e,e,e,n,e,e,e,e,e,n,e,e,7,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,6,e,e,n,e,5,7,7,e,n,e,e,7,e,e,n,e,e,e,e,e,l,e,6,6,3,e,n,1,1,6,3,3,n,1,5,2,3,4,n,5,5,2,4,4,n,e,2,2,4,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l] X = [e,e,e,e,e,n,e,e,e,e,e,n,e,e,7,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,6,e,e,n,e,5,7,7,e,n,e,e,7,e,e,n,e,e,e,e,e,l,e,6,6,4,e,n,1,1,6,4,4,n,1,5,2,3,4,n,5,5,2,3,3,n,e,2,2,3,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,n,e,e,e,e,e,l] (380210 ms) no | ?-