バックグラウンド
アリスとボブは、バイナリワードの構築と呼ばれるゲームをプレイします。ゲームをプレイするには、長さn >= 0
、ゴールセットと呼ばれるG
長さのn
バイナリワードのセット、およびターン順序と呼ばれる文字とを含む長さのn
文字列t
を修正します。ゲームはターンの間続き、ターンでは、によって定義されたプレーヤーがbitを選択します。ゲームが終了すると、プレイヤーは構築したバイナリワードを確認します。この単語が目標セットで見つかった場合、アリスがゲームに勝ちます。そうでなければ、ボブが勝ちます。A
B
n
i
t[i]
w[i]
w
G
たとえば、の修正をしましょう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]
楽しい事実
出力の順番の数は、目標セットの単語の数と常に等しくなります。
11101
2回リストされています。楽しい事実はまだセットに当てはまります。Zgarb、入力に繰り返し要素が含まれている可能性がありますか、またはこれはエラーでしたか?