sfondo
Alice e Bob giocano un gioco chiamato costruire una parola binaria . Per giocare, devi fissare una lunghezza n >= 0, una serie Gdi nparole binarie lunghezza chiamate il set obiettivo e una nstringa lunghezza tcontenente le lettere Ae B, chiamato ordine di turno . Il gioco dura nturni 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 wche 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] = 0nel 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 ne il set Gcome 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.
11101due volte; il fatto divertente vale ancora per i set. Zgarb, l'input può contenere elementi ripetuti o è stato un errore?