3sat Problem in C
-
Hallo liebe Leute.
Ich habe das Problem das ich ein das 3sat Problem in C als Spiel darstellen will aber keine Ahnung habe wie ich es machen soll.
Für alle die die nicht wissen wovon ich spreche:-man hat eine bestimmte anzahl an variablen (etwa 4)
-diese können entweder 0 oder 1 sein
-man hat eine anzahl an bedingungen die etwa so aussehen:
A= 1 oder B = 0 oder C = 1
C = 0 oder D = 1 oder A = 0
und so weiter halt
der Spieler soll jetzt anhand der Bedingungen entscheiden wie die Variablen heißenDas Problem ist :
Ich habe keien Ahnung wie ich jetzt Bedingungen generieren soll die
Genug Verraten und trotztdem es nicht zu Offensichtlich machen
Diese müssen natürlich Zufällig Erzeugt werdenWäre Nett wenn jemand sich die Zeit nehmen könnte mir zu helfen!
Ich bin schon ganz verzweifeltFalls es hilft hier ist ein Zufallsgenerator den ich geschrieben habe der 4
Nullen oder Einsen generiert!#include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ unsigned int a, b, c, d; srand(time( NULL )); // benutzt die Zeit um rand() "anzukurbeln" a = rand(); b = rand(); c = rand(); d = rand(); a = a & 1; // stellt sicher das die variablen entweder 1 oder 0 ist b = b & 1; // da bei & jeder bit verglichen wierd und es ist entweder c = c & 1; // 00000001 oder d = d & 1; // 00000000 printf("Die Variable A: %d\n", a); printf("Die Variable B: %d\n", b); printf("Die Variable C: %d\n", c); printf("Die Variable D: %d\n", d); }
Hoffe auf Baldige Antort
Lg Ich
-
Kannst du mal einen beispielhaften Programmablauf beschreiben? Ich habe keine Ahnung, was du überhaupt genau möchtest. Und ich habe den Eindruck, dir geht es ähnlich.
-
Also zum Verstaendnis: Du hast eine Belegung fuer die Variablen ABCD und moechtest daraus eine konjuktive Normalform generieren. Diese wird dem Spieler vorgelegt und er soll die Variablenbelegung erraten.
... Loesung: generiere einfach die konjunktive Normalform aus der Wahrheitstabelle fuer deine Variablen.
-
nein das stimmt beides leider nicht
ich habe sagen wir 4 bedingungen
wie zum beispiel entweder ist A 1 oder B ist 1 (das ist nur eine bedingung)
und so weiter
diese weisen dann auf die 4 variablen hin und der spieler muss diese erratentut mich echt leid falls ich mich schlecht ausdrücke das ist mein erster forumsbeitrag überhaupt ^^
-
Am Ende soll der Spieler also beispielsweise sagen: A=1, B=1, C=0, D=0? Oder soll er nur sagen, die Variablen heissen A,B,C,D (was irgendwie beknackt ist)?
-
Silahel schrieb:
Hallo liebe Leute.
Ich habe das Problem das ich ein das 3sat Problem in C als Spiel darstellen will aber keine Ahnung habe wie ich es machen soll.
Für alle die die nicht wissen wovon ich spreche:-man hat eine bestimmte anzahl an variablen (etwa 4)
-diese können entweder 0 oder 1 sein
-man hat eine anzahl an bedingungen die etwa so aussehen:
A= 1 oder B = 0 oder C = 1
C = 0 oder D = 1 oder A = 0
und so weiter halt
der Spieler soll jetzt anhand der Bedingungen entscheiden wie die Variablen heißenDie Variablen heißen A, B, C und D. Da die Namen in den auszugebenden Bedingungen vorkommen müssen, ist das Spiel ziemlich sinnlos. Vielleicht liegt das daran, dass du das 3SAT-Problem missverstanden hast? Wenn du deinen letzten Satz ersetzt durch "Der Spieler soll eine Belegung der Variablen mit Werten finden, so dass alle Bedingungen erfüllt sind." wird ein Schuh draus (eigentlich reicht es herauszufinden, ob eine solche Belegung existiert, aber wo ist dann das Spiel).
-
knivil schrieb:
Am Ende soll der Spieler also beispielsweise sagen: A=1, B=1, C=0, D=0? Oder soll er nur die Variablen heissen A,B,C,D (was irgendwie beknackt ist)?
na er soll sagen A = 1 B = 1 C = 0 D = 0 ^^ das andere wär ja auch bescheuert
-
Bashar schrieb:
Die Variablen heißen A, B, C und D. Da die Namen in den auszugebenden Bedingungen vorkommen müssen, ist das Spiel ziemlich sinnlos. Vielleicht liegt das daran, dass du das 3SAT-Problem missverstanden hast? Wenn du deinen letzten Satz ersetzt durch "Der Spieler soll eine Belegung der Variablen mit Werten finden, so dass alle Bedingungen erfüllt sind." wird ein Schuh draus (eigentlich reicht es herauszufinden, ob eine solche Belegung existiert, aber wo ist dann das Spiel).
na er soll sagen A = 1 B = 1 C = 0 D = 0 ^^ das andere wär ja auch bescheuert
[/quote]
genau ^^
das meinte ich eigendlich auch hab ich mich wohl doof ausgedrückt
-
Silahel schrieb:
na er soll sagen A = 1 B = 1 C = 0 D = 0 ^^ das andere wär ja auch bescheuert
Das ist eine Belegung der Variablen. Da wir nun das geklaert hat, kommen wir zum naechsten Punkt: Was sieht der Benutzer um das Ergebnis zu erraten?
-
knivil schrieb:
Silahel schrieb:
na er soll sagen A = 1 B = 1 C = 0 D = 0 ^^ das andere wär ja auch bescheuert
Das ist eine Belegung der Variablen. Da wir nun das geklaert hat, kommen wir zum naechsten Punkt: Was sieht der Benutzer um das Ergebnis zu erraten?
naja der benutzer sieht zum beispiel 4 bedingungen die heißen zum beispiel
C = 1 ODER D = 0 ODER A = 1
und
A = 1 oder c = 0 oder b = 1
und
A = 0 ODER D = 1 ODER C = 0
-
Silahel schrieb:
Das Problem ist :
Ich habe keien Ahnung wie ich jetzt Bedingungen generieren soll die
Genug Verraten und trotztdem es nicht zu Offensichtlich machen
Diese müssen natürlich Zufällig Erzeugt werdenGeneriere doch erstmal irgendwelche Bedingungen, bevor du versuchst, den Schwierigkeitsgrad anzupassen.
-
Bashar schrieb:
Silahel schrieb:
Das Problem ist :
Ich habe keien Ahnung wie ich jetzt Bedingungen generieren soll die
Genug Verraten und trotztdem es nicht zu Offensichtlich machen
Diese müssen natürlich Zufällig Erzeugt werdenGeneriere doch erstmal irgendwelche Bedingungen, bevor du versuchst, den Schwierigkeitsgrad anzupassen.
Meinst du jetzt ich soll mir Bedingungen erstmal ausdenken oder meinst du ich soll einen generator schreiben der bedingungen generiert weil genau das ist ja mein Problem!
-
Silahel schrieb:
knivil schrieb:
Silahel schrieb:
na er soll sagen A = 1 B = 1 C = 0 D = 0 ^^ das andere wär ja auch bescheuert
Das ist eine Belegung der Variablen. Da wir nun das geklaert hat, kommen wir zum naechsten Punkt: Was sieht der Benutzer um das Ergebnis zu erraten?
naja der benutzer sieht zum beispiel 4 bedingungen die heißen zum beispiel
C = 1 ODER D = 0 ODER A = 1
und
A = 1 oder c = 0 oder b = 1
und
A = 0 ODER D = 1 ODER C = 0Ja genau. Das ist die konjunktive Normalform nur etwas anders aufgeschrieben, uebersetzt:
(c || not(d) || a) && (a || not(c) || b) && ...
(keine Ahnung wie das hier in Latex geht)
-
Meinst du jetzt ich soll mir Bedingungen erstmal ausdenken oder meinst du ich soll einen generator schreiben der bedingungen generiert weil genau das ist ja mein Problem!
Du hast aber geschrieben, dein Problem wäre, Bedingungen zu generieren, die «die
Genug Verraten und trotztdem es nicht zu Offensichtlich machen».
-
knivil schrieb:
(c || not(d) || a) && (a || not(c) || b) && ...
(keine Ahnung wie das hier in Latex geht)
-
Bashar schrieb:
Meinst du jetzt ich soll mir Bedingungen erstmal ausdenken oder meinst du ich soll einen generator schreiben der bedingungen generiert weil genau das ist ja mein Problem!
Du hast aber geschrieben, dein Problem wäre, Bedingungen zu generieren, die «die
Genug Verraten und trotztdem es nicht zu Offensichtlich machen».ja genau das gehört ja bei einem generator dazu
-
ich denke das Problem sollte jetzt mittlerweile ausreichend geklärt sein.
Gibt es denn irgendwelche lösungsvorschläge?
-
knivil schrieb:
... Loesung: generiere einfach die konjunktive Normalform aus der Wahrheitstabelle fuer deine Variablen.
Du musst dir natuerlich ueberlegen, wie die Wahrheitstabelle aussieht fuer deine zu erratene Belegung.
-
Silahel schrieb:
ja genau das gehört ja bei einem generator dazu
Du willst es gar nicht verstehen, oder?
-
Meine Güte, dir muss man ja echt alles aus der Nase ziehen. Ich wiederhole mal noch einmal die allererste Antwort dieses Threads, mit der man sich zwei Seiten im Kreis drehen hätte sparen können (und die mMn immer noch nicht zufriedenstellend beantwortet wurde):
SeppJ schrieb:
Kannst du mal einen beispielhaften Programmablauf beschreiben?
Insbesondere zu deinen Bedingungen «die Genug Verraten und trotztdem es nicht zu Offensichtlich machen» würde ich gerne mal ein Beispiel sehen. Möchtest du ein unvollständiges 3SAT als Aufgabe an den Spieler stellen? Wie soll man das dann überhaupt lösen, wenn man nicht alle Bedingungen kennt? Das wäre wie ein Kreuzworträtsel ohne Fragen.
-
Silahel schrieb:
nein das stimmt beides leider nicht
doch es stimmt. knivil hat hat recht mit "konjunktiver Normalform"
3-SAT ist eine Variante des Erfüllbarkeitsproblems der Aussagenlogik (Erfüllbarkeit engl.: satisfiability, kurz SAT). Es beschäftigt sich mit der Frage, ob eine in konjunktiver Normalform vorliegende aussagenlogische Formel F, die höchstens 3 Literale pro Klausel enthält, erfüllbar ist. Ein Beispiel für eine solche Formel: [latex]F = (\overline{x_1} \vee x_2 \vee x_3) \wedge (x_2 \vee \overline{x_3} \vee x_4) \wedge (x_1 \vee \overline{x_2}) [/latex]
aus wikipedia wenn man die zauberworte spricht.