Antecedentes
Alice y Bob juegan un juego llamado construir una palabra binaria . Para jugar el juego, arreglas una longitud n >= 0, un conjunto Gde npalabras binarias de longitud llamadas meta fijadas y una ncadena de longitud que tcontiene las letras Ay B, llamada orden de turno . El juego dura nturnos, y en turno i, el jugador definido por t[i]selecciona un poco w[i]. Cuando termina el juego, los jugadores miran la palabra binaria wque han construido. Si esta palabra se encuentra en el objetivo establecido G, Alice gana el juego; de lo contrario, Bob gana.
Por ejemplo, la solución deje n = 4, G = [0001,1011,0010]y t = AABA. Alice obtiene el primer turno, y ella elige w[0] = 0. El segundo turno también es de Alice, y ella elige w[1] = 0. Bob tiene el tercer turno, y él elige w[2] = 0. En el turno final, Alice elige w[3] = 1. La palabra resultante 0001, se encuentra en G, por lo que Alice gana el juego.
Ahora, si Bob hubiera elegido w[2] = 1, Alice podría haber elegido w[3] = 0en su turno final, y aún así ganar. Esto significa que Alice puede ganar el juego sin importar cómo juegue Bob. En esta situación, Alice tiene una estrategia ganadora . Esta estrategia se puede visualizar como un árbol binario etiquetado, que se ramifica en los niveles correspondientes a los turnos de Bob, y cuyas ramas contienen una palabra de G:
A A B A
-0-0-0-1
\
1-0
Alice juega simplemente siguiendo las ramas en su turno; no importa qué rama elija Bob, Alice finalmente gana.
Entrada
Se le da como entrada la longitud ny el conjunto Gcomo una lista (posiblemente vacía) de cadenas de longitud n.
Salida
Su salida es la lista de órdenes de turno para las cuales Alice tiene una estrategia ganadora, que es equivalente a la existencia de un árbol binario como se describió anteriormente. El orden de las órdenes de turno no importa, pero los duplicados están prohibidos.
Reglas detalladas
Puede escribir un programa completo o una función. En el caso de un programa, puede elegir el delimitador para la entrada y la salida, pero debe ser el mismo para ambos. El conteo de bytes más corto gana, y las lagunas estándar no se permiten.
Casos de prueba
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]
Hecho de la diversión
El número de órdenes de turno en la salida siempre es igual al número de palabras en el conjunto de objetivos.
11101dos veces; El hecho divertido sigue siendo válido para los sets. Zgarb, ¿puede la entrada contener elementos repetidos o fue un error?