前几天,我们的团队去了一个逃生室。难题之一是由六个机械开关组成的板,您必须找到打开和关闭的正确组合才能解锁盒子,如下所示:
-v-v-v-
-v-v-v-
作为开发人员,我们认为尝试2 ^ 6 = 64个组合中的每个组合要比实际解决难题更有效。因此,我们分配了一个可怜的家伙进行一些二进制计数:
-v-v-v-
-v-v-v-
-v-v-v-
-v-v-^-
-v-v-v-
-v-^-v-
-v-v-v-
-v-^-^-
等等。
挑战
编写一个程序,给定所有开关都按上述格式设置为关闭的字符串,从而以任意顺序生成打开和关闭的所有组合。
您可以编写完整的程序或函数。因此,您的程序可以通过stdin,文件或单个字符串参数接收输入,然后返回或打印输出。如果返回,则输出可能在列表/数组/等中。而不是单个字符串。如果输出为单个字符串,则板子之间应使用换行符分隔(允许使用尾随换行符)。
输入字符串将与正则表达式匹配,r'((-v)+-)(\n(-v)+-)*'
并代表一块板,所有开关均关闭。这意味着无零情况,并且开关左对齐。每行可能没有相同数量的开关。
每个输出板应具有与输入完全相同的格式,除了v可以根据需要用^代替。输出板可以用任意数量的换行符分隔。
由于运行时间自然是开关数量的O(2 ^ n),因此您的代码将不会在任何排列的10个以上的开关上进行测试。
这是代码高尔夫球,因此以字节数为单位的最短代码获胜。
样本输入和输出
输入:
-v-
可能的输出:
-v-
-^-
输入:
-v-
-v-
可能的输出:
-^-
-^-
-^-
-v-
-v-
-^-
-v-
-v-
由于要为更大数量的开关检查答案非常繁琐,因此这里有一个Python脚本作为健全性检查工具。(不幸的是,我提供了一个当前注释掉的代码段,以在给定的输入文件中生成预期的输出,以备您需要更多的测试用例。)将输入字符串放在名为“ input”的文件中,并将换行符分隔的输出(对不起,没有列表格式)放在同一目录中的名为“ output”的文件中,然后运行python3 sanitycheck.py
。