Elija el código de su propio idioma

17

Tomemos una cuadrícula de 16x16 caracteres ASCII imprimibles (puntos de código 0x20 a 0x7E). Hay 30 rutas de elegir-15 desde la esquina superior izquierda a la esquina inferior derecha, que solo realizan movimientos ortogonales, como en el siguiente ejemplo:

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

Cada una de estas rutas consta de exactamente 31 caracteres. Tenga en cuenta que cada uno de esos caracteres está en uno de los 31 antiagoniales diferentes:

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

Este no es un ejemplo de cuadrícula. Esta es una visualización de los 31 antiagoniales.

Llamaremos a una cuadrícula diagonalmente única si ningún anti-diagonal contiene el mismo personaje dos veces. Si la cuadrícula tiene esta propiedad, no hay dos rutas que contengan la misma cadena. (Solo para aclarar, la visualización en sí es básicamente lo opuesto a diagonalmente único).

El reto

Diseñe una cuadrícula diagonalmente única de 16x16, de modo que la mayor cantidad posible de rutas sea un código válido que se imprima Jabberwockyen STDOUT (con un salto de línea final opcional) en tantos idiomas como sea posible. Cada código puede ser un programa completo o el cuerpo de una función sin parámetros sin una declaración de retorno (esto es para no desalentar a los lenguajes que necesitan tener su código en alguna función / clase / espacio de nombres).

Nota: Para simplificar, puede usar algunos caracteres reservados para las celdas no utilizadas como lo hizo Ypnypn .

Para cada ruta válida, indique claramente un lenguaje de programación en el que sea válido.

El ganador es la presentación con el mayor número de idiomas cubiertos por la lista anterior. (Alternativamente, para cada idioma que desee contar, muestre una ruta que sea válida en ese idioma, pero asegúrese de no contar ninguna ruta para dos idiomas).

En caso de empate, cuente las celdas de la cuadrícula que no están cubiertas por ninguna ruta válida. Menos células no utilizadas ganan. Si todavía hay un empate, aceptaré la respuesta con la mayoría de los votos (netos).

Script de validación

Acabo de armar rápidamente un pequeño fragmento de CJam que puede usar para validar que una cuadrícula es diagonalmente única.

  1. Vaya al intérprete en línea de CJam .
  2. Pega el siguiente código

    l:A;
    qN/W%A16**33/z{A-__|=}%:*"D""Not d"?"iagonally unique"
    
  3. En el campo de entrada, coloque su carácter reservado en la primera línea (use un carácter no utilizado si no demanda a un personaje reservado), y luego su cuadrícula en la línea 2 a 17. Por ejemplo, para la respuesta de Ypnypn:

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

Avísame si crees que tiene un error.

Martin Ender
fuente
66
-Fue BRILLIG, y los Toves slithey hizo el ciclo y gimble en el corazón del verano ... (sí, tengo que memorizar);)
Pomo
Esto suena como una de las preguntas de Calvin's Hobbies, que es un logro fantástico. Todavía no he podido entender cómo se hace.
Soham Chowdhury

Respuestas:

21

30 33 35 Idiomas

Carácter reservado: ~

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

Idiomas:

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 y CJam gracias a user23013)

Optimizador
fuente
En realidad, el código haskell imprime la cadena entre comillas. Para imprimirlo sin ellos necesitarías putStr[ln].... Además, haskell no tiene ;;. Creo que lo mezcló con Ocaml.
orgulloso Haskeller
Incluso Ocaml no tiene eso. (El intérprete en línea da error si pongo ;;). De todos modos, reemplazó a Haskell con algo más.
Optimizador
Pyth sería fácil de agregar - | p b"Jabberwocky" |funciona, por ejemplo
isaacg
@isaacg ¡Gracias! Yo también iba a mirar a Pyth. Esto me ahorra tiempo :)
Optimizer
@isaacg Por cierto, ¿dónde está ese camino?
Optimizador
15

17 idiomas

Aquí está la cuadrícula, con .el carácter reservado:

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

Y aquí están los idiomas y sus caminos (ignore las barras verticales):

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

No he podido probarlos todos, así que avíseme si algo no funciona.

grc
fuente
Creo que no puede usar la misma ruta para más de un idioma y agregarlo a su puntaje.
Optimizador
1
@Optimizer No creo que haya ninguna ruta utilizada dos veces. Es cierto que las diferencias son bastante pequeñas.
grc
1
Ugh, chico astuto! : P
Optimizador
Para PHP, después de eliminar repetitivo, `echo" foobar "` (más de 1 espacio cada vez) se imprime bien. Sin espacios en blanco.Pruébelo aquí
Optimizer el
2
Está bien eliminar repeticiones del código, que es <? aquí
Optimizer
3

18 idiomas y más

Carácter reservado: ~.

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

Idiomas:

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

y...

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

Debería haber muchos más dialectos básicos que funcionen. Pero todavía no tengo tiempo para probarlos todos.

jimmy23013
fuente
Recuerde que no puede usar la misma ruta para más de 1 idioma. Así que no todos los dialectos de BASIC encajarán.
Optimizador
2
@Optimizer Al menos aquellos dialectos que tienen números de línea y no comprueban el desbordamiento (y tienen ?para print) deberían funcionar ... Simplemente seleccione un número de línea diferente.
jimmy23013