Entwickler-Ecke

Ankündigungen - AGS 2012 - Lösung zu GS3 (Zaubertrank)


Narses - Sa 22.12.12 02:32
Titel: AGS 2012 - Lösung zu GS3 (Zaubertrank)
Moin!

Die Lösung ist: frische Misteln, getrockneter 4blättriger Klee, natürliches Steinöl = 70 Taler

Wie kommt man da drauf? :?!?: Gehen wir zunächst mal den Tipps [http://www.entwickler-ecke.de/topic_AGS+2012++Tipps+zu+GS3+Zaubertrank_110806.html] nach: :lupe:
Zitat:
- Um kreativ zu werden, spielt der Wichtel zwischendurch eine französische Kugelsportart.
- Die Wichtel spielen gerne eine bestimmte Variante des Spiels "Pillard", das wiederum mit unserem Billard verwandt ist.
Das sollte einen auf "Bool" (unsern alten Kumpel George [http://de.wikipedia.org/wiki/George_Boole] :lol:) bringen, und letztlich darauf, dass es sich bei den Rezepten um Bool´sche Funktionen [http://de.wikipedia.org/wiki/Boolesche_Funktion] handelt. Die "Naturform" einer Zutat ist eine nichtinvertierte, die "weiterverarbeitete Form" ist eine invertierte bool´sche Variable. Die Rezepte sind also und-verknüpfte Folgen bool´scher Variablen. Da jedes Rezept "wirksam" ist und man sich einen aussuchen kann, müssen die Terme 1 ergeben und ver-oder-t sein. :idea:

Zitat:
- Der Wichtel arbeitet in der Technik-Abteilung und beschäftigt sich viel mit CPLDs.
Googlen nach Suche bei Google CPLD liefert gleich als ersten Eintrag den WP-Artikel dazu [http://de.wikipedia.org/wiki/Complex_Programmable_Logic_Device], und da steht beim Aufbau der kleinen Krabbeltierchen:
Zitat:
CPLDs bestehen im Wesentlichen aus folgenden Elementen:
- programmierbare AND/OR-Matrix
Und das wiederum ist praktisch eine Hardware-DNF [http://de.wikipedia.org/wiki/Disjunktive_Normalform]. :idea: (falls man das oben noch nicht kapiert hatte)
Nach intensivem Studium der Aufgabe :suspect: sollte klar sein, dass es darum geht, den "billigsten" Primimplikanten [http://de.wikipedia.org/wiki/Primimplikant] dieser DNF zu finden. :think:

Für den algorithmischen Lösungsansatz war dann der letzte Tipp da:
Zitat:
Weil dem Wichtel die Mitgliedschaft im YMCA nicht so richtig gefallen wollte, hat er einfach die QMCV gegründet.
Klar, Google ist dein Freund, QMCV liefert früher oder später den Quine-McCluskey-WP-Artikel [http://de.wikipedia.org/wiki/QMCV]. Jetzt kann man das natürlich mal schnell selbst implementieren :lol: oder aber man nimmt die fertige Webversion [http://logik.phl.univie.ac.at/~chris/gateway/formular-zentral.html], die ganz unten verlinkt ist... :roll: :P

Um den Weboptimierer benutzen zu können, übersetzen wir mal eben die Rezepte in eine dafür passende Form (Variablen sind in Preislistenreihenfolge, &=und, v=oder, ~=nicht):

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
B&~E&~G v 
A&~B&C&~D&H v 
~B&~C&~D&~G v 
A&B&~E&G&~H v 
A&B&~E&~G v 
~A&~D&G&H v 
A&~B&D&H v 
B&~D&H v 
C&D&~G&H v 
E&G&~H v 
A&D&~H v 
B&~G&~H
Alternativ die Wertetabelle:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
-1--00-
1010--1
-000-0-
11--010
11--00-
0--0-11
10-1--1
-1-0--1
--11-01
----110
1--1--0
-1---00


Der Webservice liefert uns dann folgende Ausgabe, die ich der Kürze halber mal direkt mit Preisen versehen habe:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
0--0-11 : 105
--10-11 : 100
--11-01 : 100
101---1 :  93
-1--00- :  83
----110 :  79
-1--1-0 :  79
-1-0--1 :  79
--00-0- :  78
11----0 :  77
10-1--- :  70
Das Nachschlagen der Zutaten in der letzten Zeile sei dem aufmerksamen Leser dann noch als Hausaufgabe überlassen. :les: ;)

Wenn man sich ein bischen Zeit lässt, damit man beim Übersetzen der Rezepte keinen Flüchtigkeitsfehler macht, dann kann man das doch locker in 10 Minuten einklimpern, oder? :nixweiss: Jaja, ich bin ja schon weg... ;)

Viel Erfolg beim letzten Rätsel! :zustimm:

cu
Narses


Oliver Marx - Sa 22.12.12 03:12

Hi,

wenn man allerdings das Verfahren des iteraten Konsensus benutzt, muss man nicht den Umweg über die Minterme machen (falls man selbst ein Tool geschrieben hat) und ist daher effizienter. Da ich Quine-McCluskey und iterativer Konsensus meinen Studierenden beibringe, hatte ich bei dieser Aufgabe schon ein fertiges Tool glücklicherweise zur Hand.

Des Weiteren liefert die von euch verlinkte Webseite, wenn ich richtig gesehen habe, eine minimale SOP und nicht die Primimplikanten (PI). Daher kann es bei einer ungünstigen Konstellation der Kosten dazu führen, dass man den kostengünstigsten PI übersieht. Daher sollte man alle (bei dieser Aufgabe glaube ich 34) PIs berechnen und alle PIs miteinander vergleichen.

In diesem Fall ging es zum Glück gut.

Viele Grüße

Oliver


Tilman - Sa 22.12.12 04:15

Verdammt, hatte die Zeile mit den 20 Talern Grundpreis übersehen :o
Daher nur 10 eingegeben :oops:


jfheins - Sa 22.12.12 08:34

Tja, da war ich wol mit dem Holzhammer zu Gange 8)
Einfach mal alle Rezepte maximal erweitern (ergibt dann 128 Stück) und dann iterativ: 1. Versuchen jedes gegen jedes andere zu kürzen 2. Doppelte Rezepte löschen.
Ergibt dann am Ende die gleichen wirksamen Rezepte mit je 3 Zutaten pro Rezept, aus denen dann das billigste genommen werden kann.
Und schon wieder was über Boolesche Funktionen gelernt :)

Die Tatsache dass man "die Lösung diesmal auch auf mit Zettel und Stift lösen kann", ließ mich darauf schließen dass es noch einen anderen Algorithmus geben müsste. Aber nachdem ich schon die Lösung hatte, war die Motivation den zu finden gering ^^


Xion - Sa 22.12.12 10:15

user profile iconjfheins hat folgendes geschrieben Zum zitierten Posting springen:
Einfach mal alle Rezepte maximal erweitern (ergibt dann 128 Stück)

Also bei mir waren es 459. (Nach der Reduktion sogar 706) (siehe Anhang).

Prinzipiell muss ich sagen, das Rätsel ist mir leicht gefallen. Liegt wohl daran, dass wir in der Uni ständig Probleme solcher Art lösen ;) (meistens sind sie schwieriger). Informatik-Studium ist schon ne coole Sache :mrgreen:

PS: endlich hab ich auch mal ein Rätsel richtig gelöst :zustimm:


Oliver Marx - Sa 22.12.12 12:07

Hi,

user profile iconjfheins hat folgendes geschrieben Zum zitierten Posting springen:
Tja, da war ich wol mit dem Holzhammer zu Gange 8)
Einfach mal alle Rezepte maximal erweitern und dann iterativ:
1. Versuchen jedes gegen jedes andere zu kürzen
2. Doppelte Rezepte löschen.


wieso Holzhammer? Das ist doch das vorgeschlagene Verfahren von Quine-McCluskey.

Viele Grüße

Oliver


Flamefire - Sa 22.12.12 15:31

Hab dazu auch jedes Rezept in ne Liste eingefügt und wenn möglich mit allem erweitert und gekürzt. Dann minimale Kosten gesucht und fertig.
Das mit den Boolschen Variablen hab ich dann tatsächlich erst nach dem letzten Tipp kapiert. Aber dann Kopf->Wand das nicht eher gesehen zu haben ;)

Im Anhang mein Programm dazu. Mal in C++ weil ich das üben muss ;)


jfheins - Sa 22.12.12 22:59

user profile iconOliver Marx hat folgendes geschrieben Zum zitierten Posting springen:

wieso Holzhammer? Das ist doch das vorgeschlagene Verfahren von Quine-McCluskey.
Viele Grüße
Oliver

Holzhammer weil ich die rezepte einfach mal auf "alles" erweitere. Die formale Beschreibung habe ich zwar nicht komplett durchdrungen, aber wenn ich das selbst implementiert habe weiß ich zumindest wie es funktioniert ^^
Anbei auch mein Programm. Die 128 Rezepte müssten schon ziemlich genau hinkommen. Beim reduzieren werden es aber erstmal mehr Rezepte.