青い目パズルの変形を解く


8

オリジナルの「Blue Eyes」パズルはここ(およびその下)にあります。

さまざまな目の色を持つ人々のグループが島に住んでいます。彼らはすべて完璧な論理学者です-結論が論理的に推測できる場合、彼らは即座にそれを行います。彼らの目の色は誰も知りません。毎晩深夜、フェリーが島に停車します。自分の目の色がわかった島民は島を去り、残りは残ります。誰もがいつでも他の人を見ることができ、それぞれの目の色(自分自身を除く)で見た人の数を数えますが、それ以外の方法では通信できません。島の誰もがこの段落のすべてのルールを知っています。

この島には、100の青い目をした人、100の茶色の目をした人、そしてグル(彼女はたまたま緑の目をしています)がいます。したがって、青い目をした人は100人が茶色の目で99人が青い目(および緑の目)を見ることができますが、それでも自分の目の色はわかりません。彼が知る限り、合計は101ブラウンと99ブルーである可能性があります。または100ブラウン、99ブルー、そして彼は赤い目を持っている可能性があります。

グルは、島での終わらない年のすべての日に、1日(正午に言ってみましょう)一度話すことが許可されています。島民の前に立って、彼女は次のように言います:

「青い目をした人が見えます。」

誰が島を出ますか、そして何夜ですか?

答えは、彼らがすべての百日のままにしておくことです。これは、次のロジックによるものです。

青い目の人が1人だけの場合、彼は1日目に出発します。2つの青い目の人だけがある場合、誰も1日目に出発しません。これに続いて、2人とも2日目に出発します。 -目の前の人、誰も1日目に出発しません。誰も2日目に出発しません。青い目をした人が3人いることを誰もが知っています。1人しかいなかった場合、彼は1日目に出発し、2人がいた場合、2人とも2日目に出発したため、3人全員が3日目に出発します。

これで、n個の青い目の人々が目の色を計算して去るのにn日を必要とする場合、n + 1の青い目の人々が同じことをするのにn + 1日を必要とするという帰納的証明を書くことができます。

ただし、作成するコードは、元のパズルだけでなく、わずかに異なる帰納的ステップを必要とするいくつかのバリアントも解決できる必要があります。

青い目をしている人の数とそうでない人の数がわかります。また、島の誰もが聞く神託(方程式/不等式のシステム)による声明が与えられます。青い目の人々が島から解放される時期を決定する必要があります。

オラクルの声明はb、青い目の人の数と青い目のない人の数に使用しrます。方程式には、< > <= >= = + -整数を含めることができます。

テストケース

このバリアントセットに基づく

50 50
b>=1
b<b+r

出力: 50

2番目の方程式は新しい情報を提供しないため、この問題は元のパズルとまったく同じになります。

100 50
b+3>=r+4

出力: 25

100 0
b-2>8+1-1

出力: 90

50 50
b>=10
b<=75

出力: 41


@デニスもう大丈夫ですか?
ghosts_in_the_code 2016

私はそう思う。マイナーな説明が1つあります。テストケースからはそうではありませんが、(不等式)には、3b<2r
Dennis

@デニスいいえ、b+b+b < r+r代わりに書くことができます。
ghosts_in_the_code 2016

基づいする第3テストケース請求「あなたの少なくとも10は青い目である」が、それは実際には単純化b>10、ないb>=10ので、出力があるべき90ではありません91
Anders Kaseorg 2017

@AndersKaseorg確認するのが面倒ですが、私はあなたを信じているため、編集しました。
ghosts_in_the_code 2017

回答:


1

パイソン260の 48バイト

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

オンラインでお試しください!

使い方

誘導によって:

  • 島の構成が(br)であり、(b − 1、r + 1)が不可能であることがわかっている場合、1日目に、(b − 1、r)を見て、青い目の島民は結論を出します。彼らは青い目をして去っていく。
  • 島の構成が(br)であり、構成が(b − 1、r + 1)の場合、青い目のアイランダーはn日目に去っていたことがわかっており、n + 1 日目に青(b − 1、r)を見て目を閉じたアイランダーは、青い目をして去っていくと結論付けます。

この2番目の推論は、b = 1の場合は失敗しますが、その場合、青い目のアイランダーは、出発していない場合は決して去らず、テストケースは無効になります。

このバージョンのパズルでは、青い目をしていない島民は決して立ち去らないことに注意してください。彼らが同様のロジックを使用して、青い目をしていないと結論付けたとしても、目がどの非青い色であるかをまだ知らないためです。 。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.