让我们以16x16可打印ASCII字符(代码点0x20至0x7E)为网格。从左上角到右下角有30条选择的15条路径,仅进行正交移动,如以下示例所示:
##..............
.#..............
.######.........
......##........
.......##.......
........#.......
........#.......
........#.......
........###.....
..........###...
............#...
............####
...............#
...............#
...............#
每个此类路径均由31个字符组成。请注意,这些字符中的每个字符在31个对角线中都不同:
0123456789ABCDEF
123456789ABCDEFG
23456789ABCDEFGH
3456789ABCDEFGHI
456789ABCDEFGHIJ
56789ABCDEFGHIJK
6789ABCDEFGHIJKL
789ABCDEFGHIJKLM
89ABCDEFGHIJKLMN
9ABCDEFGHIJKLMNO
ABCDEFGHIJKLMNOP
BCDEFGHIJKLMNOPQ
CDEFGHIJKLMNOPQR
DEFGHIJKLMNOPQRS
EFGHIJKLMNOPQRST
FGHIJKLMNOPQRSTU
这不是示例网格。这是31个对角线的可视化。
如果没有对角线两次包含相同字符,我们将称其为对角线唯一的网格。如果网格具有此属性,则没有两个路径将包含相同的字符串。(只是澄清一下,可视化本身基本上是相反的就是对角线唯一。)
挑战
设计一个对角线唯一的16x16网格,以使尽可能多的路径是有效代码,Jabberwocky
并以尽可能多的语言打印到STDOUT(带有可选的尾随换行符)。每个代码可以是完整程序,也可以是没有返回语句的无参数函数的主体(这是为了不阻止需要在某些样板函数/类/命名空间中使用其代码的语言)。
注意:为简单起见,您可以为未使用的单元格使用一些保留字符,例如Ypnypn。
对于每个有效路径,请清楚说明其有效的一种编程语言。
获奖者是上述列表中使用的语言数量最多的作品。(或者,对于要计数的每种语言,请显示一种在该语言中有效的路径,但请确保不要对两种语言的任何路径进行计数。)
如果出现平局,请计算没有被任何有效路径覆盖的网格单元。较少的未使用单元会获胜。如果仍有平局,我将以(净)票最多接受答案。
验证脚本
我只是很快地整理了一个CJam片段,您可以使用它来验证网格对角线唯一。
- 转到在线CJam解释器。
粘贴以下代码
l:A; qN/W%A16**33/z{A-__|=}%:*"D""Not d"?"iagonally unique"
在输入字段中,将保留字符放在第一行(如果不要求使用保留字符,请使用未使用的字符),然后将网格置于2到17行。例如,对于Ypnypn的答案:
~ pr~~~~~~~~~~~~~ tin~~~~~~~~~~~~ ~ypt(~~~~~~~~~~~ ~~ef(~~~~~~~~~~~ ~~ "J~~~~~~~~~~ ~~~~~ab~~~~~~~~~ ~~~~~~be~~~~~~~~ ~~~~~~~rwo~~~~~~ ~~~~~~~~~ck~~~~~ ~~~~~~~~~~y~~~~~ ~~~~~~~~~~\n~~~~ ~~~~~~~~~~~")) ~ ~~~~~~~~~~~ ; ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
跑。
让我知道您是否认为它有错误。