Pilih-Kode Bahasa Anda Sendiri

17

Mari kita ambil kisi 16x16 karakter ASCII yang dapat dicetak (titik kode 0x20 hingga 0x7E). Ada 30-pilih-15 jalur dari kiri atas ke sudut kanan bawah, hanya membuat gerakan orthogonal, seperti contoh berikut:

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

Setiap jalur tersebut terdiri dari 31 karakter. Perhatikan bahwa masing-masing karakter tersebut berbeda dari 31 anti-diagonal:

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

Ini bukan contoh grid. Ini adalah visualisasi dari 31 anti-diagonal.

Kami akan menyebut grid unik secara diagonal jika tidak ada anti-diagonal yang berisi karakter yang sama dua kali. Jika kisi memiliki properti ini, tidak ada dua jalur yang akan berisi string yang sama. (Hanya untuk memperjelas, visualisasi itu sendiri pada dasarnya adalah kebalikan dari unik secara diagonal.)

Tantangan

Rancang kisi 16x16 yang unik secara diagonal, sehingga sebanyak mungkin jalur adalah kode yang valid yang mencetak Jabberwockyke STDOUT (dengan penghentian garis tambahan opsional) dalam bahasa sebanyak mungkin. Setiap kode dapat berupa program penuh, atau badan fungsi tanpa parameter tanpa pernyataan kembali (ini agar tidak menghalangi bahasa yang perlu memiliki kode mereka di beberapa fungsi boilerplate / class / namespace).

Catatan: Untuk kesederhanaan Anda dapat menggunakan beberapa karakter khusus untuk sel yang tidak digunakan seperti Ypnypn .

Untuk setiap jalur yang valid, harap sebutkan satu bahasa pemrograman yang valid.

Pemenangnya adalah kiriman dengan jumlah bahasa terbesar yang dicakup oleh daftar di atas. (Atau, untuk setiap bahasa yang ingin Anda hitung, perlihatkan satu jalur yang valid dalam bahasa itu, tetapi pastikan untuk tidak menghitung jalur apa pun untuk dua bahasa.)

Jika terjadi seri, hitung sel-sel kisi yang tidak tercakup oleh jalur yang valid. Lebih sedikit sel yang tidak digunakan menang. Jika masih ada ada seri, saya akan menerima jawabannya dengan suara terbanyak (bersih).

Skrip Validasi

Saya hanya dengan cepat mengumpulkan potongan CJam kecil yang dapat Anda gunakan untuk memvalidasi bahwa grid unik secara diagonal.

  1. Pergi ke penerjemah CJam online .
  2. Tempel kode berikut

    l:A;
    qN/W%A16**33/z{A-__|=}%:*"D""Not d"?"iagonally unique"
    
  3. Di bidang input, letakkan karakter khusus Anda di baris pertama (gunakan karakter yang tidak digunakan jika Anda tidak menuntut karakter yang dipesan), dan kemudian kotak Anda di baris 2 hingga 17. Misalnya, untuk jawaban Ypnypn:

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

Beri tahu saya jika menurut Anda ada bug.

Martin Ender
sumber
6
'Sungguh brillig, dan toves slithey melakukan pilin dan gimble di Wabe yang ... (ya, aku punya yang hafal);)
Doorknob
Ini terdengar seperti salah satu pertanyaan Hobi Calvin, yang merupakan pencapaian fantastis. Saya masih belum bisa mengerti bagaimana ini dilakukan.
Soham Chowdhury

Jawaban:

21

30 33 35 Bahasa

Karakter yang dicadangkan: ~

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

Bahasa:

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 dan CJam terima kasih kepada user23013)

Pengoptimal
sumber
Sebenarnya, kode haskell mencetak string dengan tanda kutip. Untuk mencetaknya tanpa mereka, Anda akan membutuhkannya putStr[ln].... Juga, haskell tidak punya ;;. Saya percaya Anda mencampurnya dengan Ocaml.
haskeller bangga
Bahkan Ocaml tidak memilikinya. (Penerjemah online memberikan kesalahan jika saya letakkan ;;). Omong-omong, ganti Haskell dengan sesuatu yang lain.
Pengoptimal
Pyth akan mudah untuk ditambahkan - | p b"Jabberwocky" |karya, misalnya
isaacg
@isaacg Terima kasih! Saya akan melihat ke Pyth juga. Ini menghemat waktu saya :)
Pengoptimal
@isaacg BTW, di mana jalan seperti itu?
Pengoptimal
15

17 bahasa

Inilah kisi-kisi, dengan .sebagai karakter yang dilindungi:

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

Dan ini bahasa dan jalurnya (abaikan bilah vertikal):

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

Saya belum bisa menguji semuanya, jadi beri tahu saya jika ada yang tidak berhasil.

grc
sumber
Saya pikir Anda tidak dapat menggunakan jalur yang sama untuk lebih dari satu bahasa dan menambahkannya ke skor Anda.
Pengoptimal
1
@ Opptizer Saya tidak berpikir ada jalur yang digunakan dua kali. Memang, perbedaannya cukup kecil.
grc
1
Ugh, kau lelaki licik! : P
Optimizer
Untuk PHP, setelah menghapus boilerplate, `echo" foobar "` (lebih dari 1 ruang setiap kali) mencetak dengan baik. Tanpa spasi putih. Cobalah di sini
Pengoptimal
2
Tidak apa-apa untuk menghapus boilerplate dari kode, yang mana <? sini
Pengoptimal
3

18 bahasa dan lebih banyak lagi

Karakter Reserved: ~.

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

Bahasa:

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

dan...

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

Seharusnya ada lebih banyak dialek dasar yang berfungsi. Tapi saya belum punya waktu untuk menguji semuanya.

jimmy23013
sumber
Ingatlah bahwa Anda tidak dapat menggunakan jalur yang sama untuk lebih dari 1 bahasa. Jadi tidak semua dialek BASIC cocok.
Pengoptimal
2
@ Opptizer Setidaknya dialek-dialek yang memiliki nomor baris dan tidak memeriksa overflow (dan ada ?untuk print) harus bekerja ... Cukup pilih nomor baris yang berbeda.
jimmy23013