Scegli il codice della tua lingua


17

Prendiamo una griglia di caratteri ASCII stampabili 16x16 (punti di codice da 0x20 a 0x7E). Esistono 30 percorsi-15 percorsi dall'angolo in alto a sinistra all'angolo in basso a destra, eseguendo solo mosse ortogonali, come nell'esempio seguente:

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

Ciascuno di questi percorsi è composto esattamente da 31 caratteri. Nota che ognuno di quei personaggi si trova su una delle 31 anti-diagonali diverse:

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

Questa non è una griglia di esempio. Questa è una visualizzazione delle 31 anti-diagonali.

Chiameremo una griglia diagonalmente unica se nessuna anti-diagonale contiene lo stesso carattere due volte. Se la griglia ha questa proprietà, non esistono due percorsi conterranno la stessa stringa. (Giusto per chiarire, la visualizzazione stessa è sostanzialmente l' opposto di diagonalmente unica.)

La sfida

Progetta una griglia 16x16 univoca in modo diagonale, in modo tale che il maggior numero possibile di percorsi sia un codice valido che viene stampato Jabberwockysu STDOUT (con interruzione di riga finale facoltativa) in quante più lingue possibile. Ogni codice può essere un programma completo o il corpo di una funzione senza parametri senza istruzione return (questo al fine di non scoraggiare i linguaggi che devono avere il loro codice in una funzione / classe / spazio dei nomi della piastra di caldaia).

Nota: per semplicità puoi usare alcuni caratteri riservati per celle non utilizzate come ha fatto Ypnypn .

Per ogni percorso valido, indicare chiaramente un linguaggio di programmazione in cui è valido.

Il vincitore è l'invio con il maggior numero di lingue coperte dall'elenco precedente. (In alternativa, per ogni lingua che vuoi contare, mostra un percorso valido in quella lingua, ma assicurati di non contare alcun percorso per due lingue.)

In caso di pareggio, conta le celle della griglia che non sono coperte da alcun percorso valido. Vincono meno cellule inutilizzate. Se c'è ancora un pareggio, accetterò la risposta con il maggior numero di voti (netti).

Script di convalida

Ho appena messo insieme un piccolo frammento di CJam che puoi usare per confermare che una griglia è diagonalmente unica.

  1. Vai all'interprete CJam online .
  2. Incolla il seguente codice

    l:A;
    qN/W%A16**33/z{A-__|=}%:*"D""Not d"?"iagonally unique"
    
  3. Nel campo di input, inserisci il tuo carattere riservato sulla prima riga (usa un personaggio inutilizzato se non fai causa a un personaggio riservato), quindi la griglia nella riga da 2 a 17. Ad esempio, per la risposta di Ypnypn:

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

Fammi sapere se pensi che abbia un bug.


6
'Twas brillig, and the slithey toves ha gyre and gimble in the wabe ... (sì, l'ho memorizzato);)
Maniglia della porta

Sembra una delle domande di Hobby di Calvin, che è un risultato fantastico. Non sono ancora riuscito a capire come è fatto.
Soham Chowdhury,

Risposte:


21

30 33 35 lingue

Carattere riservato: ~

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

Le lingue:

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 e CJam grazie all'utente23013)


In realtà, il codice haskell stampa la stringa tra virgolette. Per stamparlo senza di loro avresti bisogno putStr[ln].... Inoltre, haskell non ha ;;. Credo che tu l'abbia mescolato con Ocaml.
orgoglioso haskeller il

Persino Ocaml non ce l'ha. (L'interprete online dà errore se lo metto ;;). Comunque, sostituì Haskell con qualcos'altro.
Ottimizzatore

Pyth sarebbe facile da aggiungere - | p b"Jabberwocky" |funziona, ad esempio
isaacg

@isaacg Grazie! Stavo per esaminare anche Pyth. Questo mi fa risparmiare tempo :)
Ottimizzatore

@isaacg BTW, dov'è questo percorso?
Ottimizzatore

15

17 lingue

Ecco la griglia, con .come carattere riservato:

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

E qui ci sono le lingue e i loro percorsi (ignora le barre verticali):

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

Non sono stato in grado di testarli tutti, quindi fatemi sapere se qualcosa non funziona.


Penso che non puoi usare lo stesso percorso per più di una lingua e aggiungerlo al tuo punteggio.
Ottimizzatore

1
@Optimizer Non penso che ci siano percorsi usati due volte. Certo, le differenze sono piuttosto piccole.
grc,

1
Uff, ragazzo subdolo! : P
Ottimizzatore,

Per PHP, dopo aver rimosso il boilerplate, `echo" foobar "` (più di 1 spazio ogni volta) stampa bene. Senza spazi bianchi. Provalo qui
Ottimizzatore

2
Va bene rimuovere la piastra di caldaia dal codice, che è <?qui
Ottimizzatore

3

18 lingue e più

Carattere riservato: ~.

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

Le lingue:

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

e...

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

Dovrebbero esserci molti più dialetti di base che funzionano. Ma non ho ancora tempo di testarli tutti.


Ricorda che non puoi utilizzare lo stesso percorso per più di 1 lingua. Quindi non tutti i dialetti BASIC si adatteranno.
Ottimizzatore

2
@Optimizer Almeno quei dialetti che hanno numeri di riga e non controllano l'overflow (e hanno ?per print) dovrebbero funzionare ... Basta selezionare un numero di riga diverso.
jimmy23013,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.