バックグラウンド
アリスとボブは、バイナリワードの構築と呼ばれるゲームをプレイします。ゲームをプレイするには、長さn >= 0、ゴールセットと呼ばれるG長さのnバイナリワードのセット、およびターン順序と呼ばれる文字とを含む長さのn文字列tを修正します。ゲームはターンの間続き、ターンでは、によって定義されたプレーヤーがbitを選択します。ゲームが終了すると、プレイヤーは構築したバイナリワードを確認します。この単語が目標セットで見つかった場合、アリスがゲームに勝ちます。そうでなければ、ボブが勝ちます。ABnit[i]w[i]wG
たとえば、の修正をしましょうn = 4、G = [0001,1011,0010]とt = AABA。アリスは最初のターンを取得し、彼女はを選択しw[0] = 0ます。2番目のターンもアリスであり、彼女はを選択しw[1] = 0ます。ボブは3番目のターンを持ち、彼はを選択しw[2] = 0ます。最終ターンで、アリスはを選択しw[3] = 1ます。結果の単語0001がにGあるため、アリスがゲームに勝ちます。
今、ボブがを選択した場合w[2] = 1、アリスはw[3] = 0彼女の最後のターンで選択し、まだ勝つことができました。これは、アリスがボブのプレー方法に関係なくゲームに勝つことができることを意味します。この状況では、アリスには勝利戦略があります。この戦略は、Bobのターンに対応するレベルで分岐し、すべての分岐に次の単語が含まれるラベル付きバイナリツリーとして視覚化できますG。
A A B A
-0-0-0-1
\
1-0
アリスは、自分のターンに枝をたどるだけでプレーします。ボブがどのブランチを選んでも、最終的にアリスが勝ちます。
入力
入力として長さn、およびG長さの文字列の(空の場合もある)セットとしてのセットが与えられますn。
出力
出力は、アリスが勝利戦略を持っているターン順のリストです。これは、上記のバイナリツリーの存在に相当します。順番の順番は関係ありませんが、重複は禁止されています。
詳細なルール
完全なプログラムまたは関数を作成できます。プログラムの場合、入力と出力の区切り文字を選択できますが、両方で同じにする必要があります。最短のバイトカウントが優先され、標準の抜け穴は許可されません。
テストケース
3 [] -> []
3 [000,001,010,011,100,101,110,111] -> [AAA,AAB,ABA,ABB,BAA,BAB,BBA,BBB]
4 [0001,1011,0010] -> [AAAA,BAAA,AABA]
4 [0001,1011,0010,0110,1111,0000] -> [AAAA,BAAA,ABAA,BBAA,AABA,AAAB]
5 [00011,00110,00111,11110,00001,11101,10101,01010,00010] -> [AAAAA,BAAAA,ABAAA,BBAAA,AABAA,AAABA,BAABA,AAAAB,AABAB]
楽しい事実
出力の順番の数は、目標セットの単語の数と常に等しくなります。
111012回リストされています。楽しい事実はまだセットに当てはまります。Zgarb、入力に繰り返し要素が含まれている可能性がありますか、またはこれはエラーでしたか?