背景
爱丽丝和鲍勃玩的游戏叫构造二进制字。要玩游戏,您需要确定一个长度n >= 0
,一G
组长度为n
二进制的单词(称为目标集)和一个长度n
字符串(t
其中包含字母A
and)B
,称为回合顺序。游戏持续进行n
几回合,然后依次选择i
定义的玩家。游戏结束后,玩家将查看他们构建的二进制单词。如果在目标组中找到了这个词,爱丽丝将赢得比赛;否则,鲍勃获胜。t[i]
w[i]
w
G
例如,让我们来解决n = 4
,G = [0001,1011,0010]
和t = AABA
。爱丽丝得到第一回合,她选择了w[0] = 0
。第二轮也是爱丽丝的,她选择w[1] = 0
。鲍勃第三回合,他选择了w[2] = 0
。在最后一圈,爱丽丝选择w[3] = 1
。结果字词,0001
在中找到G
,因此爱丽丝赢得了比赛。
现在,如果鲍勃选择了w[2] = 1
,爱丽丝本可以w[3] = 0
在最后一轮选择,但仍然获胜。这意味着无论Bob如何玩,Alice都能赢得比赛。在这种情况下,爱丽丝有一个制胜法宝。可以将这种策略可视化为标记的二叉树,该树在与Bob的转弯相对应的级别上分支,并且其每个分支都包含来自的单词G
:
A A B A
-0-0-0-1
\
1-0
爱丽丝在转弯时只跟随树枝而玩;无论鲍勃选择哪个分支,爱丽丝最终都会获胜。
输入值
输入为length n
,集合G
为length的字符串列表(可能为空)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,输入内容可能包含重复的元素,还是这是一个错误?