コンテンツにスキップ

018: 石の上にもニム

ヒント / 解答

難易度: ☆☆

問題

ニムは、いくつかの山に置かれた石を2人で取り合うゲームです。 1回の手番では、1つの山を選び、その山から1個以上の石を取ります。 最後の石を取ったプレイヤーが勝ちます。

関数 winning_move(piles) を書いてください。 piles は、各山の石の数を表す非負整数のリストです。

返り値は、必勝手を表す (index, new_count) とします。 これは、index 番目の山を new_count 個に減らす、という意味です。 複数の必勝手がある場合は、もっとも小さい index の手を返してください。

必勝手がない場合は None を返してください。

制約

  • piles は非負整数のリストです。
  • piles は空でもかまいません。
  • index は0始まりです。
  • new_count は、選んだ山の現在の石数より小さい非負整数です。
  • CUIは作りません。
  • 盤面を受け取り、次の1手だけを返します。

>>> winning_move([3, 4, 5])
(0, 1)
>>> winning_move([1, 2, 3])
None
>>> winning_move([7])
(0, 0)
>>> winning_move([10, 12, 15])
(0, 3)
>>> winning_move([])
None