4
誰がゴーストを勝ちますか?
ゴーストのゲームは、各ターンで交互に手紙を言う2人のプレイヤーの間で行われます。各時点で、これまでの文字は有効な英語の単語で始まる必要があります。敗者は、最初に完全な単語を完成させるプレーヤーです。したがって、たとえば、これまでの文字がEAGLの場合、有効な次の文字は "E"だけなので、次のプレイヤーは負けます。(「イーグルト」のような長い言葉があっても) チャレンジ あなたは、これまでの手紙を踏まえて、2人の完璧なプレーヤーを想定して勝者を決定するプログラムまたは関数を作成することになります。入力は、ゲームの現在の状態を表す文字列と、有効な単語の辞書を表す文字列のリストです。出力では、次に行くプレーヤーが勝つか負けるかを区別する必要があります。 細部 コードは、現在の状態が空の場合を処理する必要があります。ただし、辞書のどの単語も空ではないと想定できます。 各入力文字列は小文字のASCII文字、つまりazのみで構成されていると想定できます。 現在の状態を想定し、辞書内のすべての単語の最大文字数はそれぞれ80文字です。 辞書は空でないことが保証されています(有効な最初の移動がない場合を回避するため)。 「現在の状態」が有効であると想定することができます。現在の状態で始まる単語が必ずあるはずです。また、現在の状態がフルワードになることも、現在の状態のプレフィックスがフルワードになることもありません。 辞書は、「英単語」がゲームで有効であると見なされるルールに従って事前にフィルターされます。たとえば、3文字以下の単語でゲームがまだ終了しないバリアントの場合、辞書は4文字以上の単語のみが含まれるように事前にフィルタリングする。 辞書は事前に分類されていると想定できます。 例 辞書が次のとおりだとします。 abbot eager eagle eaglet earful earring 次の現在の状態の場合、出力は次のようになります。 Current state Result ============= ====== loss a win eag win eagl loss ear win earf win earr loss 同様に、https://raw.githubusercontent.com/dschepler/ghost-word-list/master/wordlist.txt(Debianシステムでを使用して作成pcregrep '^[a-z]{4,80}$' /usr/share/dict/american-english)の単語リストの場合、可能なセッションは次のとおりです。 Current state Result ============= ====== win h loss …