Код выбора языка

17

Давайте возьмем сетку из 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, который можно использовать для проверки уникальности сетки по диагонали.

  1. Перейти к онлайн-переводчику CJam .
  2. Вставьте следующий код

    l:A;
    qN/W%A16**33/z{A-__|=}%:*"D""Not d"?"iagonally unique"
    
  3. В поле ввода поместите зарезервированный символ в первую строку (используйте неиспользуемый символ, если вы не предъявляете иск за зарезервированный символ), а затем свою сетку в строке 2–17. Например, для ответа Ypnypn:

    ~
     pr~~~~~~~~~~~~~
     tin~~~~~~~~~~~~
    ~ypt(~~~~~~~~~~~
    ~~ef(~~~~~~~~~~~
    ~~  "J~~~~~~~~~~
    ~~~~~ab~~~~~~~~~
    ~~~~~~be~~~~~~~~
    ~~~~~~~rwo~~~~~~
    ~~~~~~~~~ck~~~~~
    ~~~~~~~~~~y~~~~~
    ~~~~~~~~~~\n~~~~
    ~~~~~~~~~~~")) ~
    ~~~~~~~~~~~  ;  
    ~~~~~~~~~~~~~~~ 
    ~~~~~~~~~~~~~~~ 
    ~~~~~~~~~~~~~~~ 
    
  4. Запустить.

Дайте мне знать, если вы думаете, что это ошибка.

Мартин Эндер
источник
6
'Twas brillig, и слюнявые туфли делали круговорот и хихикали в вабе ... (да, я запомнил это);)
Ручка двери
Это звучит как один из вопросов Хобби Кальвина, и это фантастическое достижение. Я до сих пор не смог понять, как это делается.
Сохам Чоудхури

Ответы:

21

30 33 35 языков

Зарезервированный персонаж: ~

 println!~~~~~~~
 puts    (1,~~~~
    echo   '~~~~
"cWprintfn"Ja~~~
Eork~~~;'Jabbe~~
\ui)K00~~~~~br~~
]tteL~0~~~~~ew~~
]<~ln(0~~~~~ro~~
`<~~~ 0~~~~~wc~~
m"~~~ "~~~~~ok~~
rJ~~~'J~~~~~cy~~
j"<< "a~~~~~k'..
^~~~~~bberwoy");
f~~~~~~~~~~c'  ;
t~~~~~~~~~~ky"  
XX"););  5f+'); 

Языки:

01. Rust        | println! (  "Jabberwocky") ;  |
02. Groovy      | println     "Jabberwocky"     |
03. E           | println  (  "Jabberwocky")    |
04. Swift       | println  (  "Jabberwocky") ;  |
05. Julia       | println  (  "Jabberwocky");;  |
06. Processing  | println  (  "Jabberwocky")  ; |
07. Falcon      | printl   (  "Jabberwocky")    |
08. ALGOL 68    | print    (  "Jabberwocky")    |
09. Vala        | print    (  "Jabberwocky") ;  |
10. Pawn        | print    (  "Jabberwocky");;  |
11. Batsh       | print    (  "Jabberwocky")  ; |
12. freeBASIC   | print       "Jabberwocky"     |
13. Rebol       | print       "Jabberwocky"  ;  |
14. Red         | print       "Jabberwocky"   ; |
15. AWK         | print       'Jabberwocky'     |
16. Perl        | print       'Jabberwocky'  ;  |
17. bc          | print       'Jabberwocky'   ; |
18. Euphoria    |  puts    (1,"Jabberwocky")    |
19. C           |  puts    (  "Jabberwocky") ;  |
20. Tcl         |  puts       "Jabberwocky"     |
21. Ruby        |  puts       'Jabberwocky'     |
22. Zsh         |      echo   "Jabberwocky"     |
23. Bash        |      echo   "Jabberwocky"  ;  |
24. tcsh        |      echo   "Jabberwocky"   ; |
25. PHP         |      echo   'Jabberwocky'     |
26. Fish        |      echo   'Jabberwocky'  ;  |
27. Dash        |      echo   'Jabberwocky'   ; |
28. F#          |      printfn"Jabberwocky"   ; |
29. C++         |    cout<<"J"<< "abberwocky" ; |
30. D           |     Writeln(  'Jabberwocky'); |
31. Pascal      |     WriteLn(  'Jabberwocky'); |
32. Delphi      |     Writeln(  "Jabberwocky"); |
33. GolfScript  |      print;'Jabberwocky'..;;  |
34. CJam        |   "E\]]`mrj^ftXX"););  5f+'); |
35. Pyth        |      pk)K00000"Jabberwocky"   |

(Pyth и CJam благодаря пользователю 23013)

