ゲームの勝ち状態と負け状態
最適なプレイで誰が勝つかを考えます
「ゲームの勝ち状態と負け状態」はCoddyKit上の無料Coding Interview Prepレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCoding Interview Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Coding Interview Prepコースには全4レッスンが含まれています。
2人の完全な対局
組合せゲームでは、2人のプレイヤーが交互に手を進め、どちらも最善を尽くし、手を打てなくなったほうが負けます。あなたの仕事は勝者を予測することだけです。🎯
すべての局面にラベルがある
ゲームの各局面を状態と呼びます。あなたの仕事は、手番のプレイヤーにとって各状態が勝ちか負けかを判定することです。
勝ち状態の意味
手番のプレイヤーが、相手を負け状態に導く手を少なくとも1つ持つなら、その状態は勝ち状態です。
負け状態の意味
どの手を選んでも相手を勝ち状態にしてしまうとき、その状態は負け状態です。何をしても行き詰まってしまいます。
基底の場合
まったく手を打てない局面が基底ケースです。その局面に直面したプレイヤーはすでに負けているため、負け状態とします。
最下層から積み上げる
基底ケースから始めて、外側へ向かって処理します。新しい状態のラベルは、その手によって到達する状態だけで決まります。
良い手は1つで十分
勝つために必要なのは、相手の負け状態へ進む1つの手だけです。逃げ道を1つでも見つければ十分です。
小さな例
山から石を1個または2個取り、最後に取った人が勝つゲームを考えます。石が0個のときは手番のプレイヤーが負けるため、負け状態です。
勝敗判定をコードにする
この再帰では、すべての手を試し、その結果に対して再帰呼び出しを行うことで状態を判定します。⚙️
def win(n):
if n == 0:
return False
return any(not win(n - k) for k in (1, 2))メモ化で高速化する
分岐が異なっても同じ状態が現れるため、各結果をキャッシュします。単純なメモによって、指数時間の処理を線形時間にできます。
from functools import lru_cache
@lru_cache(None)
def win(n):
return n != 0 and any(not win(n - k) for k in (1, 2))対称性を近道にする
局面が完全に対称なら、後手は相手の手をまねることで勝てる場合があります。このミラー戦略に注目してください。
確認
ある状態に直面しています。あなたにとって負け状態になるのはどのようなときでしょうか。
まとめ
これで状態を判定できるようになりました。勝ちは相手の負けへ進む手が1つあり、負けはその手が1つもありません。基底ケースから構築し、メモ化してください。🧠
よくある質問
「ゲームの勝ち状態と負け状態」レッスンは無料ですか?
はい。「ゲームの勝ち状態と負け状態」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Coding Interview Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Coding Interview Prepコースには全4レッスンが含まれています。
「ゲームの勝ち状態と負け状態」で何を学びますか?
最適なプレイで誰が勝つかを考えます ブラウザで直接実行するハンズオンコードでCoding Interview Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Coding Interview Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCoding Interview Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「ゲームの勝ち状態と負け状態」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCoding Interview Prepレッスンでコードを書いて実行できますか?
はい。すべてのCoding Interview Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ゲームの勝ち状態と負け状態
- Nim と Grundy 数
- Meet in the Middle
- 高速デバッグ: ストレステストと切り分け