Візьмемо сітку з 16х16 друкованих символів ASCII (кодові точки від 0x20 до 0x7E). З верхнього лівого до правого нижнього кута є 30 шляхів вибору-15, роблячи лише ортогональні ходи, як у наведеному нижче прикладі:
##..............
.#..............
.######.........
......##........
.......##.......
........#.......
........#.......
........#.......
........###.....
..........###...
............#...
............####
...............#
...............#
...............#
Кожен такий шлях складається рівно з 31 символу. Зауважте, що кожен із цих символів має різні 31 діагоналі:
0123456789ABCDEF
123456789ABCDEFG
23456789ABCDEFGH
3456789ABCDEFGHI
456789ABCDEFGHIJ
56789ABCDEFGHIJK
6789ABCDEFGHIJKL
789ABCDEFGHIJKLM
89ABCDEFGHIJKLMN
9ABCDEFGHIJKLMNO
ABCDEFGHIJKLMNOP
BCDEFGHIJKLMNOPQ
CDEFGHIJKLMNOPQR
DEFGHIJKLMNOPQRS
EFGHIJKLMNOPQRST
FGHIJKLMNOPQRSTU
Це не приклад сітки. Це візуалізація 31 діагоналі.
Ми будемо називати сітку діагонально унікальною, якщо жодна антидіагональ не містить одного і того ж символу двічі. Якщо сітка має це властивість, жоден два контури не будуть містити однакового рядка. (Просто для уточнення, сама візуалізація в основному протилежна діагоналі унікальної.)
Змагання
Створіть діагонально унікальну сітку 16х16 таким чином, щоб якомога більше шляхів було дійсним кодом, який друкує Jabberwocky
до STDOUT (з додатковим розривом кінцевої лінії) якомога більше мов. Кожен код може бути або повною програмою, або тілом функції без параметрів без оператора return (це робиться для того, щоб не відмовляти від мов, які повинні мати свій код у деякій функції / класу / простору імен).
Примітка: для простоти ви можете використовувати якийсь зарезервований символ для невикористаних комірок, як це зробив 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~~~~ ~~~~~~~~~~~")) ~ ~~~~~~~~~~~ ; ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
Біжи.
Повідомте мене, якщо ви думаєте, що в ньому є помилка.