Das ursprüngliche "Blue Eyes" -Puzzle ist hier (und unten) angegeben.
Eine Gruppe von Menschen mit verschiedenen Augenfarben lebt auf einer Insel. Sie sind alle perfekte Logiker - wenn eine Schlussfolgerung logisch abgeleitet werden kann, werden sie dies sofort tun. Niemand kennt die Farbe ihrer Augen. Jede Nacht um Mitternacht hält eine Fähre auf der Insel. Alle Inselbewohner, die die Farbe ihrer eigenen Augen herausgefunden haben, verlassen die Insel und der Rest bleibt. Jeder kann jederzeit jeden anderen sehen und zählt die Anzahl der Personen, die er mit jeder Augenfarbe sieht (außer sich selbst), aber er kann nicht anders kommunizieren. Jeder auf der Insel kennt alle Regeln in diesem Absatz.
Auf dieser Insel gibt es 100 blauäugige Menschen, 100 braunäugige Menschen und den Guru (sie hat zufällig grüne Augen). So kann jeder blauäugige Mensch 100 Menschen mit braunen Augen und 99 Menschen mit blauen Augen (und einen mit grünen Augen) sehen, aber das sagt ihm nicht seine eigene Augenfarbe; Soweit er weiß, könnten die Summen 101 braun und 99 blau sein. Oder 100 braun, 99 blau, und er könnte rote Augen haben.
Der Guru darf einmal (sagen wir mittags) an einem Tag in all ihren endlosen Jahren auf der Insel sprechen. Sie steht vor den Inselbewohnern und sagt Folgendes:
"Ich kann jemanden sehen, der blaue Augen hat."
Wer verlässt die Insel und in welcher Nacht?
Die Antwort ist, dass sie alle am hundertsten Tag abreisen. Dies liegt an der folgenden Logik:
Wenn es nur eine blauäugige Person gibt, wird sie am 1. Tag gehen. Wenn es nur zwei blauäugige Personen gibt, geht am 1. Tag niemand. Anschließend gehen beide am 2. Tag. Wenn es nun drei blaue gibt -eyed Leute, niemand geht am Tag 1. Niemand geht auch am Tag 2. Jetzt weiß jeder, dass es 3 blauäugige Menschen gibt, denn wenn es nur einen gegeben hätte, wäre er am ersten Tag gegangen, und wenn es zwei wären, wären beide am zweiten Tag gegangen. Daher gehen alle drei am dritten Tag.
Wir können jetzt einen induktiven Beweis schreiben, dass, wenn n blauäugige Menschen n Tage benötigen, um ihre Augenfarben herauszufinden und zu gehen, n + 1 blauäugige Menschen n + 1 Tage benötigen, um dasselbe zu tun.
Der Code, den Sie schreiben, sollte jedoch nicht nur das ursprüngliche Rätsel lösen können, sondern auch einige Varianten, die leicht unterschiedliche induktive Schritte erfordern.
Sie werden erfahren, wie viele der Inselbewohner blaue Augen haben und wie viele nicht. Sie erhalten auch eine Aussage des Orakels (ein System von Gleichungen / Ungleichungen), die jeder auf der Insel hört. Sie müssen bestimmen, wann die Insel frei von den blauäugigen Menschen sein wird.
Die Aussagen des Orakels werden b
für die Anzahl der blauäugigen Personen und r
für die Anzahl der nicht blauäugigen Personen verwendet. Die Gleichungen können < > <= >= = + -
beliebige ganze Zahlen enthalten.
Testfälle
Basierend auf dieser Reihe von Varianten
50 50
b>=1
b<b+r
Ausgabe: 50
Die zweite Gleichung gibt keine neuen Informationen, daher wird dieses Problem genau das gleiche wie das ursprüngliche Puzzle.
100 50
b+3>=r+4
Ausgabe: 25
100 0
b-2>8+1-1
Ausgabe: 90
50 50
b>=10
b<=75
Ausgabe: 41
3b<2r
?b+b+b < r+r
werden.b>10
, nichtb>=10
, also sollte die Ausgabe90
nicht sein91
.Antworten:
Python 2 ,
6048 BytesProbieren Sie es online aus!
Wie es funktioniert
Durch Induktion:
Diese zweite Folgerung schlägt fehl, wenn b = 1 ist, aber in diesem Fall würde der blauäugige Inselbewohner niemals gehen, wenn er es nicht bereits getan hätte, und der Testfall wäre ungültig.
Beachten Sie, dass nicht blauäugige Insulaner in dieser Version des Puzzles niemals gehen werden, denn selbst wenn sie eine ähnliche Logik verwenden, um zu dem Schluss zu kommen, dass sie nicht blauäugig sind, wissen sie immer noch nicht, welche nicht-blaue Farbe ihre Augen haben .
quelle