古典的なコンビナトリアルパズル

Edsger Dijkstra による古典的なパズルです。 元の問題を引用せず、バッグとボールに変更すると、パズルは次のようになります。

バッグには黒と白のボールが入っています。次のプロセスは、可能な限り繰り返されなければなりません(黒と白の球が無限に供給されていると仮定して)。

     
      
  • バッグから2つのボールをランダムに選択します。彼らが同じ色なら、それらを投げ捨てるが、余分な黒いボールを入れる。
  •   
  • 色が異なる場合は、白いものを袋に戻し、黒いものを捨てます。
  •   

プロセスの各繰り返しがバッグ内のボールの数を1つ減らすことがわかります。また、プロセスの反復は、バッグ内のちょうど1つのボールで終了しなければならない。質問は:

白いボールの数と最初にバッグに入った黒いボールの数に基づいて、最終的なボールの色については何かが言えます。

14
追加された 著者 Tritium21,
@f "'この質問は、可能な複製よりも優れています。パズルのソースを与える、それはより一般的な、より良い言葉です...
追加された 著者 Jawad Al Shaikh,

1 答え

言われることは、

白いボールの数のパリティは決して変化しません。したがって、奇数の白いボールが最初にある場合、バッグの最後のボールは白くなければなりません。偶数の場合、最後のボールは黒でなければなりません。

パズルが述べられている方法は、私が意図的には不明であると思います。あなたは同等に(そしてもっと透明に)、次のように言うことができます:各ステップで、黒いボールを1つ取り除くか、2つの白を取り除き、黒を1つ追加する。これはまた、

各ステップで、黒いボールの数のパリティが変更されます。ただし、毎回1つのボールが削除され、白いパリティは不変であるため、変更する必要があります。

(元のバージョンでは2つのボールをランダムに削除して2つのもののどちらを行うかを決定するので、2つのステートメントは全く同じではありませんが、パズル自体は興味があります最悪の場合。)

17
追加された
実際、何かbag に、何かballs に変更しました。
追加された 著者 Erin Beierwaltes,
とにかく、あなたの答えは絶対に正しいです。元の問題は The Coffee can problem と呼ばれ、David GriesのScience of Programmingという本で読んでいます。また、この質問をご覧ください。
追加された 著者 Erin Beierwaltes,
ええ、私は質問の難読化のためにあなたを非難していませんでした。それはダイクストラのせいだ。
追加された 著者 Pankaj,
そして、Griesの本はとても素敵です。
追加された 著者 Pankaj,
プログラミングの質問:ああ、それは面白いです。
追加された 著者 Pankaj,