Wybierz kod własnego języka


17

Weźmy siatkę 16 x 16 drukowalnych znaków ASCII (punkty kodowe od 0x20 do 0x7E). Istnieje 30 ścieżek do wyboru z 15 od lewego górnego do prawego dolnego rogu, wykonujących tylko ruchy ortogonalne, jak w poniższym przykładzie:

##..............
.#..............
.######.........
......##........
.......##.......
........#.......
........#.......
........#.......
........###.....
..........###...
............#...
............####
...............#
...............#
...............#

Każda taka ścieżka składa się z dokładnie 31 znaków. Zauważ, że każda z tych postaci znajduje się na innym z 31 anty-przekątnych:

0123456789ABCDEF
123456789ABCDEFG
23456789ABCDEFGH
3456789ABCDEFGHI
456789ABCDEFGHIJ
56789ABCDEFGHIJK
6789ABCDEFGHIJKL
789ABCDEFGHIJKLM
89ABCDEFGHIJKLMN
9ABCDEFGHIJKLMNO
ABCDEFGHIJKLMNOP
BCDEFGHIJKLMNOPQ
CDEFGHIJKLMNOPQR
DEFGHIJKLMNOPQRS
EFGHIJKLMNOPQRST
FGHIJKLMNOPQRSTU

To nie jest przykładowa siatka. Jest to wizualizacja 31 anty przekątnych.

Nazwiemy siatkę unikatową po przekątnej, jeśli żadna anty-przekątna nie zawiera dwukrotnie tego samego znaku. Jeśli siatka ma tę właściwość, żadne dwie ścieżki nie będą zawierały tego samego łańcucha. (Aby to wyjaśnić, sama wizualizacja jest w zasadzie przeciwieństwem unikalnej po przekątnej).

Wyzwanie

Zaprojektuj unikatową po przekątnej siatkę 16 x 16, tak aby jak najwięcej ścieżek było prawidłowymi kodami do wydrukowania Jabberwocky do STDOUT (z opcjonalnym łamaniem linii końcowej) w jak największej liczbie języków. Każdy kod może być pełnym programem lub treścią funkcji bez parametrów, bez instrukcji return (ma to na celu nie zniechęcać języków, które muszą mieć swój kod w niektórych funkcjach / klasach / przestrzeni nazw).

Uwaga: Dla uproszczenia możesz użyć znaku zastrzeżonego dla nieużywanych komórek tak jak zrobił to Ypnypn .

Dla każdej prawidłowej ścieżki proszę wyraźnie podać jeden język programowania, w którym jest ona ważna.

Zwycięzcą jest zgłoszenie z największą liczbą języków objętych powyższą listą. (Alternatywnie, dla każdego języka, który chcesz policzyć, pokaż jedną ścieżkę, która jest poprawna w tym języku, ale pamiętaj, aby nie liczyć żadnej ścieżki dla dwóch języków.)

W przypadku remisu policz komórki siatki, które nie są objęte żadną prawidłową ścieżką. Wygrywa mniej nieużywanych komórek. Jeśli nadal jest remis, zaakceptuję najwięcej głosów (netto).

Skrypt sprawdzania poprawności

Właśnie szybko stworzyłem mały fragment CJam, którego możesz użyć, aby sprawdzić, czy siatka jest unikatowa po przekątnej.

  1. Przejdź do internetowego tłumacza CJam .
  2. Wklej następujący kod

    l:A;
    qN/W%A16**33/z{A-__|=}%:*"D""Not d"?"iagonally unique"
    
  3. W polu wejściowym umieść zarezerwowany znak w pierwszym wierszu (użyj nieużywanego znaku, jeśli nie pozywasz znaku zastrzeżonego), a następnie siatkę w wierszach od 2 do 17. Np. Dla odpowiedzi Ypnypn:

    ~
     pr~~~~~~~~~~~~~
     tin~~~~~~~~~~~~
    ~ypt(~~~~~~~~~~~
    ~~ef(~~~~~~~~~~~
    ~~  "J~~~~~~~~~~
    ~~~~~ab~~~~~~~~~
    ~~~~~~be~~~~~~~~
    ~~~~~~~rwo~~~~~~
    ~~~~~~~~~ck~~~~~
    ~~~~~~~~~~y~~~~~
    ~~~~~~~~~~\n~~~~
    ~~~~~~~~~~~")) ~
    ~~~~~~~~~~~  ;  
    ~~~~~~~~~~~~~~~ 
    ~~~~~~~~~~~~~~~ 
    ~~~~~~~~~~~~~~~ 
    
  4. Biegać.

Daj mi znać, jeśli uważasz, że występuje błąd.


6
„Twas brillig, a śluzowate gołębie wirowały i wibrowały w wodzie… (tak, zapamiętałem to);)
Klamka

To brzmi jak jedno z pytań Calvina Hobby, co jest fantastycznym osiągnięciem. Nadal nie byłem w stanie zrozumieć, jak to się robi.
Soham Chowdhury

Odpowiedzi:


21

30 33 35 języków

Zastrzeżona postać: ~

 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+'); 

Języki:

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 i CJam dzięki user23013)


W rzeczywistości kod haskell drukuje ciąg znaków ze znakami cudzysłowu. Aby wydrukować go bez nich, będziesz potrzebować putStr[ln].... Haskell też nie ma ;;. Myślę, że zmieszałeś to z Ocaml.
dumny haskeller

Nawet Ocaml tego nie ma. (Tłumacz internetowy podaje błąd, jeśli go umieszczę ;;). W każdym razie zastąpił Haskell czymś innym.
Optymalizator

Pyth byłby łatwy do dodania - | p b"Jabberwocky" |działa na przykład
isaacg

@isaacg Thanks! Chciałem też zajrzeć do Pytha. To oszczędza mi czas :)
Optymalizator

@isaacg BTW, gdzie jest taka ścieżka?
Optymalizator

15

17 języków

Oto siatka z .postacią zarezerwowaną:

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

A oto języki i ich ścieżki (zignoruj ​​pionowe paski):

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"   ; |

Nie byłem w stanie przetestować ich wszystkich, więc daj mi znać, jeśli coś nie działa.


Myślę, że nie możesz użyć tej samej ścieżki dla więcej niż jednego języka i dodać ją do swojego wyniku.
Optymalizator

1
@Optimizer Nie sądzę, że są jakieś ścieżki używane dwukrotnie. Trzeba przyznać, że różnice są niewielkie.
grc

1
Ugh, ty podstępny gościu! : P
Optymalizator

W PHP, po usunięciu płyty grzewczej, `echo" foobar "` (więcej niż 1 spacja za każdym razem) drukuje się dobrze. Bez białych spacji. Spróbuj tutaj
Optymalizator

2
Można usunąć płytkę kotłową z kodu, który jest <?tutaj
Optymalizator

3

18 języków i więcej

Reserved znak: ~.

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

Języki:

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"|

i...

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

Powinno być wiele innych podstawowych dialektów, które działają. Ale nie mam jeszcze czasu na przetestowanie ich wszystkich.


Pamiętaj, że nie możesz użyć tej samej ścieżki dla więcej niż jednego języka. Tak więc nie wszystkie dialekty BASIC będą pasować.
Optimizer

2
@Optimizer Przynajmniej te dialekty, które mają numery linii i nie sprawdzają przepełnienia (i mają ?dla print) powinny działać ... Po prostu wybierz inny numer linii.
jimmy23013
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.