Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- domain Declarations
- {
- // Hausnummer
- HouseNumber ::= /*left*/ {1, 2, 3, 4, 5} /*right*/.
- // Hausart
- HausArt ::= {"Holz", "Fachwerk", "Flachdach", "Fertig", "Bergarbeiter"}.
- // Cachertyp
- CacherTyp ::= {"Multi", "Mystery", "Tradi", "Virtuell", "Webcam"}.
- // Getraenk
- Drink ::= {"Kaffee", "Tee", "Milch", "Bier", "Wasser"}.
- // Cachefinal
- CacheFinal ::= {"Micro", "DOSE", "Metall", "Eimer", "Holz"}.
- // Cachemobil
- CacheMobil ::= {"Opel", "Audi", "VW", "Nissan", "Renault"}.
- primitive House ::= (number:HouseNumber, hausArt:HausArt, cacherTyp:CacherTyp, drink:Drink, cacheFinal:CacheFinal, cacheMobil:CacheMobil).
- // There are five [different] houses.
- HousesAreDifferent := h1 is House, h2 is House, h3 is House, h4 is House, h5 is House,
- h1.number != h2.number, h1.number != h3.number, h1.number != h4.number, h1.number != h5.number,
- h2.number != h3.number, h2.number != h4.number, h2.number != h5.number,
- h3.number != h4.number, h3.number != h5.number,
- h4.number != h5.number,
- h1.hausArt != h2.hausArt, h1.hausArt != h3.hausArt, h1.hausArt != h4.hausArt, h1.hausArt != h5.hausArt,
- h2.hausArt != h3.hausArt, h2.hausArt != h4.hausArt, h2.hausArt != h5.hausArt,
- h3.hausArt != h4.hausArt, h3.hausArt != h5.hausArt,
- h4.hausArt != h5.hausArt,
- h1.cacherTyp != h2.cacherTyp, h1.cacherTyp != h3.cacherTyp, h1.cacherTyp != h4.cacherTyp, h1.cacherTyp != h5.cacherTyp,
- h2.cacherTyp != h3.cacherTyp, h2.cacherTyp != h4.cacherTyp, h2.cacherTyp != h5.cacherTyp,
- h3.cacherTyp != h4.cacherTyp, h3.cacherTyp != h5.cacherTyp,
- h4.cacherTyp != h5.cacherTyp,
- h1.drink != h2.drink, h1.drink != h3.drink, h1.drink != h4.drink, h1.drink != h5.drink,
- h2.drink != h3.drink, h2.drink != h4.drink, h2.drink != h5.drink,
- h3.drink != h4.drink, h3.drink != h5.drink,
- h4.drink != h5.drink,
- h1.cacheFinal != h2.cacheFinal, h1.cacheFinal != h3.cacheFinal, h1.cacheFinal != h4.cacheFinal, h1.cacheFinal != h5.cacheFinal,
- h2.cacheFinal != h3.cacheFinal, h2.cacheFinal != h4.cacheFinal, h2.cacheFinal != h5.cacheFinal,
- h3.cacheFinal != h4.cacheFinal, h3.cacheFinal != h5.cacheFinal,
- h4.cacheFinal != h5.cacheFinal,
- h1.cacheMobil != h2.cacheMobil, h1.cacheMobil != h3.cacheMobil, h1.cacheMobil != h4.cacheMobil, h1.cacheMobil != h5.cacheMobil,
- h2.cacheMobil != h3.cacheMobil, h2.cacheMobil != h4.cacheMobil, h2.cacheMobil != h5.cacheMobil,
- h3.cacheMobil != h4.cacheMobil, h3.cacheMobil != h5.cacheMobil,
- h4.cacheMobil != h5.cacheMobil.
- conforms := HousesAreDifferent.
- }
- domain Hints extends Declarations
- {
- // Tradi-Sammler wohnt in Holzhaus
- hint1 := h is House, h.cacherTyp = "Tradi", h.hausArt = "Holz".
- // Mystery hat Holzkiste am Final versteckt
- hint2 := h is House, h.cacherTyp = "Mystery", h.cacheFinal = "Holz".
- // Multi faehrt Nissan
- hint3 := h is House, h.cacherTyp = "Multi", h.cacheMobil = "Nissan".
- // Fachwerkhaus steht links von der Flachdachvilla (<=> Flachdach rechts von Fachwerk)
- hint4 := h is House, i is House, h.hausArt = "Flachdach", h.number = i.number+1, i.hausArt="Fachwerk".
- // 05 Der Besitzer des Fachwerkhauses fährt einen Renault Clio.
- hint5 := h is House, h.hausArt = "Fachwerk", h.cacheMobil = "Renault".
- // 06 Die Person, die gerne Wasser trinkt, hat einen 10 Liter Eimer an seinem Final versteckt.
- hint6 := h is House, h.drink = "Wasser", h.cacheFinal = "Eimer".
- // 07 Der Cacher, der im mittleren Haus wohnt, fährt einen VW Golf.
- hint7 := h is House, h.cacheMobil = "VW", h.number = 3.
- // 08 Der Besitzer des Fertighauses trinkt gerne Tee.
- hint8 := h is House, h.hausArt = "Fertig", h.drink = "Tee".
- // 09 Der Virtuell - Freak wohnt im ersten Haus.
- hint9 := h is House, h.cacherTyp = "Virtuell", h.number = 1.
- // 10 Der Biertrinker wohnt neben dem, der einen Micro an seinem Final versteckt hat.
- hint10_1 := h is House, i is House, h.drink = "Bier", h.number = i.number+1, i.cacheFinal = "Micro".
- hint10_2 := h is House, i is House, h.drink = "Bier", h.number = i.number-1, i.cacheFinal = "Micro".
- // 11 Der Cacher, der an seinem Cachefinal einen Metallkasten versteckt hat, wohnt neben dem, der Tee trinkt.
- hint11_1 := h is House, i is House, h.cacheFinal = "Metall", h.number = i.number + 1, i.drink = "Tee".
- hint11_2 := h is House, i is House, h.cacheFinal = "Metall", h.number = i.number - 1, i.drink = "Tee".
- // 12 Der Kaffeetrinker fährt einen Audi A4.
- hint12 := h is House, h.drink="Kaffee", h.cacheMobil = "Audi".
- // 13 Neben dem Bergarbeiterhaus wohnt der Virtuell - Freak. -- Struktur unterscheidet sich: 13,14
- hint13_1 := h is House, i is House, h.cacherTyp = "Virtuell", h.number = i.number + 1, i.hausArt = "Bergarbeiter".
- hint13_2 := h is House, i is House, h.cacherTyp = "Virtuell", h.number = i.number - 1, i.hausArt = "Bergarbeiter".
- // 14 Der Webcam - Fan trinkt gerne Milch.
- hint14 := h is House, h.cacherTyp = "Webcam", h.drink = "Milch".
- // 15 Derjenige, der gerne Bier trinkt, hat einen Nachbarn, der einen Opel Astra fährt.
- hint15_1 := h is House, i is House, h.drink = "Bier", h.number = i.number + 1, i.cacheMobil = "Opel".
- hint15_2 := h is House, i is House, h.drink = "Bier", h.number = i.number - 1, i.cacheMobil = "Opel".
- conforms := hint1 & hint2 & hint3 & hint4 & hint5 & hint6 & hint7 & hint8 & hint9 & (hint10_1 | hint10_2) &
- (hint11_1 | hint11_2) & hint12 & (hint13_1 | hint13_2) & hint14 & (hint15_1 | hint15_2).
- }
- partial model ZebraPuzzle of Hints
- {
- // House(number, hausArt, cacherTyp, drink, cacheFinal, cacheMobil).
- House(1,_,_,_,_,_)
- House(2,_,_,_,_,_)
- House(3,_,_,_,_,_)
- House(4,_,_,_,_,_)
- House(5,_,_,_,_,_)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement