Hintergrund
Alice und Bob spielen ein Spiel namens Konstruieren eines binären Wortes . Um das Spiel zu spielen, fixieren Sie eine Länge n >= 0
, eine Reihe G
von längs- n
binären Worten des angerufene Zielsatz , und eine längs- n
Zeichenfolge , t
die Buchstaben enthält , A
und B
die gerufene reihum . Das Spiel dauert einige Runden n
, und in i
der Runde t[i]
wählt der Spieler, der durch definiert ist, ein Bit aus w[i]
. Wenn das Spiel vorbei ist, schauen sich die Spieler das Binärwort an, das w
sie konstruiert haben. Wenn dieses Wort im Zielsatz gefunden wird G
, gewinnt Alice das Spiel. ansonsten gewinnt Bob.
Zum Beispiel, lassen Sie uns fix n = 4
, G = [0001,1011,0010]
und t = AABA
. Alice bekommt die erste Runde und sie wählt w[0] = 0
. Die zweite Runde gehört ebenfalls Alice und sie wählt w[1] = 0
. Bob hat den dritten Zug und wählt w[2] = 0
. In der letzten Runde wählt Alice w[3] = 1
. Das resultierende Wort 0001
wird in gefunden G
, also gewinnt Alice das Spiel.
Wenn Bob gewählt hätte w[2] = 1
, hätte Alice w[3] = 0
in ihrem letzten Zug wählen und trotzdem gewinnen können. Dies bedeutet, dass Alice das Spiel gewinnen kann, egal wie Bob spielt. In dieser Situation hat Alice eine Gewinnstrategie . Diese Strategie kann als beschrifteter Binärbaum dargestellt werden, der auf den Ebenen verzweigt, die Bobs Umdrehungen entsprechen, und dessen jeder Zweig ein Wort enthält von G
:
A A B A
-0-0-0-1
\
1-0
Alice spielt, indem sie einfach den Zweigen folgt, wenn sie an der Reihe ist. egal welchen Zweig Bob wählt, Alice gewinnt schließlich.
Eingang
Sie erhalten als Eingabe die Länge n
und die Menge G
als (möglicherweise leere) Liste von Zeichenketten mit Länge n
.
Ausgabe
Ihre Ausgabe ist die Liste der Zugreihenfolgen, für die Alice eine Gewinnstrategie hat, die der Existenz eines Binärbaums wie oben beschrieben entspricht. Die Reihenfolge der Zugaufträge spielt keine Rolle, Duplikate sind jedoch verboten.
Detaillierte Regeln
Sie können ein vollständiges Programm oder eine Funktion schreiben. Bei einem Programm können Sie das Trennzeichen für die Ein- und Ausgabe auswählen, es muss jedoch für beide gleich sein. Die kürzeste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.
Testfälle
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]
Fun Fact
Die Anzahl der Zugreihenfolgen in der Ausgabe entspricht immer der Anzahl der Wörter im Zielsatz.
11101
zweimal aufgelistet . Die lustige Tatsache gilt immer noch für Sets. Zgarb, darf die Eingabe wiederholte Elemente enthalten, oder war das ein Fehler?