Lösen von Varianten des Blue-Eyes-Puzzles


8

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 bfür die Anzahl der blauäugigen Personen und rfü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


@ Tennis Ist es jetzt in Ordnung?
Ghosts_in_the_code

Ich glaube schon. Eine kleine Klarstellung: Es sieht nicht so aus wie in den Testfällen, aber können die (In-) Gleichungen implizite Multiplikationen wie enthalten 3b<2r?
Dennis

@ Tennis Nein, aber es könnte stattdessen geschrieben b+b+b < r+rwerden.
Ghosts_in_the_code

Der dritte Testfall behauptet, auf "Mindestens 10 von Ihnen sind blauäugig" zu basieren, aber er vereinfacht sich tatsächlich b>10, nicht b>=10, also sollte die Ausgabe 90nicht sein 91.
Anders Kaseorg

@AndersKaseorg Zu faul zu überprüfen, aber ich glaube dir, daher bearbeitet.
Ghosts_in_the_code

Antworten:


1

Python 2 , 60 48 Bytes

f=lambda b,r,c:all(map(eval,c))and-~f(b-1,r+1,c)

Probieren Sie es online aus!

Wie es funktioniert

Durch Induktion:

  • Wenn die Inselzusammensetzung ( b , r ) ist und bekannt ist, dass ( b - 1, r + 1) nicht möglich ist, werden die blauäugigen Inselbewohner, die ( b - 1, r ) sehen, am ersten Tag schließen dass sie blauäugig sind und gehen.
  • Wenn die Inselzusammensetzung ( b , r ) ist und bekannt ist, dass die blauäugigen Inselbewohner am Tag n abgereist wären, wenn die Zusammensetzung ( b - 1, r + 1) wäre, dann am Tag n + 1 die blau- Augeninsulaner, die ( b - 1, r ) sehen, werden zu dem Schluss kommen, dass sie blauäugig sind und gehen.

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 .


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.