这个问题的灵感来自《 Godel,Escher,Bach》一书的封面:
这里的挑战是编写一个函数,该函数告诉三个给定的字母是否可以产生可以从三个侧面读取的3D雕塑。
在本练习中,您只能使用26个5px * 5px位图的字母:
或以二进制(A到Z)格式:
01110 11110 01111 11110 11111 11111 11111 10001 11111 11111 10001 10000 10001 10001 01110 11110 01110 11110 01111 11111 10001 10001 10001 10001 10001 11111
10001 10001 10000 10001 10000 10000 10000 10001 00100 00100 10010 10000 11011 11001 10001 10001 10001 10001 10000 00100 10001 10001 10001 01010 01010 00010
10001 11110 10000 10001 11100 11110 10011 11111 00100 00100 11100 10000 10101 10101 10001 10001 10001 11111 01110 00100 10001 01010 10001 00100 00100 00100
11111 10001 10000 10001 10000 10000 10001 10001 00100 10100 10010 10000 10001 10011 10001 11110 10011 10010 00001 00100 10001 01010 10101 01010 00100 01000
10001 11110 01111 11110 11111 10000 11111 10001 11111 11100 10001 11111 10001 10001 01110 10000 01111 10001 11110 00100 01110 00100 01010 10001 00100 11111
该雕塑由三个字母组成,顺序如下:
- 在上面的第一个字母
- 左边的第二个字母
- 右边的三个字母
- 第一字母的底部绑定到第二字母的顶部。
例:
您的函数可以接受三个大写字母(三个字符或一个字母三个字符串)作为输入,并输出一个布尔值(true / false或0/1),告知相应的雕塑是否可以存在。
例:
f("B","E","G") // true (because if you "sculpt out" B on top + E on the left + G on the right, and watch the three sides of the sculpture, you'll see exactly B, E and G as they are defined)
f("B","G","E") // false (because if you "sculpt out" B on top + G on the left + E on the right, and watch the three sides of the sculpture, you won't see a complete G and a complete E. Their shapes bother each other)
注意:即使雕塑包含“飞行像素”(多维数据集或未附加任何内容的一组多维数据集),您也可能返回true。
有标准漏洞。
更准确地说,除了三个字母之外,您不能使用外部输入,也不能在源代码中对17576个可能的答案进行硬编码。
以任何语言显示的字符中最短的答案将获胜!
玩得开心 :)