sfondo
Alice e Bob giocano un gioco chiamato costruire una parola binaria . Per giocare, devi fissare una lunghezza n >= 0
, una serie G
di n
parole binarie lunghezza chiamate il set obiettivo e una n
stringa lunghezza t
contenente le lettere A
e B
, chiamato ordine di turno . Il gioco dura n
turni e, a turno i
, il giocatore definito da t[i]
seleziona un po ' w[i]
. Quando il gioco termina, i giocatori guardano la parola binaria w
che hanno costruito. Se questa parola viene trovata nel goal set G
, Alice vince la partita; altrimenti vince Bob.
Per esempio, cerchiamo di correzione n = 4
, G = [0001,1011,0010]
e t = AABA
. Alice ottiene il primo turno e sceglie w[0] = 0
. Il secondo turno è anche quello di Alice, e lei sceglie w[1] = 0
. Bob ha il terzo turno e sceglie w[2] = 0
. Nel turno finale, Alice sceglie w[3] = 1
. La parola risultante 0001
, si trova in G
, quindi Alice vince la partita.
Ora, se Bob avesse scelto w[2] = 1
, Alice avrebbe potuto scegliere w[3] = 0
nel suo turno finale e vincere ancora. Ciò significa che Alice può vincere la partita, indipendentemente da come Bob gioca. In questa situazione, Alice ha una strategia vincente . Questa strategia può essere visualizzata come un albero binario etichettato, che si ramifica ai livelli corrispondenti ai turni di Bob e il cui ogni ramo contiene una parola da G
:
A A B A
-0-0-0-1
\
1-0
Alice gioca semplicemente seguendo i rami nel suo turno; indipendentemente dal ramo scelto da Bob, Alice alla fine vince.
Ingresso
Ti viene dato come input la lunghezza n
e il set G
come un elenco (possibilmente vuoto) di stringhe di lunghezza n
.
Produzione
Il tuo output è l'elenco degli ordini di turno per i quali Alice ha una strategia vincente, che equivale all'esistenza di un albero binario come descritto sopra. L'ordine degli ordini di turno non ha importanza, ma i duplicati sono vietati.
Regole dettagliate
È possibile scrivere un programma completo o una funzione. Nel caso di un programma, è possibile scegliere il delimitatore per l'input e l'output, ma deve essere lo stesso per entrambi. Vince il conteggio dei byte più corto e le scappatoie standard non sono ammesse.
Casi test
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]
Fatto divertente
Il numero di ordini di turno nell'output è sempre uguale al numero di parole nel set di obiettivi.
11101
due volte; il fatto divertente vale ancora per i set. Zgarb, l'input può contenere elementi ripetuti o è stato un errore?