оптимизатор
источник
На самом деле код haskell печатает строку с кавычками. Чтобы распечатать его без них вам понадобится putStr[ln].... Кроме того, Haskell не имеет ;;. Я полагаю, вы смешали это с Ocaml.
гордый haskeller
Даже у Окамла этого нет. (Онлайн переводчик выдает ошибку если я поставлю ;;). В любом случае, заменил Haskell на что-то еще.
Оптимизатор
Pyth будет легко добавить - | p b"Jabberwocky" |работает, например
isaacg
@isaacg Спасибо! Я тоже собирался заглянуть в Пита. Это экономит мое время :)
Оптимизатор
@isaacg Кстати, где такой путь?
Оптимизатор
15

17 языков

Вот таблица с .зарезервированным символом:

 prin...........
 utstln!........
       (1,......
<?echo    ".....
.........'Jab...
............b...
............e...
............r...
............w...
............o...
............c...
............k...
............y"..
............' ).
.............  ;
..............  

А вот языки и их пути (игнорируйте вертикальные черты):

01. Rust        | println!(   "Jabberwocky" ) ; |
02. Swift       | println (   "Jabberwocky" ) ; |
03. Scala       | println (   "Jabberwocky" )   |
04. Falcon      | printl  (   "Jabberwocky" )   |
05. Vala        | print   (   "Jabberwocky" ) ; |
06. Lua         | print   (   'Jabberwocky' ) ; |
07. ALGOL 68    | print   (   "Jabberwocky" )   |
08. Dart        | print   (   'Jabberwocky' )   |
09. Rebol       | print       "Jabberwocky"   ; |
10. Perl        | print       'Jabberwocky'   ; |
11. AWK         | print       "Jabberwocky"     |
12. Euphoria    | puts    (1, "Jabberwocky" )   |
13. C           | puts    (   "Jabberwocky" ) ; |
14. Tcl         | puts        "Jabberwocky"     |
15. Ruby        | puts        'Jabberwocky'     |
16. Bash        |     echo    "Jabberwocky"     |
17. PHP         |     echo    "Jabberwocky"   ; |

Я не смог протестировать их все, поэтому дайте мне знать, если что-то не работает.

GRC
источник
Я думаю, что вы не можете использовать один и тот же путь для более чем одного языка и добавить его к своей оценке.
Оптимизатор
1
@ Оптимизатор Я не думаю, что есть какие-либо пути, используемые дважды. По общему признанию, различия довольно малы.
grc
1
Тьфу, ты подлый парень! : P
Оптимизатор
Для PHP, после удаления шаблона, `echo" foobar "` (более 1 пробела каждый раз) печатается просто отлично. Без каких-либо пробелов. Попробуйте здесь
Оптимизатор
2
Это нормально, чтобы удалить шаблон из кода, который <?здесь
Оптимизатор
3

18 языков и более

Зарезервировано характер: ~.

         "~~~~~~
12345678 "~~~~~~
12345678 "~~~~~~
12345678 "~~~~~~
1234567: ea~~~~~
1234567: c;~~~~~
1234567: hL~~~~~
1234567: o'~~~~~
1234567:  Jab~~~
1234567:?""""~~~
~~~~~~~~~Jabberw
~~~~~~~~~~~~~~~o
~~~~~~~~~~~~~~~c
~~~~~~~~~~~~~~~k
~~~~~~~~~~~~~~~y
~~~~~~~~~~~~~~~"

Языки:

CJam                             |             ea;L'J"abberwocky"|
GolfScript                       |              cho "Jabberwocky"|
Bc                               |                  "Jabberwocky"|
Bash                             |         """"echo J"abberwocky"|
Zsh                              |           ""echo J"abberwocky"|
Fish                             |             echo J"abberwocky"|
Tcsh                             |         """"echo Ja"bberwocky"|
Dash                             |           ""echo Ja"bberwocky"|
Ksh                              |             echo Ja"bberwocky"|
Mksh                             |         """"echo Jab"berwocky"|
Yash                             |           ""echo Jab"berwocky"|
Sash                             |             echo Jab"berwocky"|
Posh                             |         """"echo "Jabberwocky"|
Csh                              |           ""echo "Jabberwocky"|
PHP                              |             echo "Jabberwocky"|

и...

FreeBasic                        |                 ?"Jabberwocky"|
QBasic                           | 12345678        ?"Jabberwocky"|
QB64                             | 123456788       ?"Jabberwocky"|

Там должно быть еще много основных диалектов, которые работают. Но у меня пока нет времени, чтобы проверить их все.

jimmy23013
источник
Помните, что вы не можете использовать один и тот же путь для более чем 1 языка. Так что не все основные диалекты подойдут.
Оптимизатор
2
@Optimizer По крайней мере те диалекты, которые имеют номера строк и не проверяют переполнение (и имеют ?для print), должны работать ... Просто выберите другой номер строки.
jimmy23013