배경
Alice와 Bob 은 이진 단어를 구성하는 게임을 합니다. 게임을하려면 길이 n >= 0, 목표 세트 라고하는 G길이 n이진 단어 세트 및 문자를 포함 하는 길이 n문자열 과 턴 순서 라는 t문자를 포함합니다 . 게임은 턴 동안 지속되며, 턴에 의해 정의 된 플레이어 는 비트 를 선택합니다 . 게임이 끝나면 플레이어는 자신이 만든 이진 단어 를 봅니다 . 이 단어가 목표 설정에서 발견 되면 Alice가 게임에서 승리합니다. 그렇지 않으면 밥이 이깁니다.ABnit[i]w[i]wG
예를 들어, 수정하자 n = 4, G = [0001,1011,0010]등을 t = AABA. 앨리스는 첫 턴을했고 그녀는을 선택합니다 w[0] = 0. 두 번째 차례는 Alice의 것이며, 그녀는를 선택합니다 w[1] = 0. 밥은 세 번째 턴을했고 그는을 선택합니다 w[2] = 0. 마지막 턴에서 Alice는를 선택합니다 w[3] = 1. 결과 단어 0001는에서 발견 G되므로 Alice가 게임에서 승리합니다.
밥이를 선택했다면 w[2] = 1, 앨리스는 w[3] = 0마지막 턴에서 선택할 수 있었고 여전히 이길 수있었습니다. 이것은 Bob이 어떻게 플레이하든 Alice가 게임에서 이길 수 있음을 의미합니다. 이 상황에서 Alice는 승리 전략을 가지고 있습니다. 이 전략은 Bob의 차례에 해당하는 수준으로 분기되고 모든 분기에 다음 단어가 포함 된 레이블이 지정된 이진 트리로 시각화 할 수 있습니다 G.
A A B A
-0-0-0-1
\
1-0
앨리스는 단순히 자신의 차례에 가지를 따라 연주합니다. Bob이 어떤 지점을 선택하든 Alice는 결국 승리합니다.
입력
당신은 길이로 입력으로 제공 nG 가 문자열 인 (비어있는) 목록으로 설정 n합니다.
산출
당신의 결과는 Alice가 승리 전략을 가지고있는 턴 순서의 목록이며, 이것은 위에서 설명한 이진 트리의 존재와 같습니다. 턴 주문의 순서는 중요하지 않지만 중복은 금지되어 있습니다.
세부 규칙
전체 프로그램 또는 함수를 작성할 수 있습니다. 프로그램의 경우 입력 및 출력에 대한 구분 기호를 선택할 수 있지만 둘 다 동일해야합니다. 가장 짧은 바이트 수가 이기고 표준 허점은 허용되지 않습니다.
테스트 사례
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두 번 나열 됩니다. 재미있는 사실은 여전히 세트를 유지합니다. Zgarb, 입력에 반복 된 요소가 포함되어있을 수 있습니까, 아니면 오류입니까?