Давайте возьмем сетку из 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~~~~ ~~~~~~~~~~~")) ~ ~~~~~~~~~~~ ; ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
Запустить.
Дайте мне знать, если вы думаете, что это ошибка.