Tambahkan bahasa ke polyglot


239

Ini adalah tantangan di mana setiap jawaban dibangun berdasarkan jawaban sebelumnya. Saya sarankan menyortir utas berdasarkan "terlama" untuk memastikan tentang urutan pembuatan posting.

Catatan : Ini telah menjadi tantangan yang bertahan lama, dan memposting jawaban baru cukup sulit. Dengan demikian, sekarang ada ruang obrolan yang tersedia untuk tantangan ini, jika Anda ingin saran tentang bagian tertentu dari jawaban potensial, punya ide untuk bahasa yang dapat ditambahkan, atau sejenisnya. Silakan mampir jika Anda memiliki sesuatu untuk ditanyakan atau dikatakan!

Tugas

The n program yang akan disampaikan harus dijalankan di th n bahasa yang berbeda; khusus, semua bahasa ditambahkan dalam program sebelumnya untuk diserahkan, ditambah satu lagi. Program harus menghasilkan 1 ketika dijalankan dalam bahasa pertama yang digunakan dalam jawaban untuk pertanyaan ini, 2 ketika dijalankan dalam bahasa kedua, dan seterusnya. Misalnya, jawaban pertama bisa mencetak 1 saat dijalankan di Python 3, dan jawaban kedua bisa menghasilkan 1 saat dijalankan di Python 3 dan 2 saat dijalankan dalam JavaScript; dalam hal ini, jawaban ketiga harus menghasilkan 1 saat dijalankan dengan Python 3, 2 saat dijalankan dalam JavaScript, dan 3 saat dijalankan dalam beberapa bahasa lain.

Aturan tambahan

  • Program Anda harus berjalan tanpa error atau crash. Peringatan (dan output stderr lainnya) dapat diterima, tetapi program harus keluar secara normal (misalnya dengan menjalankan akhir program, atau melalui perintah seperti exityang melakukan penghentian program normal).

  • Keluaran harus hanya bilangan bulat, tetapi mengikuti baris baru OK. Output stdout lain yang tidak dapat dihindari juga diperbolehkan. Contoh: nama dan versi juru bahasa di Befunge-93, spasi setelah string tercetak di Zephyr. Beberapa bahasa menyediakan dua metode pencetakan - dengan dan tanpa spasi tambahan; dalam hal ini metode tanpa spasi tambahan harus digunakan.

  • Setiap jawaban harus tidak lebih dari 20% atau 20 byte (mana yang lebih besar) lebih lama dari jawaban sebelumnya. (Ini untuk mencegah penggunaan bahasa seperti Bahasa spam di utas, dan untuk mendorong setidaknya sejumlah kecil bermain golf.)

  • Diizinkan menggunakan versi berbeda dari bahasa yang sama (meskipun jelas mereka harus mencetak angka yang berbeda, jadi Anda harus mencocokkan versi pemeriksaan ke dalam polyglot). Namun, Anda tidak boleh menggunakan fitur bahasa yang mengembalikan nomor versi bahasa. Mengulangi bahasa yang sama persis, jelas, tidak mungkin (karena program harus secara pasti mencetak salah satu dari dua angka yang berbeda).
  • Trik seperti penyalahgunaan komentar berlebihan, meskipun dilarang di beberapa kompetisi polyglot, tidak masalah di sini.
  • Anda tidak harus menggunakan jawaban sebelumnya sebagai panduan untuk menulis sendiri (Anda dapat menulis ulang seluruh program jika Anda suka, asalkan sesuai dengan spesifikasi); namun, mendasarkan jawaban Anda sebagian besar pada jawaban sebelumnya diperbolehkan dan mungkin cara termudah untuk membuat solusi.
  • Anda tidak dapat mengirim dua jawaban berturut-turut. Biarkan orang lain memposting di antaranya. Aturan ini berlaku sampai kondisi kemenangan terpenuhi.
  • Karena tantangan ini mengharuskan pesaing lain memposting dalam bahasa yang sama dengan Anda, Anda hanya dapat menggunakan bahasa dengan implementasi gratis (seolah-olah ini adalah kontes ).
  • Dalam hal suatu bahasa memiliki lebih dari satu penerjemah, Anda dapat memilih penerjemah apa pun untuk bahasa apa pun asalkan semua program yang dimaksudkan untuk berhasil dijalankan dalam bahasa tersebut melakukannya dalam penerjemah itu. (Dengan kata lain, jika suatu program bekerja di lebih dari satu juru bahasa, tulisan di masa depan dapat memilih salah satu dari penerjemah tersebut, daripada tulisan "mengunci" pilihan penerjemah tertentu untuk suatu bahasa.)
  • Tantangan ini sekarang menggunakan aturan PPCG baru tentang pilihan bahasa : Anda dapat menggunakan bahasa, atau juru bahasa, bahkan jika itu lebih baru dari pertanyaan. Namun, Anda tidak boleh menggunakan bahasa / juru bahasa yang lebih baru dari pertanyaan jika a) bahasa itu dirancang untuk tujuan polyglotting atau b) bahasa diinspirasi oleh pertanyaan ini. (Jadi bahasa pemrograman praktis yang baru dirancang hampir pasti akan baik-baik saja, seperti esolang yang tidak terkait, tetapi hal-hal seperti A Pear Tree , yang terinspirasi oleh pertanyaan ini, dilarang.) Perhatikan bahwa ini tidak mengubah validitas bahasa yang dirancang untuk poliglot yang lebih tua dari pertanyaan ini.
  • Perhatikan bahwa kondisi kemenangan (lihat di bawah) dirancang sedemikian rupa sehingga memutus rantai (yaitu tidak memungkinkan orang lain untuk menjawab setelah Anda melalui penggunaan bahasa yang sulit untuk polyglot dengan bahasa lebih lanjut) akan mendiskualifikasi Anda dari kemenangan. Tujuannya adalah untuk terus berjalan selama kami bisa, dan jika Anda ingin menang, Anda harus menghargai itu.

Format jawaban

Karena semua jawaban bergantung satu sama lain, memiliki format jawaban yang konsisten akan sangat membantu. Saya sarankan memformat jawaban Anda seperti ini (ini adalah contoh untuk tautan kedua di rantai):

2. JavaScript, 40 byte

(program goes here)

Program ini mencetak 1 dalam Python 3, dan 2 dalam JavaScript.

(jika Anda ingin menjelaskan program, teknik polyglotting, dll. letakkan di sini)

Kondisi kemenangan

Setelah tidak ada jawaban baru selama 14 hari, pemenangnya adalah siapa pun yang memposting jawaban terbaru kedua , yaitu polyglot terbesar yang terbukti tidak memutus rantai. Memperpanjang rantai setelah itu masih sangat disambut baik!

Pemenangnya adalah Peluang , lihat jawaban 194 (TemplAt) .

Daftar bahasa


3
Untuk orang-orang yang dapat melihat posting yang dihapus: posting Sandbox ada di sini .

5
Tidak perlu menyalin program sebelumnya, meskipun tentu saja Anda dapat menggunakannya sebagai panduan; mengulangi program dari awal mungkin akan memakan waktu lebih lama! Tidak perlu tautan permanen ke jawaban; pengurutan berdasarkan yang terlama akan menunjukkan semua jawaban secara berurutan.

3
@ ais523 Saya pikir yang dimaksud adalah bahwa seharusnya jawaban baru berisi coba tautan dengan kode baru?
Biru

5
Saya pikir kita memerlukan skrip yang mengambil hex dump kode dan secara otomatis menjalankannya dalam semua bahasa ...
mbomb007

3
Ini adalah printer integer Serbaguna yang dipasang sebagai jenis tantangan berbeda. (Inspirasi?) Jawaban terakhir (saat ini) akan mencetak gol 0.0127, hanya dikalahkan oleh 30 pengajuan bahasa Sp3000 ... :)
Stewie Griffin

Jawaban:


80

Catatan: Jika Anda melihat ini dulu, Anda mungkin ingin mengurutkan berdasarkan yang terlama

17. Julia (128 byte)

#v`16 "<" 6/b0\ .q@#;n4"14""
#>3N9@15o|R"12"*^
#=|
print((1/2and 9 or 13)-(0and+4)^1<<65>>62);# =#;print(17)
#gg99ddi2` |1|1+6

Ada dua ESC pada baris terakhir, satu sebelum yang pertama gdan satu setelah 2. Ini bisa bermain golf lebih banyak, tetapi segalanya menjadi berantakan tidak berkat V dan Pyth.

Mencetak 1 dalam Python 3, 2 dalam V, 3 di Minkolang, 4 di> <>, 5 di Python 2, 6 di SMBF, 7 di Japt, 8 di Retina, 9 di Perl, 10 di Befunge-93, 11 di Befunge -98, 12 dalam Fission, 13 di Ruby, 14 di Turtléd, 15 di Haystack, 16 di Pyth dan 17 di Julia .


Petunjuk:

  • Awal baris keempat adalah Python 2/3, Perl, Ruby. Akhirnya adalah Julia, terima kasih untuk #=komentar multiline (perhatikan bahwa Julia tidak punya and/or).
  • V adalah <ESC>gg99ddi2<ESC>, yang pasti golf tetapi V menjengkelkan untuk menguji Coba online! karena penerjemahnya cukup lambat.
  • Minkolang dan Haystack turun pada awalnya v. Befunge-93 dan -98 tidak, dan bergantung pada a b.
  • Retina menghitung jumlah spasi dan 1 pada baris keempat, dan V menyembunyikan di konfigurasi untuk Retina (yaitu sebelum backtick).
  • Per @ ETHproduksi petunjuk, Japt menggunakan backticks untuk menyembunyikan sebagian besar kode dalam sebuah string.
  • Fisi adalah R"12"*.
  • SMBF telah bermain golf <.di baris pertama, ditambah final 6.

24
Di mana kode orang lain hilang
Alfie Goodacre

13
159 byte ke 128 byte? Wow, itu golf yang luar biasa!
Sapi dukun

6
Bagus, 2 ^ 7 byte
tomsmeding

7
Wow ... luar biasa! Kita harus menulis penjelasan baru untuk setiap bahasa ketika semuanya dikatakan dan dilakukan ;-)
ETHproductions

4
@AlfieGoodacre "Anda tidak harus menggunakan jawaban sebelumnya sebagai panduan untuk menulis sendiri (Anda dapat menulis ulang seluruh program jika Anda suka, asalkan sesuai dengan spesifikasi)"
mbomb007

52

23. Hexagony , 186 byte

Maaf jika ini mengacaukan rencana ...

#v`16/"<"6/b.q@"(::):::  (22)S#;n4"14"
#>3N6@15o|> ^*ttt*~++~~~%
#=~nJ<R"12";
#[

print((1/2and 9 or 13)-(0and+4)^1<<65>>62)#46(89999+++++!)=#print(17)#0\32=""<0]#echo 21
#8␛dggi2␛` |1|6

␛ digunakan untuk mewakili karakter ESC literal.

Cetakan:

23 di Hexagony , 22 di Underload, 21 di Nim, 20 di Prelude, 19 di Reng (dapat diuji di sini ), 18 di Cardinal, 17 di Julia, 16 di Pyth, 15 di Haystack, 14 di Turtlèd, 13 di Turtlèd, 13 di Ruby, 12 di Fission, 11 di Befunge-98, 10 di Befunge-93, 9 di Perl, 8 di Retina, 7 di Japt , 6 di SMBF, 5 di Python 2, 4 in> <>, 3 di Minkolang, 2 di Vim / V , dan 1 dalam Python 3.

Untuk sampai ke bahasa change languageyang tidak ditautkan , klik tombol di kanan atas tautan Hexagony.


Hexagony tidak dapat dibaca (sama sekali) dalam format ini. Kita perlu melihatnya dalam bentuk heksagonal.
Perhatikan bahwa 2 karakter ESC telah diganti dengan s sehingga Anda dapat melihatnya - mereka diabaikan, sehingga tidak ada yang lain dalam program ini:

        # v 1 6 / " < " 6
       / b . q @ " ( : : )      A lot more readable, right?? No?
      : : : ( 2 2 ) S # ; n
     4 " 1 4 " # > 3 N 6 @ 1
    5 o | > ^ * t t t * ~ + +
   ~ ~ ~ % # = ~ n J < R " 1 2
  " ; # [ p r i n t ( ( 1 / 2 a
 n d 9 o r 1 3 ) - ( 0 a n d + 4
) ^ 1 < < 6 5 > > 6 2 ) # 4 6 ( 8   | Note that the 0s below can be replaced
 9 9 9 9 + + + + + ! ) = # p r i    | With anything (except "`" or " "), 
  n t ( 1 7 ) # 0 \ 3 2 = " " <     V as far as Hexagony is concerned
   0 ] # e c h o 2 1 # 8 ␛ d g
    g i 2 ␛ | 1 | 6 . . . . .    <-- the ␛ represents an esc
     . . . . . . . . . . . .         character
      . . . . . . . . . . .
       . . . . . . . . . .       A "." is a no-op
        . . . . . . . . .
                ^
                | Mirror wraps to here, going NW

Bagi mereka yang tidak terbiasa dengan Hexagony , Ada 6 IP, yang mulai dari 6 sudut. Hanya 1 yang aktif pada satu waktu, dan diaktifkan dengan menggunakan #][. Model memori tidak begitu penting untuk program ini, tetapi mungkin perlu dipahami di masa depan. Yang perlu Anda ketahui adalah 1 int disimpan dalam "memory edge" (singkatnya ME), dan '"}{ubah ME yang aktif.

\/|_>< adalah mirror yang mengontrol aliran program.

Begini Cara kerjanya:

Baris pertama dieksekusi:

#       A no-op (sets active IP to 0, the currently active one)
 v      letter chars set the ME to their ASCII value - so ME is now 118
  16    Like Labyrinth, 0-9 multiplies ME by 10 and is added - ME now 11816
    /   A mirror that sends IP going NW by wrapping to the bottom

Bagian bawah (potongan terbalik secara vertikal sehingga Anda dapat membaca dari atas ke bawah):

    .   
   .    A series of no-ops. The IP is going NW now,
  .     because of the mirror on the top.
 .
|       Another mirror. This one sends the IP NE, into the h
 h      sets the ME to 104, the ASCII value for h
  #     104 % 6 == 2, so IP 2 is now active instead of 0

Tepi kanan:

        8  IP #2 is moving SW, starting in the right corner 
       i   Sets the ME to 105
      <    Mirror. Sends the IP going due West
    ""     These change the Active ME - just know that the new edge is 0
   =       Changes the MP (more in specs) - effectively a no-op used to fill space
\32        pushes 23, and mirrors up NE to the !

Bit terakhir dari kode yang relevan:

!          Prints the current value of the ME as an int. Success!
 20(R~     Does things to the ME - irrelevant now
      @    Ends the program!

Hal yang perlu diperhatikan:

  • Hexagony menghapus semua dan `sebelum sebelum mengeksekusi, jadi setiap perubahan yang terjadi tidak akan memengaruhi Hexagony
  • Saya perlu memasukkan kode sehingga ditafsirkan sebagai segi enam 9 panjang, bukan 8 - hati-hati bermain golf di bawah 169 atau di atas 217 karakter yang relevan
  • Karena itu, ~~~dan 2 0s pada akhirnya dapat diubah tanpa membahayakan kode
  • The =""hanya bergerak ME jauh dari sebelumnya sehingga baru ME dapat dimodifikasi. Mereka dapat diganti dengan karakter lain yang melakukan hal yang sama tanpa membahayakan program hexagony ( 'misalnya,)
  • Ini secara teknis tidak sesuai dengan spesifikasi Befunge 93, karena membatasi kotak pembatas kode menjadi 80 oleh 25 chracters. Namun, Kebanyakan interptreter mengabaikan spesifikasi ini (seperti TIO), Jadi saya pribadi tidak berpikir itu masalah besar. Jika ya, jangan ragu untuk meninggalkan komentar. (Jika cukup ingin saya mengubahnya, maka saya akan mencoba)
  • Semoga tidak terlalu sulit sekarang.

1
Ini bisa dengan mudah menjadi aliran program yang paling gila jika dilakukan dengan benar. Saya hampir menyelesaikannya dengan hexagon ukuran 8 melalui beberapa metode @ ## gila, tapi 9 jauh lebih mudah setelah saya mencobanya. Juga, v1 dari TIO bekerja jauh lebih cepat, tetapi Anda tidak dapat beralih bahasa dengan mudah.
MildlyMilquetoast

Saya akan menyarankan Labyrinth berikutnya, tetapi saya ingin melakukan itu.
MildlyMilquetoast

Saya sendiri tidak cukup terampil untuk menulis hal seperti ini, tetapi sementara itu saya menunggu Cubix muncul.
Pavel

@ pavel Saya tidak terbiasa dengan bahasa itu. Saya menganggap itu 3D. Terdengar keren. Ada juga beberapa jamur yang 3D, mungkin merupakan tambahan yang menarik
MildlyMilquetoast

Saya menduga paling mudah untuk mempertahankan aliran seperti ini selama kita masih di sisi panjang ini, dan hanya menulis ulang kode Hexagony ketika kita naik ke ukuran berikutnya. Sehubungan dengan bahasa 3D, Trefunge harus cukup mudah untuk diterima, dengan asumsi bahwa tidak ada bahasa yang ada panik setelah melihat formfeeds. (Juga, Cubix diposting sebelumnya tetapi dihapus karena poster itu berpikir itu mungkin terlalu sulit; menjaga Hexagony dan Cubix sekaligus bisa sangat membingungkan ...)

52

50. bash, 1024 byte

#16  "(}23!@)" 3//v\D(@;'[af2.qc]GkGGZ'#)"14";n4
#/*` "[!PPP(22)SP(>7 7*,;68*,@;'1,@ ␉␉␉␉ q
#>␉
# >36!@␉
#`<`
#<]+<[.>-]>[
#{
#z}
#
#=<xR+++++[D>+++++++L+++<-][pPLEASE,2<-#2DO,2SUB#1<-#52PLEASE,2SUB#2<-#32DOREADOUT,2DOGIVEUPDOiiipsddsdoh@O6O4/]>+.-- -. >][
#Rx%>~~~+ +~*ttt*.x
#D>xU/-<+++L
#R+.----\).>]|
#[#[/v/v(/0l0v01k1kx0l0ix0jor0h0h1d111x0eU0bx0b0o1d0b0e0e00m1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10vx0v0l111111^_)  0046(8+9+9+9+9+=!)
###|
'\';echo 50;exit;';print((eval("1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or"'x"or'({({1})({1}[(0)])}{1}\{1})'#}#(prin 45)(bye)|/=1/24=x<$+@+-@@@@=>+<@@@=>+<?#d>+.--./
__DATA__=1#"'x"//
#.\."12"__*'
###;console.log 39
""""#//
=begin //
#ssseemeePaeueewuuweeeeeeeeeeCisajjapppp/*/
#define z sizeof'c'-1?"38":"37"
#include<stdio.h>
main(  )/*/
#()`#`\'*/{puts(z );}/*'``
<>{# }//
#}
disp 49#//
#{
1}<>//
$'main'//
#-3o4o#$$$
#< >"3"O.
=end #//
"""#"#//
#}
#|o51~nJ;#:p'34'\
#ss8␛dggi2␛ `|1|6$//''25  =#print(17)#>27.say#]#print(47)#]#echo 21#ss*///nd^_^_Z222999"26

Ingin belajar lebih banyak? Coba obrolan poligot !

Cobalah secara online!

Seperti biasa, saya mengganti tab literal dengan dan karakter ESC literal , karena keterbatasan Stack Exchange. Anda bisa mendapatkan versi program yang mudah disalin dari kotak "input" dari tautan TIO di atas.

Kehabisan

Program ini mencetak 50 di bash, 49 di Oktaf, 48 di Deadfish ~, 47 di Lily, 46 di Cubix, 45 di PicoLisp, 44 di alphuck, 43 di reticular, 42 di evil, 41 di brainf ***, 40 di Minimal -2D, 39 di CoffeeScript, 38 di C, 37 di C ++, 36 di Labyrinth, 35 di INTERCAL, 34 di Rail, 33 in Insident, 32 in Whirl, 31 di Modular SNUSP,30 di Whitespace, 29 di Trigger, 28 di Brain-Flak, 27 di Perl 6, 26 di 05AB1E, 25 di Pip, 24 di Hexa, 23 di Hexagony, 22 di Underload, 21 di Nim, 20 di Prelude, 19 di Reng , 18 di Kardinal, 17 di Julia, 16 di Pyth, 15 di Haystack, 14 di Turtlèd, 13 di Ruby, 12 di Fission, 11 di Befunge-98, 10 di Befunge-93,9 di Perl 5, 8 di Retina, 7 di Japt, 6 di SMBF, 5 di Python 2, 4 di> <>, 3 di Minkolang, 2 di V / Vim, dan 1 di Python 3.

Verifikasi

Sebagian besar bahasa diuji oleh driver tes di atas. Empat pelaku biasanya perlu pengujian secara terpisah:

  • Insiden diuji menggunakan juru bahasa resmi, offline;

  • Deadfish ~ juga diuji menggunakan penerjemah resmi, offline;

  • SNUSP modular telah diuji secara online di sini ;

  • Reng diuji online di sini .

Penjelasan

Saya melihat berbagai petunjuk untuk menambahkan bahasa. Satu kemungkinan adalah menemukan bahasa dengan #komentar baris yang masuk akal dapat ditambahkan ke baris "bahasa scripting" (yang menangani Perl, Python 2 dan 3, dan Ruby). Butuh beberapa saat untuk memikirkan bahasa yang sesuai yang bisa kompatibel dengan sintaks dengan yang sudah ada.

Ternyata jawabannya sudah lama menatap wajah saya. Jika Anda mengklik tautan TIO di atas, itu akan membuka driver tes polyglot, yang ditulis dalam bash. Jadi selama ini, saya memiliki tab bertuliskan "Bash - TIO Nexus". Anda akan berpikir itu akan menjadi petunjuk, tetapi ternyata saya melewatkannya. Sebagai bonus, bash juga merupakan bahasa scripting, jadi istilah "baris bahasa scripting" masih sesuai.

Program bash dimulai di tempat yang sama dengan bahasa scripting lainnya. Namun, ada cara yang cukup sederhana untuk memisahkannya dari mereka; dalam string yang dikutip satu kali, \adalah karakter pelarian dalam sebagian besar bahasa, tetapi tidak dalam bash. Jadi kita dapat menyembunyikan kode bash dari bahasa lain melalui '\'…';, yang merupakan pernyataan merosot (tanpa efek) dalam Perl, Python, dan Ruby, tetapi dieksekusi dalam bash. echo 50;exitadalah cara yang cukup sederhana untuk mengakhiri program bash. Hampir saja.

Masalah terbesar di sini adalah bahwa bash akan, pada saat berjalan exit, melanjutkan penguraian hingga akhir baris saat ini (walaupun itu tidak mengeksekusi kode yang dimaksud), jadi kita perlu memastikan tidak ada kesalahan sintaks pada sisa garis. Kami memiliki 'setelah exit;itu tidak (dan tidak dapat) segera dicocokkan. Kemudian pada baris, '…'digunakan untuk menyembunyikan beberapa kode Brain-Flak dari bahasa scripting, tetapi itu akan menyembunyikannya dari bash. Sebagai hasilnya, kita perlu mengubah string literal apa yang kita gunakan untuk menyembunyikan kode, dari string yang dikutip tunggal menjadi string yang dikutip ganda. or"'"melakukan trik tanpa mengganggu Perl, Python, atau Ruby (karena argumen kiri adalah benar dalam setiap kasus).

Kami sekarang memiliki penawaran ganda yang tak tertandingi yang meluas ke garis masa depan. Cukup sulit untuk menutupnya tanpa mengganggu setidaknya satu bahasa lain; apa yang sebenarnya kita lakukan adalah mengubah cara kita menyembunyikan kode dari bash dari double quote kembali menjadi single quote yang tak tertandingi dalam komentar Python / Ruby pada baris berikutnya, dan akhirnya menutup satu quote pada akhir baris setelah itu.

Pyth dan 05AB1E

Bermain-main dengan tanda kutip ganda juga mengganggu bahasa yang menggunakan string tanda kutip ganda untuk menyembunyikan kode, Pyth, dan 05AB1E. Trik utama yang kami gunakan di sini adalah untuk memastikan bahwa setiap penawaran ganda yang kami tambahkan memiliki penawaran ganda segera setelah itu untuk mengekspos kode sesedikit mungkin. (Ini menjelaskan kutipan ganda tambahan pada __DATA__baris, yang tidak perlu untuk bash.) Pyth menggunakan \sebagai karakter pelarian; hasil utama dari ini adalah bahwa itu membatasi ruang lingkup yang saya miliki untuk bermain-main dengan string dalam bahasa scripting, memaksa saya untuk menggunakan metode yang agak berbelit-belit di atas (karena saya tidak dapat dengan mudah memanfaatkan perbedaan \perilaku antara bash dan semuanya lain). Di 05AB1E, 'berperan sebagai karakter pelarian di luarstring, dan setelah itu lolos dari pimpinan "tidak akan berhasil. Jadi saya akhirnya perlu menempatkan karakter padding yang tidak berguna (default ke yang biasa x; itu membuat segalanya lebih mudah dibaca!) Di dalam "'"konstruksi yang digunakan untuk mengubah antara gaya bash quoting.

Pendahuluan

Sejauh ini bahasa yang paling sulit untuk diperbaiki di sini. Masalahnya adalah bahwa baris scripting, dengan semua tanda kurung, dipindahkan ke samping, dan dengan demikian aliran kontrol Prelude (yang sangat peduli tentang cara di mana tanda kurung secara vertikal sejajar) benar-benar hancur. Karena itu saya harus mencoba merekonstruksi sesuatu yang berfungsi.

Lebih buruk lagi, baris pertama saat ini (yang saya benar-benar tidak ingin menulis ulang) menempatkan sesuatu yang membatasi di mana tanda kurung dapat muncul. Dimulai dengan angka nol (dua di antaranya, sebenarnya!), Dan segera diikuti oleh tanda kurung buka. Itu sebuah loop di Prelude, dan loop awal pada aliran kontrol di Prelude menyebabkan sejumlah masalah yang berbeda (kebanyakan karena mereka menyebabkan lebih banyak kode untuk dijalankan, bukan lebih sedikit). Karena itu, saya sangat perlu membuka loop 0-iterasi pada beberapa baris lain untuk melewati kode itu. The mainline untuk program C ini sangat cocok, tapi kita harus sangat berhati-hati dengan mana yang cocok penutupan braket adalah; terlalu jauh ke kanan dan braket yang tidak cocok pada#R+baris akan menyebabkan masalah, terlalu jauh ke kiri dan tidak akan memberikan komentar kode yang cukup. (Ingatlah bahwa tanda kurung pembuka pada satu baris dapat cocok dengan tanda kurung tutup pada baris yang berbeda.)

Setelah selesai, kami memiliki cukup ruang untuk menempel dalam tanda kurung buka pada baris Insiden, dan kami akhirnya dapat melewati beberapa karakter pertama program dengan aman. Namun, perbedaan dalam penempatan tanda kurung akhirnya berarti bahwa beberapa kode Insiden / Pusaran benar-benar berjalan di Prelude, merusak tumpukan. Alih-alih mencoba mencegah ini, saya memindahkan beberapa nol Whirl lebih jauh ke kanan, memungkinkan mereka untuk memberi kita program Prelude yang berfungsi lagi.

Satu perubahan kecil lainnya ada di baris pertama program; tanda kurung terakhir dari baris berada pada posisi yang sangat sulit untuk dihindari. Saya menambahkan ekstra ctepat setelah kode Pyth untuk menggesernya ke kanan. (Banyak bahasa yang menguraikan titik program tersebut, sehingga diperlukan percobaan dan kesalahan yang mengejutkan untuk menemukan karakter padding yang tidak akan merusak setidaknya satu bahasa!)

Kejadian

Prelude cukup sulit dengan sendirinya, tetapi membuat Prelude dan Insiden bekerja pada saat yang sama adalah mimpi buruk. Prelude menempatkan banyak kendala pada kode yang mencegah saya dengan bebas memindahkan barang-barang di sekitar, dan dengan demikian membuat konstruksi token yang tidak disengaja lebih sulit untuk bermain golf. Sebagai contoh, Prelude hanya benar-benar membutuhkan satu 0bergerak keluar ke kanan, tetapi yang menyebabkan 00token gagal, mematahkan beberapa token yang kami inginkan sebagai bagian dari program Insiden (karena jika dua token tumpang tindih, mereka berdua ditolak, dan yang 00telah tumpang tindih tanda kami ingin selain tumpang tindih itu sendiri). Saya harus pindah keduanya untuk membuat salinan keempat dan mencegahnya bahkan dianggap sebagai token.

Yang lebih halus adalah token ;'dan ␠␠(yaitu dua karakter spasi). Masalahnya adalah bahwa kedua muncul sebelum yang kGyang sedang digunakan untuk melompat ke awal program, dan dengan demikian akan mematahkan aliran kontrol Insiden ini (selain melanggar titik pusat program).

Menghapus salinan ␠␠dengan memecahnya sepertinya tidak layak. Menghapusnya melalui tumpang tindih mungkin saja terjadi ( ␠=merupakan potensi tumpang tindih yang menjanjikan), tetapi hampir pasti kurang tepat untuk hanya menambahkan salinan keempat, yang adalah apa yang saya lakukan di sini.

Sementara itu, kita dapat menggunakan trik yang berbeda untuk ;'. Memecahnya bukanlah sesuatu yang ingin saya coba, mengingat itu digunakan dalam situasi yang cukup sensitif terhadap jarak. Namun, itu bukan yang dekat awal program (meski tampil pada baris pertama), jadi masuk akal bahwa kita bisa melompat di atasnya (sehingga menyebabkan ia tidak mempengaruhi aliran kontrol) dibanding perlu untuk tidak ada. Saya mencari token yang cocok untuk digunakan untuk lompatan yang tidak akan mengacaukan bahasa lainnya. /vmuncul sedikit lebih awal pada baris pertama, dan tidak merusak apa pun, dan dengan demikian itulah yang saya gunakan.

50 bahasa dalam 1 Kib kode

Itu ditunjukkan oleh @MistahFiggins bahwa pengiriman 1025 byte saya akan jauh lebih rapi jika 1024 byte (terutama karena bahasa kelima puluh merupakan tonggak sejarah dalam dirinya sendiri). Ini membutuhkan menemukan satu byte penghematan di suatu tempat. Dalam hal ini, saya menyimpan tiga byte di Deadfish ~, dengan biaya dua byte tambahan yang digunakan untuk membuat token Token berbaris dengan benar, dan dengan demikian membawa program ke 1024 byte dengan tepat.

Sebelumnya, formula yang digunakan kode Deadfish ~ adalah (2² + 2) ² + 10 × 1 + 2 = 48. Formula baru adalah (3²-2) ²-1, juga menghasilkan 48. Anehnya, bukan jauh lebih pendek untuk menulis di Deadfish ~, meskipun jauh lebih sederhana.

Ini juga memberi kita skor VIP 0,008192. Tidak hanya ini rekor baru, ini juga merupakan angka bulat yang bagus dalam dirinya sendiri (yang jelas merupakan konsekuensi dari memiliki angka bulat yang bagus sebagai input ke formula).


2
Maaf karena tidak memiliki TIO> _> (Hormat kami, pencipta Reng)
Conor O'Brien

@ ConorO'Brien Ping Dennis? Juga, ais523, Anda harus mencoba bermain golf satu byte;)
MildlyMilquetoast

1
Anda dapat memotong ruang di puts(z )jika Anda bertukar (dan Pdi baris 2, terima kasih Anda kelonggaran awal yang Anda buat. Bravo atas jawaban ini. # 50in1k
Peluang

1
Seperti yang terjadi, saya bermain golf byte yang berbeda. Sekarang pada 1024 tepatnya saya tidak benar-benar ingin mengubahnya :-) Mungkin jawaban nanti dapat menghemat sebagian dari penghematan yang kita miliki; ada kemungkinan lebih banyak (mis. kemungkinan Padding insiden / detokenisasi lama tergeletak di sekitar yang tidak lagi diperlukan).

6
@ ais523 setuju. Jawaban ini selalu berarti 1024 byte.
Peluang

38

37. C ++ (gcc), 776 byte

#  1"16" 2//v\(;@#/;n4"14"
#/*`3 auaaZ<>16/"<"6/b.q@")(22)S#  ␉␉␉␉ 
#yy␉;36!@
# ␉
#=␉>
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#`<`␉|
print((eval("1\x2f2")and( 9 )or(13 ))-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"*␉
""""#//
=begin␉//
#*/
#include<iostream>␉
int main()  /*/
#()"`#"\'*/{std::cout<<37;}/*'"`"
$'main'␉//
#-3o4o#$$$
<>3N.<>␉//
#xx
#x%~~~+␉+~*ttt*.x
#xx
=end   #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE)  ap
#_~nJ|#o51\   
#0␛dggi2␛`␉|1|6$//''25  >>>>>#>27.say# =#print(17)#^_^_7LEintndus({})!<>+]/*///Z222999/3!@"26

adalah tab literal, karakter ESC literal; Stack Exchange akan memotong-motong program sebaliknya. Saya sarankan untuk menyalin program dari kotak "masukan" dari tautan TIO di bawah ini, jika Anda ingin mengerjakannya.

Cobalah secara online!

Kehabisan

Program ini mencetak 37 di C ++, 36 di Labyrinth, 35 di INTERCAL, 34 di Rail, 33 di Insiden, 32 di Whirl, 31 di Modular SNUSP, 30 di Whitespace, 29 di Trigger, 28 di Brain-Flak, 27 di Perl 6 , 26 di 05AB1E, 25 di Pip, 24 di Thutu, 23 di Hexagony, 22 di Underload, 21 di Nim, 20 di Prelude, 19 di Reng, 18 di Cardinal,17 di Julia, 16 di Pyth, 15 di Haystack, 14 di Turtlèd, 13 di Ruby, 12 di Fission, 11 di Befunge-98, 10 di Befunge-93, 9 di Perl 5, 8 di Retina, 7 di Japt, 6 di SMBF, 5 di Python 2, 4 di> <>, 3 di Minkolang, 2 di V / Vim, dan 1 di Python 3.

Verifikasi

Sebagian besar bahasa diuji oleh driver tes yang ditunjukkan di atas. Anda dapat menguji Reng di sini dan SNUSP Modular di sini ; mereka menghasilkan 19 dan 31 masing-masing, sesuai kebutuhan.

Saya menambahkan format lain ke output driver tes yang lolos dari tanda kutip ganda serta membuat penggantian feed baris. Ini supaya saya bisa memberi makan single line string ke ac (gcc) program saya melilit fungsi yang dibuat oleh @feersum di sini . Semoga orang lain dapat memanfaatkannya apa adanya.

Inilah program token Insiden . Idealnya saya ingin membatasi token karena agak sulit dibaca, menunjukkan token "tengah", dan memasukkannya ke dalam driver tes. Tapi saya tidak benar-benar tahu bagaimana melakukan apa pun selain membuat berbagai program mencetak bilangan bulat berurutan, jadi ini sejauh yang saya dapat.

Saya telah mencoba untuk memecahkan masalah Insiden yang jelas, seperti token setelah token awal dan akhir dan apa pun yang tampak asing, tapi saya belum menyeimbangkan token untuk diletakkan 0odi tengah. Saya tidak begitu yakin apa sebenarnya logika untuk menentukan pusat. Saya berharap @ ais523 akan membantu di sana. String ini di dekat akhir 7LEintndus({})!<>+semua akan menjadi token jika bukan karena dimasukkannya 4 ini dalam kode. Ini semua dapat dihapus (dan diganti dengan .untuk perataan Hexagony) untuk menyesuaikan token pusat.

Saya akan memperbarui posting ini dan lagi pada hari berikutnya atau dua untuk berjalan melalui kode, (dengan asumsi Insiden dapat diverifikasi / diperbaiki tanpa melewati jumlah byte). Tapi sekarang sudah sangat terlambat, dan saya ingin menyelesaikan ini sebelum saya harus menyelesaikan masalah seperti Labirin lainnya. : P

Penjelasan

Cara kerja kode C ++.

Saya pikir kebanyakan orang cukup akrab dengan C ++, jadi saya tidak akan membahas terlalu banyak detail. Blokir komentar datang dalam bentuk /* comment */. Komentar baris datang dalam bentuk //comment. Kode aktual yang digunakan oleh C ++ untuk menghasilkan jawabannya adalah int main() {std::cout<<37;}. Dan perpustakaan yang digunakan untuk berinteraksi dengan STDOUT direferensikan oleh pernyataan ini #include<iostream>.

/ * Komentar Penyalahgunaan * /

Bagi saya, kisah C ++ kembali ke jawaban Brain-Flak saya.

Setelah akhirnya menemukan # 28, saya mulai mempelajari beberapa polyglot lain yang diposting di PPCG dan semua yang dipelajari menuntun saya ke beberapa jawaban mudah (sebagian besar masih tersedia untuk ditemukan jika ada orang lain yang cenderung). Tetapi yang lebih penting, saya sampai pada kesimpulan tentang polyglots secara umum: polyglots besar cenderung masuk ke dalam salah satu dari dua kategori besar: #penyalahgunaan /*komentar atau penyalahgunaan komentar.

Ini bukan fakta atau batasan, tetapi kerangka mental pribadi yang membimbing beberapa jawaban saya selanjutnya.

Dari sini saya beralasan bahwa jika ini menjadi polyglot terbesar di dunia, yang saya anggap sebagai saat ini, akan lebih baik jika itu dapat memanfaatkan penyalahgunaan komentar dari kedua keluarga komentar. Jadi saya mulai mencari cara menggabungkan /*bahasa komentar dan mendorong ke arah keluarga C karena keakraban pribadi.

C ++ Tes Awal

Proses pemikiran awal saya untuk ini adalah menggunakan C # sebagian besar karena keakraban saya dan rintangan pertama untuk C # adalah membuat polyglot menjadi keadaan di mana ia dapat menerima garis yang tidak dimulai dengan #tanpa diperlakukan sebagai kode oleh bahasa scripting . Jawaban Rail, bersama dengan beberapa byte menggembungkan jawaban yang mengarah ke sana, memecahkan bagian ini.

Selanjutnya muncul masalah bagaimana memulai /*blok komentar pertama . Saya tahu baris harus memulai baris dengan #agar tetap tidak terlihat oleh Perl, Ruby dan Python, tetapi apa pun yang datang sebelum /*akan dibaca oleh C #. Saya mencoba #regiontag C # pada awalnya, tetapi ternyata terlalu bergerigi untuk bahasa 2D. Masukkan C ++.

C ++ memiliki beberapa arahan preprocessor yang semuanya dimulai dengan #, yang memberikan banyak pilihan untuk dilalui bahasa 2D. Tapi ternyata mereka semua tidak kompatibel dengan setidaknya satu bahasa, dan berada dalam ruang kode C ++, saya punya solusi terbatas. Karena frustrasi dan putus asa, saya menemukan fakta bahwa C ++ hanya akan menerima satu saja #sebelum blok komentar. Oke, terserahlah, itu bisa diterapkan. Jadi saya bergerak maju dengan anggapan yang #/*bisa berfungsi sebagai tiga karakter pertama dalam polyglot.

Bagian kedua dari verifikasi dasar adalah untuk memastikan bahwa pernyataan cetak yang sebenarnya dapat hidup bahagia dengan kode-kode lainnya. Saya tahu dari jawaban Brain-Flak bahwa Japt tidak suka un-melarikan diri {dan itu diperlukan untuk C ++ untuk mengatakan int main() {std::cout<<37;}dan C ++ tidak akan membiarkan karakter melarikan diri Japt di tengah-tengah kodenya. Kali ini saya cukup beruntung menemukan bahwa jika saya keluar dari string literal Japt hanya untuk pernyataan ini, Japt masih akan dengan senang hati menghasilkan hasil yang sama.

Sementara itu, Brain-Flak tidak menyukai {}keduanya, tetapi saya sekali lagi beruntung menemukan bahwa C ++ baik-baik saja dengan #antara int main()dan {std::cout<<37;}pernyataannya, memungkinkan kurung kurawal untuk dikomentari di luar perspektif Brain-Flak.

Jadi, dengan masalah utama C ++ yang terbukti secara teori dapat dipecahkan, saya memulai proses yang sulit untuk menyelesaikan semua kesalahan yang saya perkenalkan.

Lansekap 2D

Bagian tersulit dari jawaban ini sejauh ini adalah konfigurasi ulang dari dua baris teratas polyglot. Dan masalah yang paling signifikan adalah *. Underload tidak akan mengizinkan *sebelum (. Ini menganggap ini sebagai operasi matematika pada tumpukan kosong, yang dirasa kesalahan. Jadi polyglot diperlukan (sebelum /*tetapi C ++ tidak bisa membiarkan ini. Jadi solusinya adalah memberi kita komentar garis C ++ //pada baris pertama untuk menyembunyikan (dan kemudian memulai baris kedua dengan a #/*.

Selanjutnya, Befunge benar-benar tidak menyukai gagasan /tanpa sesuatu yang dibagi tetapi setelah mempelajari jawaban Begunge yang ada dari 16/"<"6/b.q@saya tersandung pada ide nomor dan string hancur bersama di depan //. Ini bekerja dan saya tidak tahu mengapa C ++ ok dengan ini tetapi menerima # 1"16" 2sebagai pernyataan pembukaan. Saya tidak akan mempertanyakannya, tetapi saya tahu bahwa ruang tersebut diperlukan agar bisa berfungsi.

Baris Satu

Japt ternyata agak sensitif terhadap ruang dan tidak benar-benar ingin masuk ke dalam string berbasis backtick di baris atas, sehingga backtick dan Pip dipindahkan ke baris kedua, memaksa banyak senam linguistik di baris 1.

  • Pip tidak suka sebagian besar baris 1, jadi spasi kedua ditempatkan setelah yang pertama #untuk menunjukkan komentar.
  • Untuk (Underload harus keluar dari Japt dengan pendahulunya \.
  • #adalah terminator lompat di Turtlèd sehingga diperlukan, tetapi Pyth menganggap ini sebagai loop pengakhiran kesalahan, sehingga Pyth membutuhkan pembagian dengan nol / setelah#
  • Saya tidak yakin apa yang ada @di baris pertama lakukan lagi, tetapi Pyth dan Japt tampaknya lebih suka kehadirannya daripada tidak, meskipun @bukan karakter yang bermakna menurut dokumentasi Pyth.
  • Dan sepertinya yang pertama ;dapat dihapus pada titik ini tanpa konsekuensi, jadi saya tidak yakin apa yang sedang dipecahkan di sana, meskipun saya curiga itu terkait Pyth. Tetapi sepertinya solusi masa depan dapat menghemat satu byte dengan menghilangkan yang itu.
  • <> <dan Turtlèd keduanya pada dasarnya bekerja sama seperti sebelumnya dengan <> <merefleksikan yang pertama #dan membungkus ke akhir baris satu. Dan Turtlèd melompat dengan #seperti yang saya sebutkan dan berakhir dengan "14"string yang dicetaknya .

Routing 2D

Dengan masalah ini diselesaikan, fase selanjutnya adalah merutekan bahasa 2D. Sebelumnya inisial vdiabaikan oleh Befunges karena sebelumnya #, tetapi mengirim Haystack dan Minkolang ke bawah. Sekarang, ruang awal mencoba mengirim Minkolang sepanjang dimensi ke-3, yang dokumentasinya disebut sebagai dimensi waktu.

Mengesampingkan dimensi 3 Minolang: bagi saya itu adalah istilah yang keliru untuk menyebut ini sebagai dimensi waktu, itu tampaknya lebih spasial daripada temporal bagi saya. Aku tidak benar-benar mendapatkan itu sampai aku menemukan ini link yang menggambarkan konsep, dan tampaknya lebih seperti beberapa lapisan papan catur 3D. Keyakinan saya adalah begini cara bahasa 3D umumnya beroperasi. Tetapi karena ini adalah konsep baru bagi saya, saya pikir saya akan membuang info ini untuk orang lain.

Jadi beberapa lapisan Minkolang ini yang dipisahkan oleh garis berakhir di $$$mana saya melemparkan ke akhir kode Rail di sini: #-3o4o#$$$. Sekarang, Minkolang menyentuh spasi dan jatuh ke urutan pertama >masuk <>3N.<> ␉//dan melanjutkan ke keluaran kanan 3. #>tidak dapat diizinkan untuk memulai baris ini karena akan mencoba untuk mengakhiri blok komentar Perl6, jadi <digunakan alih-alih #menyeimbangkan SMBF dan Otak -Tembakan penangkis udara. Namun, ini adalah prosedur swap Brain-Flak stack, jadi set kedua <>digunakan setelah Minkolang Terminates untuk bertukar kembali ke jawaban yang benar Brain-Flak.

Labrynth juga menabrak ruang tetapi menyebabkan Labrynth bergerak ke bawah di kolom 1. Kemudian turun ke garis 2 di mana ia bergerak ke bawah ke 3dinding lain, menyebabkannya berbelok ke selatan lagi dan mengenai ;yang menyebabkan 3 untuk muncul. . Kemudian program berlanjut ke kanan tempat 36 disimpan dan dicetak, sebelum akhirnya menemukan jalan @keluar. Jalur ini lebih panjang dari yang seharusnya, tetapi saya menemukan bahwa Prelude akan menampilkan nul byte sebelum itu normal 20 keluaran jika !itu lebih jauh ke kiri daripada sekarang, terlepas dari garis yang muncul. Jadi saya membuatnya lebih benar, karena saya punya ruang untuk melakukannya.

Selanjutnya, perutean Haystack diubah karena /sekarang hadir sebelum vjalur 1 dan mencerminkan jalurnya seperti Reng. Untungnya, Reng hidup bersama secara agak damai. Satu halangan adalah bahwa jarum Haystack |adalah reflektor di Reng, jadi Reng menggunakan Befunge like jump ( #) di atas jarum untuk menyimpulkan Reng dengan benar.

Befunges melanjutkan sepanjang baris 1 hingga vdan diarahkan ke bawah lalu ke kanan di baris kedua untuk menyimpulkan dengan kode yang sama yang digunakan sebelumnya. Perasaan saya adalah bahwa bagian ini dapat diturunkan sedikit sekarang karena lebih sedikit bahasa yang mencoba untuk melintasi kode secara bermakna, tetapi saya tidak membutuhkan dinding lagi untuk membenturkan kepala saya, jadi saya membiarkannya apa adanya.

Akhirnya, titik awal Cardinal adalah %yang tidak perlu digabungkan ke dalam dua baris teratas yang sudah padat. Jadi saya memindahkannya ke string Python. Banyak jalur kode juga sekarang dibatasi oleh x's, yang mengakhiri pergerakan penunjuknya.

Baris 2 & 3

Satu-satunya perubahan signifikan di sini adalah bahwa semua pemain :golf karena satu dan lain alasan. Mungkin (kebutuhan Prelude atau mungkin itu masalah jumlah byte sederhana - mungkin keduanya. Hal lain adalah bahwa kode lompatan pemicu itu dipindahkan dan diganti namanya menjadi auaaZ. Saya punya ruang untuk diisi untuk memenuhi jalur kode Befunge dan ini sepertinya yang terbaik. Juga bagian <ini adalah untuk menyeimbangkan pengikut SMBF >. Akhirnya, satu-satunya yang dekat dengan akhir baris kedua adalah mempertahankan string 05AB1E. Juga, yypada baris 3 hanya karakter pengisi untuk Labyrinth.

The Big String Esolangs

Dengan dua baris teratas diselesaikan, sudah waktunya untuk mulai menggali esolang yang lebih lengkap, dan Pip ternyata memiliki masalah. Jika Anda ingat kami berurusan dengan kurung kurawal masuk {std::cout<<37;}dengan keluar dari string Japt untuk membiarkan Japt memperlakukan ini sebagai kode. Yah, Pip menggunakan sintaksis string yang sama dan tidak suka baris ini sebagai kode dan Pip memiliki opsi pernyataan string yang sangat mirip dengan Japt. Keduanya menggunakan satu 'untuk mendeklarasikan string satu karakter, keduanya menggunakan deklarasi escape yang sama \dan keduanya akan menerima "sebagai pengidentifikasi string. Jadi sulit untuk membuat Pip percaya ini adalah string tanpa membuat Japt percaya sama.

Ternyata Japt memang memiliki satu perbedaan yang dapat dieksploitasi - #mengambil nilai ascii dari karakter berikutnya. Jadi, #"`akan menghentikan string Japt / pip, kemudian memberitahu Japt untuk mengambil nilai asci ", sambil memberi tahu Pip untuk memulai string baru. The "mungkin bisa menjadi backtick sebaliknya, dan mungkin akan lebih baik, tapi garis saya berpikir adalah menggunakan pengenal string yang berbeda di dalam sebagai titik lain dari manipulasi string. Jadi, inilah tempat lain di mana Anda bisa menghemat beberapa byte di jalan.

Selanjutnya, saya harus memulai string Japt setelah kurung kurawal sambil membiarkan Pip tetap dalam string. Saya melakukan ini dengan '"`itu kutipan tunggal, kutipan ganda, dan backtick. Untuk Japt 'tidak dalam string dan karenanya indikator untuk mengambil karakter berikutnya sebagai string char tunggal. Pip melihat 'bagian dari string dan mengakhiri string dengan ". Dan akhirnya, `ditunjukkan kepada Pip dan Japt bahwa string lain mulai yang berlanjut di seluruh polyglot hingga baris terakhir di mana kedua bahasa selesai dengan gembira.

Sekarang, baik Japt dan Pip bekerja pada saat ini, tetapi 05AB1E gagal karena penggunaan "beberapa kesalahan yang menyebabkan paparan kode. Untungnya yang satu ini cukup mudah untuk diselesaikan dengan meletakkan satu set "seluruh masalah, meninggalkan set manipulasi string sebagai "`#"\\'*/{std::cout<<37;}/*'"`".

Akhirnya, dengan garis yang sekarang tampak seperti ini, int main() #/*"`#"\'*/{std::cout<<37;}/*'"`"yang Underload punya masalah dengannya. Berturut-turut *, adalah kesalahan sintaks lain jadi saya melemparkan ()di tengah-tengah *untuk menenangkannya.

Esolang yang Rapuh

Rintangan besar sekarang adalah Ruang Putih. Saya tidak akan membahas banyak detail di sini karena sebagian besar solusi Whitespace dibangun ke dalam penjelasan yang telah diberikan, dan saya hanya membahas contoh-contoh di mana whitespace memaksa beberapa keputusan. Saya melihat Anda Labyrinth. Perubahan besar, adalah bahwa kode aktual untuk menampilkan jawaban Whitespace ada pada baris 2-4 bukannya 1-3. Ini sebagian besar disebabkan oleh paparan kode Japt di baris 1.

Thutu awalnya punya masalah dengan apa yang telah baris ini: int main() #/*()"`#"\'*/{std::cout<<37;}/*'"`". Jadi, saya melemparkan linefeed tepat sebelum yang pertama #untuk menyembunyikan semua masalah di balik indikator komentar dan kemudian memuntahkan sekelompok trailing /di mana pun yang terkena kode.

Pada titik ini saya menyelaraskan Hexagony dan menemukan masalah baru. Kode di awal, yang mulai hidup seperti yang # 1"16" 1dibuat +di /+23!@tidak lagi menghapus tumpukan. Jadi, saya baru saja menghapus +is dan menemukannya sekarang menghasilkan 123. Ini cukup mudah untuk memperbaikinya dengan mengubah gambit pembuka ke # 1"16" 2dan golf bagian Hexagony ke /3!@.

Whirl memiliki beberapa perubahan, tetapi sebagian besar masalah memastikan jumlah yang tepat dari 1 terkemuka muncul sebelum garis Whirl-Insident. Insiden memiliki satu token yang sangat sulit. Saya punya persis 3 salinan /*dan */.

Saya awalnya ingin hanya membuang *//*tempat lama dalam kode untuk membuat salinan ke-4 dari masing-masing, tetapi Underload melihat berturut-turut *lagi, yang merupakan jalan. Pada akhirnya saya melempar a /pada akhir baris ini int main() /*untuk membuatnya berakhir /*/, berpikir bahwa saya akan membuat token tumpang tindih, tetapi saya hanya berhasil membuat 4 salinan dari salah satu token. Benar, benar. Begitulah cara kerjanya. Oh well, saya hanya akan melempar serupa /di final */untuk membuat 4 di sana. Setelah ini, saya mengganti sekelompok no-op hexagony dengan salinan ke-4 dari beberapa token kejadian di string ini di baris terakhir 7LEintndus({})!<>+.

Kesimpulan

Ok, itu saja detail yang saya miliki untuk refactor besar ini. Saya berjanji tidak akan banyak menulis tentang waktu berikutnya. Saya sebenarnya tidak tahu apakah C ++ adalah pilihan yang baik atau buruk untuk polyglot ini, tetapi saya rasa itu membuka beberapa opsi. Semoga ini mengarah pada hal-hal baik.

Selamat coding.


2
Sepertinya g++memerlukan .cpp, jadi saya menambahkan itu ke bagian ekstensi file tertentu. Kemudian hanya harus digunakan run-wrapper.shuntuk menanganinya. Saya akan mengeditnya.
SnoringFrog

1
Saya ingin menambahkan brainfuck simbolik ke ini karena ini merupakan tambahan yang mudah, tetapi karakter unicode crash python2 - _ -
SnoringFrog

1
@SnoringFrog Saya merasakan hal yang sama tentang emoji
Kesempatan

1
Selain itu, **bukan kesalahan sintaksis dalam Underload; hanya mengkonsumsi banyak tumpukan, yang saya asumsikan tidak tersedia pada saat itu (kemungkinan karena Anda bermain golf titik dua). Anda dapat menambah tumpukan dengan kelompok atau tanda kurung sebelum atau di antara mereka, atau kadang-kadang menyembunyikan kode dari Underload dengan mengurungnya.

2
@ ais523 Pada hari-hari awal C, untuk menghemat waktu jika tidak diperlukan, preprocessor tidak berjalan kecuali baris pertama dimulai dengan #. Tetapi jika Anda tidak ingin baris pertama Anda menjadi pernyataan preprocessor, maka Anda perlu cara agar baris pertama dimulai dengan # tanpa membuatnya benar-benar melakukan apa-apa, sehingga Anda memiliki arahan nol. Saya sangat curiga kompatibilitas ke belakang dengan kode yang digunakan ini adalah alasan untuk dimasukkan dalam standar.
Muzer

34

3. Minkolang v0.15 (26 bytes)

#>>>>>>>>v
print(1)#>3N.i2

Program ini mencetak 1 dalam Python 3, 2 di Vim, dan 3 di Minkolang v0.15

Saya harap saya tidak mengacaukan segalanya dengan memperkenalkan bahasa 2d

Cobalah online!

Penjelasan

#                     stops program from moving through time (really does nothing)
 >>>>>>>>             I can't use a space because then the program will move through time
         v            go down
         >            go right
          3N.         Outputs 3 and end program
                      Anything afterward is ignored since program has ended

Vim entah bagaimana mengabaikan Minkolang, jadi itu bagus

Dan benar-benar tidak ada masalah dengan Python karena mengabaikan komentar #

Lanjut...

Untuk bahasa berikutnya, saya sarankan sesuatu seperti> <> karena #bertindak sebagai reflektor (sehingga arah akan berubah ke kiri dan akan membungkus ke semua jalan di kanan) sehingga Anda dapat menambahkan kode yang dapat diabaikan oleh bahasa lain


16
"Bergerak sepanjang waktu", apa?
TuxCrafting

5
@ TùxCräftîñg Minkolang memiliki 3 dimensi (2d = normal, yang ketiga adalah waktu). TBH, saya tidak mengerti, itu hanya menyatakan bahwa dalam penjelasan di tautan TIO
Sapi dukun

@ mbomb007 Apa sebenarnya yang Anda maksud?
Sapi dukun

1
@ TùxCräftîñg Saya rasa saya tidak bisa melakukan itu
dkudriavtsev

1
@ wat Hm ini membuat saya terlalu lama untuk mengerti
TuxCrafting

34

5. Python 2 (35 byte)

#3N.;n4
print('1'if 1/2else'5')
#i2

Program ini mencetak 1 di Python 3, 2 di Vim, 3 di Minkolang v0.15, 4 di> <> dan 5 di Python 2.

Coba Online beta!

Dalam Python 2, 1/2 adalah 0, yang merupakan nilai falsy, yang membuat Python print 5. Dalam Python 3, 1/2 adalah 0.5, yang merupakan nilai kebenaran, yang membuat Python print 1.


1
Saya dapat mengkonfirmasinya berfungsi di Minkolang
Sapi dukun

1
print('1'if 1/2else'5')istirahat pada sistem saya tanpa spasi antara 1/2 dan yang lain
Tasos Papastylianou

Ya, ini berfungsi dengan kedua versi di TIO.
betseg

28

4.> <> (29 byte)

#>>>>>>>>v;n4
print(1)#>3N.i2

Program ini mencetak 1 dengan Python 3, 2 di Vim, 3 di Minkolang v0.15 dan 4 di> <>

Cobalah secara Online!

Kode berlari

#             - change direction to left
            4 - add 4 to stack
           n  - print as a number
          ;   - end the program

Namun bahasa 2D lainnya.

Tidak berpengaruh pada Minkolang karena menambahkan karakter setelah perubahan arah, diabaikan oleh Vim karena alasan tertentu. #adalah komentar dalam Python jadi tidak ada perubahan mereka juga.


28

28. Brain-Flak , 280 byte

#v`16/"<"6/b.q@"(::):::   (22)S#;n4"14"
#>3N6@15o|> ^*ttt*~++~~~%
#=~nJ<R"12";
#[
#`<`|
print((eval("1\x2f2")and (9) or (13))-(0and 4)^(1)<<(65)>>62)or'(\{(\{})(\{}\/^23!@[()])}\{})(\{}\{})'#@46(8+9+9+9+9+=!)=#print(17)#]#echo 21#|/=1/24=x=90/
#8␛dggi2␛` |1|6$//''25  #>say 27#"26

␛ mewakili karakter ESC literal, seperti biasa.

Program ini mencetak 28 di Brain-Flak , 27 di Perl 6 , 26 di 05AB1E , 25 di Pip , 24 di Thutu , 23 di Hexagony , 22 di Underload , 21 di Nim , 20 di Prelude , 19 di Reng (diuji di sini ), 18 di Cardinal , 17 di Julia , 16 di Pyth , 15 di Haystack , 14 di Turtlèd ,13 di Ruby , 12 di Fission , 11 di Befunge-98 , 10 di Befunge-93 , 9 di Perl 5 , 8 di Retina , 7 di Japt , 6 di SMBF , 5 di Python 2 , 4 in> <> , 3 in Minkolang , 2 di Vim / V , 1 di Python 3

Pertama, saya ingin mengatakan betapa istimewanya untuk dapat berkontribusi pada tantangan ini. Saya hanya mendengar kode golf beberapa minggu yang lalu dan saya benar-benar terpikat sejak itu. Hal pertama yang saya lakukan ketika saya menemukan tantangan ini adalah mencoba menjalankan kode seperti dalam berbagai bahasa hanya untuk melihat apakah saya dapat menemukan apa pun yang dapat saya kerjakan. Ini kembali ketika kami berada di seperti # 6. Sejujurnya saya menganggap tantangan ini tidak mungkin, tetapi inilah kita (# 28 Wow!). Apa yang saya temukan pada saat itu adalah Brain-Flak mengeluarkan nilai 2. Jadi saya mulai mempelajarinya.

Brain-Flak ternyata cukup hebat untuk tantangan semacam ini karena cukup mudah dipelajari dan mengabaikan hampir semua karakter kecuali (){}[]<>. #juga terjadi komentar apa pun setelah itu pada baris yang sama, jadi satu-satunya bagian dari pengiriman terakhir yang pernah dipertimbangkan untuk Brain-Flak adalah print((eval("1\x2f2")and 9 or 13)-(0and 4)^1<<65>>62)yang kemudian dipasangkan ((())()<<>>). Jadi kemudian rencana itu menjadi menambahkan tanda kurung berlebihan untuk apa yang saya anggap sebagai kode python.

Saya memodifikasi bit python menjadi parse di Brain-Flak ((() () ())()()<<()>>)yang setara dengan 2 tumpukan yang pertama adalah 5 dan yang kedua adalah 3. Setelah itu saya mengkuadratkan 5 dengan ({({})({}[()])}{})dan menambahkan hasilnya ke 3 dengan ({}{}). Kuadrat dan penambahan ini terjadi dalam string dari perspektif Python. Saya tidak dapat mengklaim memahami alasan Python di sini, tetapi saya cukup yakin bahwa string ini tidak dievaluasi oleh bahasa lain dengan cara yang bermakna, dengan hanya beberapa pengecualian.

Ternyata, mengartikan kurung kurawal di dalam string sebagai berisi kode, tetapi ini cukup mudah untuk melarikan diri dengan \sebelum masing-masing {dalam string ini. Tapi ini menggembungkan jumlah byte. Begitulah hidup.

Prelude sangat pemaaf dengan semua tanda kurung saya. Komentar sebelumnya menunjukkan bahwa Prelude akan cocok dengan Pparenthes yang selaras secara vertikal dan kebetulan saya hanya membuat satu. Manis! Di (baris atas berbaris dengan dan (9di garis besar. Jadi saya harus menambahkan ruang tambahan sebelum (di baris paling atas. Asumsi saya di sini adalah bahwa spasi ganda adalah indikator komentar untuk sesuatu, jadi menambahkan ruang tambahan tampak sepele, dan itu berhasil. Saya harus menunjukkan bahwa saya mencoba menambahkan ruang tambahan sebagai (9)gantinya, tetapi Kardinal tidak bekerja sama.

05AB1E tidak suka upaya pertama saya di string Python yang dienkapsulasi dalam tanda kutip ganda, tetapi semua orang tampaknya setuju untuk menggunakan tanda kutip tunggal. Bukan masalah besar di sana.

Hexagony adalah satu-satunya bahasa yang tersisa pada saat ini, dan saya jelas melewati ambang ukuran hex berikutnya, jadi sudah waktunya untuk menjadi kotor. Ini /^23!@adalah kode Hexagony dan saya sangat bersemangat tentang hal itu, karena saya pikir itu akan membuat penambahan di masa depan lebih mudah. Bagian kecil ini pada dasarnya dapat dipindahkan di mana saja di string python tanpa merusak kode apa pun. Ini adalah string penuh supaya kita semua berada di halaman yang sama '(\{(\{})(\{}\/^23!@[()])}\{})(\{}\{})'. Di /sini mengatur jalur Hexagony dari SE -> NW ke W-> E ke bawah string ini, yang kita punya banyak waktu luang. (Sebelumnya \adalah untuk melarikan diri/untuk thutu BTW). Ide saya di sini adalah jika Anda membuat perubahan, kemungkinan besar Anda akan berakhir melalui string ini di beberapa titik dan Anda dapat menggeser bagian Hexagony di dalam string untuk menangkap jalur kode dan mengirimkannya ke kesimpulan yang tepat. Hanya berhati-hati untuk tidak datang antara Japt \dan {. Jika Anda memiliki masalah dengan ini, di @sebelah kanan string hanya tersisa dari solusi Hexagony lain, dan dapat dihapus tanpa konsekuensi ke bahasa lain. Dan tentu saja jika Anda kebetulan untuk menangkap kode jalan Hexagony ini akan arah yang berlawanan, tentunya Anda bisa menggunakan @!32^\bukan /^23!@. Juga, Anda mungkin memperhatikan bahwa solusi saya menghapus===2dari kode untuk menjaga hal-hal di bawah batas byte. Seseorang mengatakan di sini bahwa ini untuk penyelarasan Hexagony dan saya tidak membutuhkannya lagi.

Akhirnya, di sini ada sedikit kode yang saya temukan ketika menjelajahi codegolf yang mengubah satu baris teks menjadi segi enam yang dapat dibaca Hexagony sehingga Anda dapat melakukan debug. Saya yakin banyak orang tahu tentang ini, tetapi saya belum melihatnya diposting di sini, jadi mungkin membantu orang lain juga. Peringatan yang adil, Anda harus mengubah input untuk menghapus backtick dan carriage return serta menukar literal escape dengan sesuatu yang membutuhkan jumlah ruang normal untuk mendapatkan kode untuk mengatur berbagai hal dalam Hexagon yang cantik.

PS Ketika saya sedang menulis ini, saya menyadari saya memiliki kesalahan. Saya percaya saya sedang membersihkan sisi memori Hexagony untuk dengan ^, tetapi tampaknya saya dapat menggantinya dengan no-op tanpa konsekuensi. Itu ^mungkin harus +jika Anda mencoba memanipulasi bagian ini. Saya tampaknya melewati +sebelum ini, tetapi polyglotters masa depan mungkin tidak seberuntung itu.

Semoga berhasil!


Saya sedang menunggu rundown dan penjelasan sebelum pemungutan suara, tetapi rundown terlihat bagus, jadi saya akan memilih sambil menunggu penjelasan :-). Saya berasumsi bahwa semua backslash tambahan adalah untuk menghindari kesalahan sintaksis dalam Thutu? Juga, pendekatan yang menarik untuk tempat Anda menambahkan kode Anda, yang saya duga ada hubungannya dengan Hexagony. Akan menyenangkan melihat penjelasan lengkapnya. (Juga, selamat datang di PPCG!)

Dan sekarang saya melihat penjelasannya; Saya senang membacanya. "Kode Python" sebenarnya digunakan oleh beberapa bahasa scripting (Python, Perl 5, Ruby), tetapi mereka semua menginterpretasikan anddan ordengan cara yang sama, jadi metode Anda mengomentari kode dalam bahasa scripting tetapi tidak Brain-Flak bekerja dengan baik di semua dari mereka.

1
Terima kasih @ ais523. Anda menyebutkan penempatan kode saya. Jadi, saya tahu saya harus menempatkan operator brain-flak di suatu tempat yang terlihat oleh bahasa scripting dan asumsi awal saya yang salah adalah bahwa itu akan lebih mudah pada baris baru. Ini tidak berfungsi untuk Retina dan saya tidak ingin mengatasinya dan masalah bahasa 2D yang saya buat mencoba untuk memperbaiki Retina, jika memungkinkan. Saya beruntung tersandung ke dalam penempatan saat ini.
Peluang

2
Jawaban yang fantastis, dan penjelasan yang sangat menyeluruh! Saya sangat senang mendengar bahwa Anda menikmati kritik. : D
DJMcMayhem

25

38. C, 804 byte

#  1"16" 3//v\(@#/;n4"14"
#/*`3 auaaZ<>16/"<"6/b.q@")(22)S#  ␉␉␉␉ 
#yy␉;36!@
# ␉
#=␉>
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#`<`␉|
print((eval("1\x2f2")and( 9 )or(13 ))-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"*␉
""""#//
=begin␉//
#
#*/␉
#define␉z  sizeof 'c'-1?"38":"37"
#include␉<stdio.h>
int main()  /*/
#()`#`\'*/{puts(z);;}/*'``
$'main'␉//
#-3o4o#$$$
<>3N.<>␉//
#xx
#x%~~~+␉+~*ttt*.x
#xx
=end   #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE)  ap
#_~nJ|#o51\   
#0␛dggi2␛`␉|1|6$//''25  >>>#>27.say# =#print(17)#^_^_7LEintndus({})!<>+]/*///Z222999/(3!@)"26

adalah tab literal, karakter ESC literal; Stack Exchange akan memotong-motong program sebaliknya. Saya sarankan untuk menyalin program dari kotak "masukan" dari tautan TIO di bawah ini, jika Anda ingin mengerjakannya.

Cobalah secara online!

Kehabisan

Program ini mencetak 38 dalam C, 37 dalam C ++, 36 di Labyrinth, 35 di INTERCAL, 34 di Rail, 33 di Insiden, 32 di Whirl, 31 di SNUSP Modular, 30 di Whitespace, 29 di Trigger, 28 di Brain-Flak, 27 di Perl 6, 26 di 05AB1E, 25 di Pip, 24 di Thutu, 23 di Hexagony, 22 di Underload, 21 di Nim, 20 di Prelude, 19 di Reng, 18di Cardinal, 17 di Julia, 16 di Pyth, 15 di Haystack, 14 di Turtlèd, 13 di Ruby, 12 di Fission, 11 di Befunge-98, 10 di Befunge-93, 9 di Perl 5, 8 di Retina, 7 di Japt, 6 di SMBF, 5 di Python 2, 4 di> <>, 3 di Minkolang, 2 di V / Vim, dan 1 di Python 3.

Verifikasi

Sebagian besar bahasa diuji oleh driver tes yang ditunjukkan di atas. Anda dapat menguji Reng di sini dan SNUSP Modular di sini ; mereka menghasilkan 19 dan 31 masing-masing, sesuai kebutuhan.

Ini adalah versi Tokeniser Insiden saya yang sedikit dimodifikasi , dirancang untuk sedikit kurang golf tetapi sedikit lebih bermanfaat.

Penjelasan

Saya selalu suka membuat polyglot kecil tetapi tidak pernah sebesar ini; Saya pikir saya mungkin harus mencobanya!

Setelah jawaban C ++ yang luar biasa dari @ Chance, C tampaknya merupakan pilihan logis berikutnya, dan memberikan (dibandingkan dengan beberapa jawaban sebelumnya) relatif mudah untuk menambahkannya, saya memutuskan untuk melakukannya ketika saya memiliki kesempatan!

Saya menggunakan trik yang sangat terkenal untuk membedakan antara C dan C ++; ukuran konstanta karakter adalah 1 byte dalam C ++ tetapi ukuran int (dijamin setidaknya 16 bit) dalam C. Kode ini harus sangat portabel (kecuali mungkin untuk sistem yang menggunakan byte dengan bit yang cukup untuk memenuhi int) kecuali Saya telah membuat kesalahan bodoh.

Saya pertama kali mencoba melakukan printfsemuanya dengan sejajar, tetapi beberapa kurung tampaknya menyebabkan masalah untuk Japt, jadi saya membuat garis lebih sederhana, yang tampaknya memperbaikinya.

Selanjutnya, Cardinal tidak suka, saya kira karena %di printf, jadi saya harus menyelesaikannya dengan beralih ke memanipulasi string.

Usaha saya berikutnya, mencoba untuk menetapkan string kemudian mengubah bergantung byte kedua pada perilaku C, berakhir terlalu lama dan akan mendorong Hexagony ke ukuran berikutnya; Saya ingin menghindari mengulanginya dengan menyimpannya dalam karakter tambahan yang harus saya mainkan! Saya membutuhkan setiap byte yang bisa saya dapatkan untuk ini, jadi saya mengimplementasikan perubahan byte-saving yang disarankan oleh @Chance.

Jadi saya memasukkan kode C sedikit dan muncul dengan puts(sizeof'c'-1?"38":"37");yang hampir berhasil, kecuali bahwa Underload adalah segfaulting, mungkin karena ekspresi kompleks dalam kurung.

Bahkan setelah menghapus ekstra >>yang dulunya diperlukan untuk mencocokkan dengan <<di Perl6, saya tidak bisa mendapatkan cara yang cukup ringkas untuk membagi bagian yang lebih kompleks menjadi tugas array char. Jadi saya akhirnya melihat menggunakan preprosesor sebagai gantinya.

Setelah banyak percobaan dan kesalahan, saya menemukan solusi yang sepertinya disukai Retina. Pendahuluan yang menyebabkan saya bermasalah terus-menerus, akhirnya memperbaiki sendiri sebelum saya sempat melihat mengapa itu rusak (saya kira kurung atau yang !saya miliki di ternary pada satu tahap, melihat pada jawaban sebelumnya).

Sementara saya menambal ruang putih untuk mendapatkan sesuatu yang ingin ruang putih inginkan; Saya menemukan itu agak mudah. Secara khusus, tab space space spaceadalah kombinasi yang sangat berguna (instruksi untuk menambahkan dua item teratas di stack), karena itu berarti saya bisa menambahkan spasi putih ke baris tanpa spasi putih lain tanpa semuanya tidak sinkron (saya menduga posisinya di berarti program itu tidak pernah benar-benar dieksekusi jadi saya tidak khawatir tentang tumpukan underflows di sini).

Saya sekarang sudah menguji Insiden, dan berhasil! Terima kasih banyak kepada @Chance dan @LliwTelracs, yang baru saya sadari BUKAN nama Welsh, karena membantu saya memahami hal itu. Lihat penyorotan sintaksis ini . Saya telah menghapus ;token yang muncul sebelum #yytoken. Saya melakukan ini dengan hanya menambahkan ekstra ;setelah getspernyataan (upaya saya sebelumnya melibatkan penggantian s(yang sekarang muncul jauh lebih banyak dalam program C daripada yang sebelumnya) dalam string "detokenising" dengan ;, tetapi ternyata saya adalah sebenarnya merupakan kependekan dari Hexagony (terima kasih @Chance), jadi setelah upaya untuk menambahkan karakter tambahan ke baris terakhir ini gagal, saya hanya mengubahnya kembali dan menambahkan titik koma tambahan di tempat lain).

Saya juga mengubah sedikit spasi putih untuk mengubah beberapa token lain untuk melakukan upaya pemusatan, untuk kembali melakukan Tokenise Tab Linefeed (dengan menggerakkan tab di ujung #includebaris ke tengah, sehingga menghasilkan tiga token), dan untuk de-tokenise token tiga-ruang dengan memindahkan satu spasi di definebaris.

Akhirnya, sehari setelah pengajuan awal, saya memutuskan untuk sampai ke bagian bawah peringatan preprocessor yang menakutkan bahwa gcc diproduksi (dan yang membuat Dentang gagal). Saya menentukan bahwa alasan baris pertama bekerja sama sekali adalah karena itu adalah output dari preprocessor yang menyediakan info debug seperti nama file asli dan penomoran baris. Mereka tidak suka "2" pertama pada baris pertama, karena ini berarti "kembali dari file yang disertakan ke file yang diberikan", dan jelas itu tidak mungkin mengingat belum ada file yang disertakan. Setelah mengubahnya menjadi "1" (mulai header normal) membuat terlalu banyak bahasa tersedak, saya mengubahnya menjadi "3" (mulai header komponen internal), yang hanya memecah Hexagony, karena sekarang mengandalkan 2. Jadi pada awal kode Hexagony saya menambahkan braket terbuka(untuk mengurangi 3 ke 2, lalu braket tutup )setelah akhir ( @) dari kode hexagony untuk memenuhi Retina, Prelude dan Underload yang semuanya diharapkan sesuai dengan tanda kurung. Menguji ulang Reng dan Modular SNUSP tidak menghasilkan masalah, dan token Insiden terlihat benar, jadi sekarang saya telah memperbaikinya! Saya sudah mengujinya pada berbagai arsitektur eksotis dan tampaknya berhasil. Saya tahu ini tidak penting untuk kode golf, dan saya tidak akan keberatan jika submitter masa depan harus memecahkan ini lagi untuk tetap dalam hitungan byte atau apa pun (atau jika ada yang sudah mulai berdasarkan pada solusi ini dan tidak ingin mengubah mereka terlalu banyak), tetapi ada satu alasan bagus saya melakukan ini - kompiler Objective-C TIO hanya mendukung Dentang, jadi ini akan sangat berguna jika ada yang ingin menambahkan itu!

Ingatlah bahwa saya belum pernah menggunakan sebagian besar bahasa ini, saya harap kesuksesan saya mendorong lebih banyak pendatang baru untuk mencoba ini!


@LliwTelracs Huh, program C yang dihubungkan oleh Chance dalam jawabannya memiliki keluaran yang berbeda untuk daftar token:; #yy; # yy # yy0l0m1k1k0l0i0j0h0h0d0e0e0e000000000000000000000000 ^ _ ^ _
Muzer

Kesalahannya adalah saya menyalin nilai yang menempel ke program saya sehingga tidak bisa mengenali tab atau lolos
fəˈnɛtɪk

@LliwTelracs Hanya mencoba untuk mengetahui tokenisasi sendiri, sepertinya saya sekarang punya tanda titik koma tiga kali. Saya bisa menambahkan satu tambahan kecuali bahwa saya tidak berpikir saya bisa mengampuni byte karena itu akan menyelaraskan Hexagony. Hmm ...
Muzer

1
Insiden berhasil!
Muzer

1
@ Kebetulan saya baru saja melihat bagaimana baris pertama itu valid di C Preprocessor, sepertinya itu adalah output dari Preprocessor yang digunakan untuk info debug dll. Ini berarti "sekarang kembali (2) ke file dengan nama" 16 " baris 1 ". Saya pikir itu adalah 2 yang membuat Clang tersedak (dan gcc memperingatkan) karena tidak pernah masuk ke file mana pun, jadi tidak ada yang kembali. Ketika saya mendapat kesempatan, saya mungkin bereksperimen dengan mengubahnya menjadi sesuatu yang lain untuk membuatnya dikompilasi juga. Lihat gcc.gnu.org/onlinedocs/cpp/…
Muzer

25

65. ALGOL 68 (Genie) , 1634 byte

#16  "(}+?23!@)-("//*\Dv;'[af2.q]PkPPX'#CO)"14";n4
#/*0|7//```"`   [-'][!(>77*,;68*,@;'1,@10␉␉11)(22)S␉␉(1 P''53'S^'q
#>␉
# 36!@␉`
#
#_>++++.>.}+?
#`<`
#<]}} +<[<.>>-]>[
#{
#z}
#
#=x<R+++++[D>+++++++59L+++<-][pPLEASE,2<-#2DO,2SUB#1<-#52DO,2SUB#2<-#32DOREADOUT,2PLEASEGIVEUPFACiiipsddsd4O6O@oh]>@@+.---@.>][
#x%+>+=ttt Z_*.
#D>xU/-<+++L
#R+.----\).>]|
#[#[(?2?20l0v0x1k1kMoOMoOMoOMoOMOO0l0ix0jor0h0h1d111x0eU0yx0y0moO1d0y0e0e00m1d0i0fx0g0n0n11MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOmOoMOo0moo0n0tx0t0moO0f0t0gOOM0g0f0h0j0j0i0001k1x0vx0v0l111111^_00)
[ "]56p26q[puts 59][exit]" ,'\[' ];#/s\\/;print"24";exit}}__DATA__/
#
###x<$+@+-@@@@=>+<@@@=>+<?#d>+.--.

#
'(((p\';a=a;case $argv[1]+${a:u} in *1*)echo 50;;*A)echo 54;;*)echo 58;;esac;exit;';print((eval("1\x2f2")and 9or 13)-(0and 4)^1<<(65)>>62)or"'x"or'{}{}{}{}({}<(((((()()())){}{})){}{})>){(<{}(({}){})>)}{}({}())wWWWwWWWWwvwWWwWWWwvwWWWwWWWWWWWWwWWWWwWWWWWWWwWWWWWWWW li ha '#}#(prin 45)(bye)46(8+9+9+9+9+=!)((("'3)3)3)"'
__DATA__=1#"'x"
#.;R"12"'
###;console.log 39
""""
=begin
<>{nd
#sseeeemPaeueewuuweeeeeeeeeeCis:ajjap*///;.int 2298589328,898451655,12,178790,1018168591,84934449,12597/*
#define p sizeof'p'-1?"38":"37"
#include<stdio.h>
main ( ){puts(p);}/*
print 61
#}
disp 49;
#{
}<>
$'main'3
#-3o4o#$$$
#<T>"3"O.s
=end
"""#"
#}
#s|o51~nJ;#:p'34'3\=#print (17)#>27.say#]#print(47)#]#echo 21# xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi ax fwwvwWWWwWWWWwvwWWwWWWwvwWWwWWWwvwWWwWWWwvwWWwwwwwwwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwvm 
# sss8␛dggi2␛`|$// ''25  16*///~-<~-<~-<<<~-XCOprint("65")#s^_^_2229996#

Skor VIP ( Versatile Integer Printer ): .005949 (untuk meningkatkan, entri berikutnya tidak boleh lebih dari 1710 byte)

Cobalah online!

Kehabisan

Program ini mencetak 65 di ALGOL 68, 64 di Agony, 63 di Brian & Chuck, 62 di Grass, 61 di SILOS, 60 di Moorhens 2.0, 59 di Tcl, 58 di Ksh, 57 di Wise, 56 di dc, 55 di Brain -Flak Classic, 54 in Zsh, 53 in Shove, 52 in COW, 51 in Assembly, 50 in Bash, 49 in Octave, 48 in Deadfish ~, 47 in Lily, 46 in Cubix, 45di PicoLisp, 44 di alphuck, 43 di reticular, 42 di evil, 41 di brainfuck, 40 di Minimal-2D, 39 di CoffeeScript, 38 di C, 37 di C ++, 36 di Labyrinth, 35 di INTERCAL, 34 di Rail, 33 in Insident, 32 in Whirl, 31 in Modular SNUSP, 30 in Whitespace, 29 in Trigger, 28 in Brain-Flak, 27 in Perl 6, 26 in 05AB1E, 25 in Pip,24 di Thutu, 23 di Hexagony, 22 di Underload, 21 di Nim, 20 di Prelude, 19 di Reng, 18 di Cardinal, 17 di Julia, 16 di Pyth, 15 di Haystack, 14 di Turtlèd, 13 di Turtlèd, 13 di Ruby, 12 di Fission, 11 di Befunge-98, 10 di Befunge-93, 9 di Perl 5, 8 di Retina, 7 di Japt, 6 di SMBF, 5 di Python 2, 4 di> <>, 3di Minkolang, 2 di V / Vim, dan 1 di Python 3.

Verifikasi

Sebagian besar bahasa dapat diuji dengan driver tes di atas, tetapi 6 bahasa harus diuji secara lokal.

  • Reng dapat diuji untuk menghasilkan 19 di sini .

  • SNUSP modular dapat diuji untuk menghasilkan keluaran 31 di sini .

  • Insiden diverifikasi untuk menguji 33 melalui penyeimbangan token secara manual.

  • Deadfish ~ dapat diuji untuk menghasilkan 48 secara lokal, menggunakan juru bahasa ini . Perhatikan bahwa Deadfish ~ mengambil polyglot untuk diberi makan dengan stdin, tetapi dan mencetak sejumlah >>prompt ke output standar, yang merupakan konsekuensi yang tidak dapat dihindari dari menjalankan program Deadfish ~.

  • Moorhens 2.0 dapat diuji ke output 60 menggunakan juru bahasa ini .

ALGOL 68

ALGOL mungkin adalah yang paling tidak dikenal dari empat bahasa pemrograman tingkat tinggi sejak awal pemrograman - bahasa yang tersisa dari perbedaan samar-samar ini adalah COBOL, FORTRAN, dan Lisp. ALGOL lebih dikenal di kalangan akademis dan matematika pada saat itu, tetapi saat ini terkenal karena pengaruhnya yang besar pada bahasa modern. Sebenarnya sebagian besar bahasa modern dan praktis dapat digambarkan sebagai “mirip-Algol,” tidak sedikit di antaranya adalah C, yang tentu saja memiliki garis turunan pengaruh dan turunannya sendiri.

Saya cukup bersemangat untuk memasukkan ALGOL karena itu adalah batu loncatan besar lain dalam sejarah komputer yang bisa kita tambahkan ke monumen yang kita sebut polyglot. Itu hal yang keren.

ALGOL68 adalah yang terbaru dari tiga spesifikasi ALGOL utama, yang lainnya adalah ALGOL60 dan ALGOL58. Menariknya, spesifikasi tidak memiliki sintaks tetap, yang berarti bahwa token didefinisikan, tetapi tidak ejaan. Hal ini membuat bahasa menjadi sangat tergantung pada penerjemah karena setiap penerjemah yang diberikan dapat menggunakan simbol yang berbeda untuk memulai blok komentar misalnya. Spesifikasi menjelaskan ¢sebagai memulai blok komentar. Tetapi karena ¢tidak termasuk dalam kode 127 ascii dasar itu dimengerti tidak melihat banyak digunakan sebagai indikator komentar di antara penerjemah yang tersedia. Nah ternyata juru bahasa Genie mengeja ¢sebagai #, yang merupakan semua pembukaan yang kita butuhkan untuk melewati karakter 1 dan membuat polyglot.

Genie sebenarnya memiliki tiga opsi sintaks komentar, dua lainnya codan comment, keduanya ditentukan sebagai ditulis dalam huruf tebal. Ya, berani. Jika kita menggunakan huruf miring, itu variabel. Genie memecahkannya untuk kita lagi dengan mengeja dengan berani di semua topi. Dan karena COtidak ada dalam polyglot di mana pun, kami punya metode mudah menyembunyikan polyglot dari pengurai. Jika COdiperlukan suatu bahasa, kita bisa beralih ke COMMENTsintaksis yang lebih verbose .

Tidak ada komentar baris di ALGOL - semuanya bergaya blok, yang berarti harus dihentikan. Mengingat keadaan awal polyglot, komentar blok ALGOL kami dibuka segera dan diakhiri di dekat akhir baris 1 karena Turtlèd juga menggunakan #sebagai token lompat. Turtlèd sangat beruntung tidak memiliki masalah berjalan melalui Cdan Okarakter sehingga pada baris 1 kita bisa COlangsung memasukkan setelah yang kedua #untuk memulai komentar blok lemak untuk ALGOL68.

Dari sini kita tinggal menempatkan COprint("65")suatu tempat. Saya memilih baris terakhir karena saya lebih suka menyelesaikan kalimat dengan #komentar lain dan saya tidak ingin komentar berakhir di #awal baris terakhir. Jadi kami menindaklanjuti pernyataan cetak ALGOL kami dengan #sdan #sebagai karakter terakhir dalam polyglot. The sdalam #sadalah untuk alphuck untuk mengimbangi pdi cetak.

Terima kasih kepada @ ais523 untuk membuka akhir polyglot dengan jawaban 59 dan membuat semua ini menjadi mungkin.

SMBF

Kami menambahkan karakter yang berbeda di akhir polyglot untuk mengakhiri komentar terakhir ALGOL, dan SMBF sebelumnya membaca karakter terakhir untuk jawabannya. Untuk memperbaiki ini, saya harus mengubah SMBF untuk membaca karakter kedua hingga terakhir dengan mengubah kode ini pada baris 8 [.>-]menjadi ini [<.>>-]. Ini adalah blok kode pribadi SMBF karena MP BF berada pada 0 ketika loop dimulai.

Pelatuk

Pada titik ini, saya melihat beberapa perilaku aneh dengan SMBF dan itu ada hubungannya dengan hubungan antara segmen kode ini dan akhir polyglot.

• Tujuan lompatan Insiden: ^_^_

• Tujuan Jump Trigger plus jawaban: X222999

• Jawaban ALGOL68: COprint("65")#s

Jawaban ALGOL menandai beberapa token Insiden dalam segmen kode, sehingga kode ALGOL harus pergi sebelum segmen kode Insiden. ALGOL juga menyebabkan masalah penyelarasan awal jika masuk pertama dalam urutan sehingga harus yang kedua atau ketiga. Sementara itu SMBF mengalami kegagalan yang tidak dapat dijelaskan ketika kode Insiden menjadi yang terakhir, jadi Insiden harus pergi dulu atau kedua. Yah, saya menyadari ini adalah masalah logika pengantar yang tampaknya tidak dapat diselesaikan, jadi saya mulai membuat hal yang tidak dapat dijelaskan menjadi lebih ... masuk akal.

Setelah berjalan melalui SMBF saya menemukan bahwa masalah dengan memiliki ^ _ ^ _ pada akhirnya adalah karena Wise. Kode Wise ( ~-<~-<~-<<<~-) tidak tersembunyi di balik loop yang tidak dapat dijalankan, tidak seperti kebanyakan polyglot. Tapi tidak ada kode cetak SMBF yang terlibat dalam kode Wise. Itu hanya mengubah nilai memori. Tampaknya tidak berbahaya. Jadi apa masalahnya? Itu SM sialan di depan BF.

Kode Wise mengubah karakter dalam kode yang akan dieksekusi, dan dapatkah Anda menebak apa nilai tetangga ASCI ^? Ini ]. Wise meletakkan terminator loop SMBF di ujung polyglot, menyebabkan SMBF jatuh ke loop infinite. Itu mojo yang buruk.

Setelah beberapa pikir saya mengambil solusi 0 byte untuk masalah ini dan dipisahkan tujuan melompat Pemicu ini ( X) dari jawabannya ( 222999) dan berakhir polyglot yang berikut: untuk ~-<~-<~-<<<~-XCOprint("65")#s^_^_2229996#. Ini hanya berfungsi karena tidak ada karakter yang muncul secara berurutan setelah lompatan Trigger yang bukan jawaban Trigger.

Membungkus

Itu semua perubahan besar pada babak ini. Saya memang membuat perubahan kecil untuk memotong banyak yang dibahas cdi baris 1, tapi itu hanya untuk perubahan golf murni.

Semoga berhasil!

Laporan kejadian

#<q>"3"O.smenjadi #<T>"3"O.skarena melepaskan Tdaripada qlebih efisien dalam menyeimbangkan

<>{menjadi <>{nduntuk menakut nd- nakuti dan{␊

Tempatkan ruang di antara }}dan +di dalam #<]}} +<[<.>>-]>[untuk merobohkan }}+lebih murah.


25

2. V (11 byte)

print(1)#i2

Program ini mencetak 1 dalam Python 3, dan 2 dalam V.

Hanya untuk membuat bola bergulir dan melemparkan bahasa favorit saya ke dalam campuran sejak awal. :)

Ini jawaban yang sangat mudah.

print(1)#

kebetulan menjadi NOP di V. (beruntung untuk saya) Kemudian i2masuk ke mode insert dan memasukkan '2'. Anda dapat mencoba V online di sini

Tentu saja dengan python

print(1)

mencetak '1', dan

#i2

adalah komentar.


2
Apakah ini V atau Vim? Penerjemah yang Anda tautkan secara teknis "V".
mbomb007

@ mbomb007 Nah, V hampir seluruhnya kompatibel ke belakang, jadi maksudnya adalah vim. Saya kira secara teknis adalah V sekalipun. Apakah sudah terlambat untuk berubah?
DJMcMayhem

2
Tidak juga, cukup edit judul di jawaban.
mbomb007

1
@ mbomb007 Karakter ESC literal akan melakukannya (itulah sebabnya saya harus menggunakannya dalam kiriman saya).

1
Catatan untuk mereka yang menguji ini: Anda perlu memastikan Anda tidak memiliki cliipboard dibawa dari sesi Vim sebelumnya.
Naik

24

20. Prelude, 167 byte

#v`16 "<" 6/b0\ .q@#;n4"14""
#>3N9@15o|R"12"*^*ttt*~++%
#=|
print((1/2and 9 or 13)-(0and+4)^1<<65>>62);#35(99999+++++!) =#;print(17)
#       ~nJ<
#
#gg99ddi2` |1|1+6

Karakter ESC literal di tempat yang sama seperti pada pengiriman sebelumnya (antara #dan g, dan antara 2dan `, di baris terakhir), karena Anda tidak dapat mengeluarkan Vim dari mode penyisipan dengan karakter yang dapat dicetak.

Program ini mencetak 20 di Prelude , 19 di Reng (dapat diuji di sini ), 18 di Kardinal , 17 di Julia , 16 di Pystack , 15 di Haystack , 14 di Turtlèd , 13 di Ruby , 12 di Fission , 11 di Befunge-98 , 10 di Befunge-93 , 9 di Perl , 8 di Retina , 7 di Japt , 6 di SMBF ,5 di Python 2 , 4 di> <> , 3 di Minkolang , 2 di Vim / V , 1 di Python 3 , dana partridgedi A Pear Tree .

Kode yang ada cukup banyak membatalkan dirinya sendiri di Prelude, hanya terdiri dari sementara loop dengan argumen falsey dan beberapa manipulasi tumpukan pada tumpukan kita tidak peduli. Bahkan lebih baik, ada tempat di kode yang merupakan komentar di semua bahasa yang memilikinya (antara #dan =#dari pengiriman sebelumnya). Bagian tersulit dari pemasangan Prelude ke dalam ini adalah menghasilkan angka dengan hanya satu tumpukan dan tanpa meledakkan jumlah byte. Program ini menggunakan loop yang menambahkan 45 ke setiap elemen stack dan output sebagai ASCII, sehingga dengan menempatkan 5 di atas 3 pada stack, kita dapatkan 20sebagai output. (Rapi, 20 adalah angka yang lebih mudah untuk diproduksi daripada 19 di Prelude, jadi jawaban 19 yang diposting sebenarnya sedikit membantu saya.)


Pendahuluan harus cukup mudah untuk dikerjakan dalam program-program mendatang. Beberapa saran untuk siapa pun yang mungkin menyebabkan masalah: jangan biarkan tanda kurung berbaris secara vertikal; pastikan Anda tidak mengizinkan tanda seru di luar tanda kurung; dan setelah Anda menempatkan angka di dalam tanda kurung, jangan letakkan lebih banyak tanda kurung di baris yang sama. Kesenjangan yang saya gunakan pada program Prelude masih terbuka, dan sepertinya itu merupakan tempat yang bermanfaat bagi bahasa 1D lainnya (semacam Prelude 1½D, dan bertindak lebih seperti bahasa 1D dalam program ini).

Bagus, kalahkan saya dengan Prelude :) Saya benar-benar berpikir ASCII-satunya V mungkin bisa :%sdiganti, tetapi meskipun itu agak sulit (dan V menjengkelkan untuk diuji)
Sp3000

Jika Anda menggunakan a :untuk memulai perintah di vim, Anda akan membutuhkan carriage return, yang juga tidak dapat dicetak. : /
Zwei

4
+10000000000 untuk a partridgedi A Pear Tree. Tapi apakah itu dicetak 5 GOLDdalam CINCIN?
immibis

23

30. Ruang kosong , 296 byte

#v`16/"<"6/b.q@"(: ::T):  ␉␉␉␉ :(22)S#;n4"14"
#>3N6@15o|>␉^*ttt*~++~~~%
#=~nJ<R"12"; ␉
#[␉
#`<`|
print((eval("1\x2f2")and (9)or(13))-(0and 4)^(1)<<(65)>>62)or'(\{(\{})(\{\/+23!@}[()])}\{})(\{}\{})'#46(8+9+9+9+9+=!)=#print(17)#]#echo 21#|/=1/24=x=90/
#8␛dggi2␛␉` |1|6$//''25  #>say␉␉ 27#T222999"26

␛ merepresentasikan literal escape.

␉ mewakili tab literal.

Program ini mencetak 30 di Whitespace , 29 di Trigger , 28 di Brain-Flak , 27 di Perl 6 , 26 di 05AB1E , 25 di Pip , 24 di Thutu , 23 di Hexagony , 22 di Underload , 21 di Nim , 20 di Prelude , 19 di Reng (diuji di sini ), 18 di Kardinal , 17 di Julia , 16 di Pyth , 15 di Haystack , 14 di Turtlèd , 13 di Ruby , 12 di Fission , 11 di Befunge-98 , 10 di Befunge-93 , 9 di Perl 5 , 8 di Retina , 7 di Japt , 6 di SMBF , 5 di Python 2 , 4 in> <> , 3 di Minkolang , 2 di V / Vim , dan 1 di Python 3 .

Whitespace adalah esolang lain dengan rangkaian karakter terbatas. Yang ini hanya membaca tab, spasi, dan umpan baris.

Jadi, begitu kami mengeluarkan semua hal yang tidak dibaca Whitespace, kami memiliki kode berikut:

[space][space][space][LF]
[space][LF]
[LF]
[LF]
[LF]
[space][space][space][space][space][LF]
[space][space][space][space]

Dan kode untuk menghasilkan 30 adalah ini:

[space][space][space][tab][tab][tab][tab][space][LF]
[tab][LF]
[space][tab]

Jadi 3 baris teratas dari kode yang ada diberi ruang ekstra di akhir baris untuk memenuhi persyaratan. Perhatikan bahwa tab 1 baris dan ruang tambahan ada di tengah baris untuk mengakomodasi kebutuhan> <>.

Ruang baris 2 diubah menjadi tab di sini. Ini tampaknya berfungsi identik dengan ruang untuk bahasa 2D, tetapi secara visual tidak berbaris lagi. ¯ \ _ (ツ) _ / ¯

Setelah instruksi untuk menghasilkan 30, permainan menjadi mendapatkan sisa ruang yang diperlukan dan umpan baris untuk melakukan hal-hal yang tidak berguna dan mengkompilasi dengan benar.

Spasi putih kebetulan memiliki instruksi yang menandai / kebagian lokasi kode dengan label yang memungkinkan jumlah tab dan spasi yang berubah-ubah, sehingga membantu mengatur spasi garis panjang. Itu juga dimulai dan diakhiri dengan umpan baris, sehingga membantu kami menaikkan beberapa umpan baris di baris 3-6.

Baris terakhir tidak dapat memiliki umpan baris tanpa melanggar Retina, jadi instruksinya adalah melakukan beberapa manipulasi matematika dan tumpukan acak.

Berikut kode lengkap dengan spasi, tab, dan umpan baris diganti dengan notasi kami:

#v`16/"<"6/b.q@"(:[Space]::T):[Space][Space][Tab][Tab][Tab][Tab][Space]:(22)S#;n4"14"[LF]
#>3N6@15o|>[Tab]^*ttt*~++~~~%[LF]
#=~nJ<R"12";[Space][Tab][LF]
#[[Tab][LF]
#`<`|[LF]
print((eval("1\x2f2")and[Space](9)or(13))-(0and[Space]4)^(1)<<(65)>>62)or'(\{(\{})(\{\/+23!@}[()])}\{})(\{}\{})'#46(8+9+9+9+9+=!)=#print(17)#]#echo[Space]21#|/=1/24=x=90/[LF]
#8␛dggi2␛[Tab]`[Space]|1|6$//''25[Space][Space]#>say[Tab][Tab][Space]27#T222999"26[LF]

Dan ini adalah versi komentar dari Whitespace:

Push 30 onto the stack
[space][space][space][tab][tab][tab][tab][space][LF]

Output the number at the top of the stack
[tab][LF][space][tab] 

Jump to label null if the top of the stack is negative. (it's not)
[LF][Tab][LF]

Label this location as [Space]
[LF][Space][Space][Space][LF]

Add the top two items on the stack and replace them with the result. 
[Tab][Space][Space][Space]

Store the stack.
[Tab][Tab][Space]

Suntingan: Hexagony ternyata melompati tab seperti spasi, bertentangan dengan pernyataan saya sebelumnya. @ ais523 cukup berbaik hati untuk memperbarui @ Kenney's Hexagonizer ke akun untuk keluar dan tab secara literal. Saya harus memodifikasinya untuk memperbaiki pernyataan saya sebelumnya tentang tab yang dibaca sebagai no-ops dan untuk mengganti literal escape .karena karakternya lebih lebar daripada karakter lain, membuat hex sedikit tidak selaras. Sini tautannya .

Dan ini Hex kami yang diperbaiki saat ini:

          # v 1 6 / " < " 6 /
         b . q @ " ( : : : T )
        : : ( 2 2 ) S # ; n 4 "
       1 4 " # > 3 N 6 @ 1 5 o |
      > ^ * t t t * ~ + + ~ ~ ~ %
     # = ~ n J < R " 1 2 " ; # [ #
    < | p r i n t ( ( e v a l ( " 1
   \ x 2 f 2 " ) a n d ( 9 ) o r ( 1
  3 ) ) - ( 0 a n d 4 ) ^ ( 1 ) < < (
 6 5 ) > > 6 2 ) o r ' ( \ { ( \ { } )
  ( \ { \ / + 2 3 ! @ } [ ( ) ] ) } \
   { } ) ( \ { } \ { } ) ' # 4 6 ( 8
    + 9 + 9 + 9 + 9 + = ! ) = # p r
     i n t ( 1 7 ) # ] # e c h o 2
      1 # | / = 1 / 2 4 = x = 9 0
       / # 8 . d g g i 2 . | 1 |
        6 $ / / ' ' 2 5 # > s a
         y 2 7 # T 2 2 2 9 9 9
          " 2 6 . . . . . . .

Akhirnya, saya bermain-main beberapa karakter yang tidak perlu, sebagian besar ditambahkan sebelumnya untuk berbaris tanda kurung Prelude dan segi enam Hexagony.

Kode Nim kembali echo 21dariecho 5+5+11

Hexagony #@46sekarang#46

Kode Hexagony kembali /+23!@=dari/+23!@

Penjajaran tanda kurung Prelude (9) or (13)menjadi(9)and(13)

Yah, hanya itu yang saya dapat. Semoga beruntung semuanya!


1
Saya pikir saya telah memperbaiki semua tautan dan menambahkan ␛ di tempat-tempat ruang yang dihasilkan dari pasta salinan saya. Tidak yakin bagaimana mendapatkan tab menjadi tab di SE, kode di Tio harus disatukan. Saya juga harus membuat kembali solusi saya dari instruksi dalam jawaban ini, tetapi entah bagaimana berakhir dengan 2 bit lebih sedikit ... Ups?
Peluang

1
Hanya melihat kesalahan dalam penjelasan Anda: carriage return (ASCII 13) adalah karakter yang berbeda dari umpan baris (ASCII 10). Sebagian besar bahasa (termasuk Whitespace) peduli dengan 10-an, bukan 13-an (dan diasumsikan bahwa garis terputus dalam pengiriman PPCG hanya ASCII 10 tunggal kecuali dinyatakan lain, karena 13-an cenderung mengembang jumlah byte Anda menjadi tidak ada manfaat).

1
Gambar penjelasan hexagony Anda salah ( tercetake23 ) karena ;setelah e saat muncul NW setelah refleksi pertama. Tautan di atas berfungsi ...?
MildlyMilquetoast

1
Saya sampai pada kesimpulan bahwa TIO untuk Hexagony memperlakukan karakter tab sebagai spasi / baris baru. Gambar yang Anda berikan dari program hexagony tidak melakukan apa pun kecuali keluar jika Anda mengikutinya (atau memasukkannya ke TIO, mengganti tab dengan .s). Namun, salin kode dalam gambar ke TIO, kecuali hapus pelatihan .(bukan bagian dari kode aktual) dan semua kode. Mencetak 23.
MildlyMilquetoast

1
Wow, terima kasih @MistahFiggins! Sepertinya saya membuat beberapa kesalahan deduktif dan menyebarkannya ke penjelasan saya. Saya telah mengoreksi penjelasan Hexagony, diagram hex, dan skrip Perl Hexagonoizer, serta memeriksa silang hasilnya terhadap Hexagony secara langsung. Semuanya harus baik sekarang. Temukan Bagus!
Peluang

23

100. brainbool, 2953 byte

#16  "?63(o?23!*# #@"/*\DZZCv;'[af2.q]PkPPX)\('#CO"14"; */
#/*0|7//```"`  [>.>.])[-'][(>77*;,68*,@,1',;# l1011)(22)S\4n;iiipsddpsdoh coding:utf8ââââ(1P''53'S^'????!?!??!??!!!!???!?!??!!?!?!!!!!?!!!!?????!????????????????????!) (qx
#>â
# 36!@â`  e++++++::@ 
#~
#y
#`<`
#<<<#>>]}}+-[.+..]+-+<[<<.>>x>-]>[
#{
#x}
#2""/*\*
#=x<R+++++[D>+++++++q   L+++<-][pPLEASE,2<-#2FAC,2SUB#1<-#52FAC,2SUB#2<-#32FACREADOUT,2PLEASEGIVEUPFACs]>@@+.---@.>][
#x%+>+=ttt Z_*.
#D>xU/-<+++L
#R+.----\   \).>]4O6O@|
#[#[(?2?20l0v01k1kMoOMoOMoOMoO MOO0l0ix0jor0h0h1d111x0eU0y0yx0moO1d0y0e0e00m1d0i0fx0g0n0n11MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOmOoMOo0moo0n0tx0t0moO0f0t0gOOM0g0f0h0j0j0i0001k1x0vx0v0l111111^_0 )0\\
[  "]56p26q[puts 59][exit]" ,'\[999'];#/s\\/;print"24";exit}}__DATA__/
###x<$+@+-@@@@=>+<@@@=>+<?#d>+.--.<!\
'(wWWWwWWWWwvwWWwWWWwvwWWWw WWWWWWWWwWW/"78"oo@WWwWWWWWWWwWWWWWWWWwwwwvwWWWwWWWWwvwWWwWWWwvwWWwWWWwvwWWwWWWw              (([5]{})))â\';';print((eval("1\x2f 2")and 9or 13<< (65)>>65or 68)-(0and 4)^1<<(65)>>62)or"'x"or' {}{}{}{}({}<(((((()()())){}{})){}{})>)(({})5){}x{(x<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>)wWW no no no no no no no no no no no no no no no no no no no no no no no no no no no no no no os sp '#}#(prin 45)(bye)46(8+9+9+9+9+=!)((("3'3)))"'a'[[@*3*74[?]*]*(<*.*\>]xxxxxxxxxxxxx)'# \\
__DATA__=1#"'x"
#.;R"12"'
###;console.log 39;'(******* **********819+*+@[*99[?]*]***|!)'
#\\
""""#\
' ( <><        (          )>  ){ ({}[()]  )}{\';      a=$(printf \\x00    );b=${#a};#\\
" }"';           ((   ( (';case "{"$ar[1]"}"${b} in *1)echo 54;;*4)echo 78;; *1*)echo 50;;*)echo 58;;esac;exit;# (((('))))#\
=begin
#p             +555/2+55x%6E2x
;set print "-";print 89;exit#ss 9
utpb now 70 dollar off!
utpb has been selling out worldwide!
#9999 9 seeeemPaeueewuuweeeeeeeeeeCis:ajjappppppp😆😨😒😨💬95💬👥➡
👋🔢🌚🌝🌝🌚🌚🌚🌚🌚

set ! 57
set ! 51
More 91 of thiset of re9
How much is it*/
#if 0
.int 2298589328,898451655,12,178790,1018168591,84934449, 12597
#endif//*
#1"" //*
#include<stdio.h> 
#defineâ x(d)â#d
#define u8 "38\0 "
main ( ) {puts( sizeof (0,u8)-5?u8"67":*u8""?"37":     x( 0'0  "'\"")[9]?"75":'??-'&1? "79":"77");"eg5""6 27""e ' Zing  ";}//*/
#if 0
#endif//* --... ...--
/*/
p=sizeof("9( 999 99\"    ); print'(''72'')';end!"            );main( ){puts(  "92");return(9-9+9 -9);}
#if 0â
#endif//* rk:start | print: "69" rk:end<(9    >5b*:,1-,@
print 61
#}
disp 49 ;9;
#{
}{}<>
$'main'3
#-3o4o#$$$
#<T>"3"O.</+++++++>/+++<-\>+++.---.
#<<<#>>> /
reg end="";print(85);reg s#++++++++++++++++++++++++++++++++++++++++++++++++++++++++.-.
=end
;"""#"#xxxxxxxy"78"\++++>/<~#class P{        function:Main(a:String[] )~Nil{83->Print();} }
#}pS9^7^8^MUOUOF@:8:8\\
#s|)o51~nJ;#:p'34'3  \=#print(17)#>27.say#]# print(47) #]#echo 21#fwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwvm>++++
#s8âdggi2âM`|$//''  1$6~-<~-<~-<<<~-COprint ("65")#asss^_^_#
#9 "25"  +/ *///X222999686#

Skor VIP ( Versatile Integer Printer ): .002953 (untuk meningkatkan, entri berikutnya tidak boleh lebih dari 3042 byte)

Kehabisan

Program ini mencetak 1 dengan Python 3, 2 di V / Vim, 3 di Minkolang, 4 in> <>, 5 di Python 2, 6 di SMBF, 7 di Japt, 8 di Retina, 9 di Perl 5, 10 di Befunge- 93, 11 di Befunge-98, 12 di Fission, 13 di Ruby, 14 di Turtlèd, 15 di Haystack, 16 di Pyth, 17 di Julia, 18 di Cardinal, 19 di Reng, 20 di Prelude, 21di Nim, 22 di Underload, 23 di Hexagony, 24 di Thutu, 25 di Pip, 26 di 05AB1E, 27 di Perl 6, 28 di Brain-Flak, 29 di Trigger, 30 di Whitespace, 31 di Modular SNUSP, 32 di Whirl , 33 dalam Insiden, 34 dalam Rail, 35 di INTERCAL, 36 di Labyrinth, 37 di C ++ 03, 38 di C99, 39 di CoffeeScript, 40 di Minimal-2D, 41 di brainfuck, 42 dalam kejahatan, 43 di reticular, 44 di alphuck, 45 di PicoLisp, 46 di Cubix, 47 di Lilyfish , 48 di Deadfish ~, 49 di Octave, 50 di Bash, 51 di Assembly, 52 di COW, 53 di Shove, 54 di Zsh, 55 di Brain-Flak Classic, 56 di dc, 57 di Wise, 58 di Ksh, 59 di Tcl, 60 di Moorhens, 61 di SILOS, 62 di Grass, 63 di Grass, 63di Brian & Chuck, 64 di Agony, 65 di ALGOL 68, 66 di Surface, 67 di C11, 68 di Python 1, 69 di rk-lang, 70 di Commercial, 71 di apa, 72 di Fortran, 73 di Morse, 74 di Archway, 75 di C ++ 11, 76 di Trefunge-98, 77 di C ++ 14, 78 di dash, 79 di C ++ 17, 80 di Klein 201, 81 di Klein 100, 82 di Brain-Flueue, 83 di Objeck, 84 di Klein 001, 85 di zkl, 86 di Miniflak, 87 di Alice, 88 di PingPong, 89 di Gnuplot, 90 di RunR, 91 di Cood, 92 di C89, 93 di Set, 94 di Emotinomicon, 95 di Emoji, 96 di EmojiCoder, 97 in Cubically, 98 in Archway2, 99 in 99 . 100 dalam brainbool

Verifikasi

Cobalah online! Bahasa tidak tersedia di TIO:

  • Japt, 7 online .
  • Reng, 19 online .
  • Deadfish ~, 48 lokal .
  • Moorhens, 60 lokal . gunakan moorhens.py dari cabang v2.0-dev
  • Morse, 73 lokal
  • Archway, 74 lokal
  • Trefunge-98, 76 lokal . Gunakan -d 3 -v 98untuk Trefunge-98.
  • Objeck, 83 lokal
  • zkl, 85 lokal
  • PingPong, 88 lokal
  • RunR, 90 lokal
  • Cood, 91 online
  • Setel, 93 online
  • Emotinomicon, 94 online
  • EmojiCoder, 96 online
  • Archway2, 98 lokal Saya tidak dapat menguji Archway2 karena saya tidak memiliki compiler C yang tepat, namun stasoid telah mengkonfirmasi itu berfungsi di archway2

Penjelasan

Saya tidak percaya kami berhasil mencapai 100 bahasa. Saya hanya ingin meluangkan waktu untuk berterima kasih kepada semua orang yang terlibat dalam proses ini. Ini perjalanan yang menyenangkan dan saya berharap dapat menambahkan 100 lebih banyak dengan kalian.

Brainbool sudah ada di mata saya untuk sementara waktu. Namun karena brainbool hanya dapat menampilkan dua angka, 1dan 0saya belum dapat menambahkannya sampai sekarang (saya tidak ada untuk 10 dan 11).

Brainbool sama seperti brainfuck, kecuali alih-alih membungkus di 256 itu membungkus di 2. Brainbool juga tidak memiliki -karena itu berlebihan dengan +. Kode brainbool kami untuk output 100 cukup sederhana:

+.+..

Untuk menutupi keluaran untuk brainfuck, kami menambahkan loop dan minus:

+-[.+..]

Sekarang semua yang dibutuhkan adalah menemukan tempat untuk kode. Tempat pilihan saya adalah yang pertama +di tingkat teratas dari kode brainfuck pada baris 8. Untuk menggantikan dalam plus kami menambahkan kode kami dan +-+yang bertindak sebagai +di dalam brainfuck dan noop di brainbool.

+-[.+..]+-+

Cubix

Saya meletakkan kode saya sebelum kapsul Cubix menyebabkan cermin bergerak ke jalur penunjuk. Untuk memperbaikinya, saya memindahkan kapsul beberapa langkah ke depan di depan cermin yang menyinggung dan semuanya baik-baik saja.

Anehnya, tidak ada hal lain yang terjadi bahkan pada insiden yang terkenal itu.


Sebenarnya, brainbool dapat menampilkan teks aribtrary. Jika Anda meneruskannya -bargumen, itu akan membangun 1s dan 0s menjadi byte dan kemudian output sebagai karakter.
Pavel

1
@WheatWizard Saya mengkonfirmasi bahwa itu berfungsi di Archway2.
stasoid

1
Selamat! Saya perhatikan skor VIP hanya turun di bawah 0,003 juga.
Ørjan Johansen

1
Saya harus akui, kembali ketika Anda awalnya diposting tentang menambahkan ini untuk 100/101, saya tidak benar-benar berpikir kami akan pernah ke sini. Ini sangat keren.
SnoringFrog

1
@stasoid Saya sedang berusaha untuk mendapatkan Archway di TIO, hanya FYI.
MD XF

21

27. Perl 6 , 235 byte

#v`16/"<"6/b.q@"(::):::  (22)S#;n4"14"
#>3N6@15o|> ^*ttt*~++~~~%
#=~nJ<R"12";
#[
#`<`|
print((eval("1\x2f2")and 9 or 13)-(0and 4)^1<<65>>62)#@46(8+9+9+9+9+=!)=#print(17)#3]#echo 21#===2|/=1/24=x=90/
#8␛dggi2␛` |1|6$//''25  #>say 27#"26

␛ mewakili karakter ESC literal, seperti biasa.

Program ini mencetak 27 di Perl 6 , 26 di 05AB1E , 25 di Pip , 24 di Thutu , 23 di Hexagony , 22 di Underload , 21 di Nim , 20 di Prelude , 19 di Reng (diuji di sini ), 18 di Cardinal , 17 di Julia , 16 di Pyth , 15 di Haystack , 14 di Turtlèd , 13 di Ruby ,12 dalam Fission , 11 di Befunge-98 , 10 di Befunge-93 , 9 di Perl 5 , 8 di Retina , 7 di Japt , 6 di SMBF , 5 di Python 2 , 4 in> <> , 3 di Minkolang , 2 in Vim / V , 1 dalam Python 3 , dan (seperti Natal)a partridgedi A Pear Tree .

Sintaks yang menyoroti bahwa Stack Exchange menghasilkan untuk jawaban ini benar-benar salah. #`<adalah salah satu dari banyak penanda komentar multiline Perl, dan berakhir pada #>, sehingga satu-satunya kode yang benar-benar berjalan di Perl 6 adalah yang sangat sederhana say 27. Saya memilih penanda komentar ini karena <>bukan pasangan yang cocok di sebagian besar bahasa, dan dengan demikian yang <tidak cocok tidak akan memecah bahasa, seperti Retina, yang mencoba menguraikannya.

Saya tidak sepenuhnya yakin bagaimana Hexagony bekerja lagi. Ketika rusak, saya mengubah salah satu karakter yang digunakannya dari a +ke a 0untuk melihat apakah ia terkena; ternyata itu, dan ternyata ini memperbaiki program, tapi saya tidak yakin mengapa (saya tahu itu rusak karena ada #di garis eksekusi, tetapi tidak jelas mengapa menghapus +perbaikan hal-hal). (Karakter yang dimaksud juga diuraikan oleh Thutu, tetapi untungnya ini tidak membuat perbedaan pada fungsi program Thutu, seperti pada saat itu dalam program, apa pun yang tidak didahului oleh seorang =disalin secara harfiah ke dalam karya string.) Perhatikan bahwa 0and+4dari baris sebelumnya menjadi0and 4, untuk menjadikannya satu karakter lebih pendek dari sudut pandang Hexagony (Hexagony tidak melihat spasi); ini untuk mengkompensasi menjadi #|pada baris sebelumnya #`<`|, yang merupakan satu karakter lebih panjang dari sudut pandang Hexagony (karena tidak melihat backquote juga). Perhatikan bahwa kode sekarang hanya lima byte jauhnya dari memperluas panjang sisi Hexagony dan memecah segala sesuatu tentang kode Hexagony saat ini. Saya akan merekomendasikan melakukan ini dan hanya mengulangi bagian Hexagony dari kode; mungkin akan lebih mudah, daripada lebih sulit, untuk menyesuaikan semuanya setelah ekspansi.

Beberapa bahasa lain juga berubah, sebagian besar untuk menambah ketahanan yang cukup sehingga saya dapat memasukkan kode arbitrer pada baris terakhir. $//adalah penanda komentar di Japt yang memungkinkan spasi di baris selanjutnya, membuat program yang ditambahkan menjadi kurang rapuh di Japt (sementara itu, //terputus jika ada tanda kurung penutup di baris berikutnya, dan spasi adalah semacam tanda kurung penutup di Japt). Sepasang spasi adalah penanda komentar di Pip, yang berarti bahwa kode Pip dapat disederhanakan secara substansial di sini. Ini juga berarti bahwa kita dapat menyederhanakan 05AB1E menjadi sepele "26. Retina membutuhkan garis kelima untuk menjadi regex legal yang bagus dalam mencocokkan hal-hal (trailing|dengan demikian untuk Retina); itu mem-parsing berbeda dari baris yang sesuai pada entri sebelumnya, tetapi dengan cara yang sesuai. Kardinal juga sedikit lebih sederhana dari pada entri sebelumnya, tetapi ini hanya kebetulan murni dengan bagaimana semuanya berbaris secara vertikal, dan perubahannya adalah kode yang tidak melakukan apa-apa.

Dengan asumsi Anda mengulang Hexagony (Anda mungkin harus), ada tempat aman untuk menambahkan kode pada semua tiga baris terakhir: 3in #3]#hanya untuk Hexagony (dan mudah diubah); ruang antara #dan "pada baris terakhir diabaikan oleh sebagian besar bahasa; dan tidak ada yang benar-benar menguraikan akhir baris kelima selain Retina. (Ada banyak tempat lain di mana kode dapat ditambahkan juga, tetapi ini mungkin yang paling nyaman.)


1
Saya secara tidak sengaja menurunkan jawaban ini dan menyadari bahwa saya menurunkannya ketika saya melihat perwakilan saya turun 1. Apakah Anda dapat mengedit jawaban itu sehingga saya dapat meningkatkannya? : D
betseg

4
@ Betseg: Saya menambahkan sedikit diskusi tentang Hexagony, hanya untuk Anda.

2
Selamat atas hadiahnya! Saya ingin agar postingan ini bergerak lagi: P
FlipTack

Saya sudah berencana untuk melanjutkannya selama berabad-abad, itu hanya kasus mencari waktu. (Saya sebenarnya telah melakukan upaya yang gagal di Perl 6 beberapa waktu lalu, sebelumnya di rantai, dan tidak mempostingnya karena tidak berhasil. Untungnya, saya belajar dari kesalahan dan bekerja saat ini.)

21

31. SNUSP Modular , 326 byte

Program

#v`16/"<"6/b.q@"(: ::T):  ␉␉␉␉ :(22)S#;n4"14"
#>3N6@15o|>␉^*ttt*~++~~~%
#=~nJ<R"12"; ␉
#[␉
#`<`|
print((eval("1\x2f2")and (9)or(13))-(0and 4)^(1)<<(65)>>62)or'(\{(\{})(\{}[()])}\{})(\{}\{})'#46(8+9+9+9+9+=!)=#print(17)#]#echo 21#|/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
#8␛dggi2␛␉` |1|6$//''25  #>say␉␉ 27#T222999+/+23!@"26

Seperti biasa, adalah karakter ESC literal dan merupakan tab literal.

Kehabisan

Program ini mencetak 31 di SNUSP Modular, 30 di Whitespace, 29 di Trigger, 28 di Brain-Flak, 27 di Perl 6, 26 di 05AB1E, 25 di Pip, 24 di Thutu, 23 di Hexagony, 22 di Underload, 21 di Nim , 20 di Prelude, 19 di Reng, 18 di Kardinal, 17 di Julia, 16 di Pyth, 15 di Haystack, 14 di Turtlèd, 13 di Ruby, 12 di Fission,11 di Befunge-98, 10 di Befunge-93, 9 di Perl 5, 8 di Retina, 7 di Japt, 6 di SMBF, 5 di Python 2, 4 di> <>, 3 di Minkolang, 2 di V / Vim, dan 1 di Python 3.

Verifikasi

Mengapa tidak ada tautan di jadwal? Karena saya telah mengerjakan sesuatu untuk membuat pengujian menjadi lebih mudah, sebuah penguji yang menjalankan program di sebagian besar bahasa yang tercantum di sini dan mencetak hasilnya. Mudah-mudahan ini akan membuat menambahkan bahasa masa depan ke polyglot lebih mudah Anda bisa mendapatkan hasil dari program ini untuk 28 dari 31 bahasa melalui menjalankan tautan TIO berikut (yang merupakan penguji yang ditulis dalam campuran Bash, Perl, dan A Pear Tree):

Cobalah secara online!

Tautan ini juga menghasilkan blok kode / -format yang terlihat di atas, dan memformat kode menjadi segi enam untuk Anda:

          # v 1 6 / " < " 6 / b
         . q @ " ( : : : T ) : :
        ( 2 2 ) S # ; n 4 " 1 4 "
       # > 3 N 6 @ 1 5 o | > ^ * t
      t t * ~ + + ~ ~ ~ % # = ~ n J
     < R " 1 2 " ; # [ # < | p r i n
    t ( ( e v a l ( " 1 \ x 2 f 2 " )
   a n d ( 9 ) o r ( 1 3 ) ) - ( 0 a n
  d 4 ) ^ ( 1 ) < < ( 6 5 ) > > 6 2 ) o
 r ' ( \ { ( \ { } ) ( \ { } [ ( ) ] ) }
\ { } ) ( \ { } \ { } ) ' # 4 6 ( 8 + 9 +
 9 + 9 + 9 + = ! ) = # p r i n t ( 1 7 )
  # ] # e c h o 2 1 # | / = 1 / 2 4 = x
   = 9 [ < $ + @ + - @ @ @ @ = > + < @
    @ @ = > + < ? # > + . - - . ] / #
     8 . d g g i 2 . | 1 | 6 $ / / '
      ' 2 5 # > s a y 2 7 # T 2 2 2
       9 9 9 + / + 2 3 ! @ " 2 6 .
        . . . . . . . . . . . . .
         . . . . . . . . . . . .
          . . . . . . . . . . .

Tiga bahasa hilang: V terlalu lambat, dan Reng dan Modular SNUSP tidak diinstal pada TIO. Untungnya, ketiganya memiliki penerjemah online:

  • Anda dapat menguji program dalam V / Vim (output yang dimaksudkan: 2) di sini di TIO.
  • Ada juru bahasa Reng online (keluaran yang dimaksudkan: 19) di sini .
  • Ada penerjemah Modular SNUSP online (keluaran yang dimaksudkan: 31) di sini . (Ini diiklankan hanya sebagai penerjemah SNUSP, tetapi SNUSP Modular adalah dialek yang sebenarnya diterapkan, seperti yang terlihat oleh @tanda - tanda di seluruh halaman.)

Ketiganya menghasilkan output yang dimaksudkan, sehingga semua 31 program diuji dengan benar. (Satu hal yang sedikit mengkhawatirkan saya adalah apakah program Whitespace diakhiri dengan benar; namun, spasi putih di sini identik dengan pengiriman sebelumnya, sehingga keduanya benar atau keduanya salah. Jika ternyata program tersebut memang mengakhiri salah, kedua program kemungkinan dapat diperbaiki dengan cara yang sama.)

Penjelasan

Pertama, Hexagony, yang sepertinya selalu perlu diubah. Ini sebenarnya jauh lebih sederhana dari sebelumnya; Saya memindahkan kode Hexagony ke tepat setelah kode Trigger, yang berarti bahwa itu sangat dekat akhir program, dan "kapsul" Hexagony yang mencetak 23 dan keluar akan berjalan segera. Baris terakhir umumnya terlihat seperti tempat yang baik untuk meletakkan kapsul, karena itu berarti lebih sedikit perintah yang berpotensi mengganggu Hexagony akan berjalan.

Semua perubahan lain harus dilakukan dengan penambahan kode SNUSP Modular. Hal pertama yang perlu diperhatikan adalah bahwa SNUSP mulai mengeksekusi pada $karakter pertama dalam program, dan merupakan bahasa 2D yang keluar setelah keluar dari tepi program, dan dengan demikian dengan menempatkan program SNUSP di akhir garis panjang (di dalam kode Thutu, pada titik di mana Thutu akan menerima hampir semua hal), kami dapat memastikan bahwa SNUSP tidak melihat kode apa pun dari bahasa lain, dan sebagian besar bahasa lain tidak akan peduli dengan SNUSP. Satu bahasa yang benar - benar peduli adalah Perl 6, yang merupakan kurung parsing angle; Saya <segera meletakkan kode SNUSP di depan untuk membuatnya senang (karena kurung secara alami hampir cocok pula) Bahasa lain yang peduli adalah SMBF;.output dalam SMBF dan SNUSP, dan kami tidak ingin membuat output tambahan. Untungnya, seperti yang terlihat oleh SMBF, program ini <.>>[…]diikuti oleh kode SNUSP, yaitu elemen rekaman saat ini adalah 0. Jadi, melampirkan kode SNUSP dalam tanda kurung siku "komentar keluar" dari sudut pandang SMBF.

Sedangkan untuk kode itu sendiri, ia menggunakan trik terkenal untuk menulis konstanta di Modular SNUSP di mana Anda menulis banyak perintah "mulai prosedur" dalam satu baris dan secara efektif membuat semacam angka dasar-Fibonacci. Ide dasarnya adalah yang +mengkodekan angka 1; @menambahkan nomor yang diwakili oleh kode setelahnya, dan nomor yang diwakili oleh kode setelah itu dikurangi karakter pertama; dan =merupakan no-op (dengan demikian @=akan menggandakan nomor di sebelah kanannya). Dalam sistem ini, saya memilih @@@@=+@@@=+#representasi nomor 48.

Ada masalah di sini; metode standar penulisan konstanta di SNUSP meninggalkan aliran kontrol di belakang dimulainya program, dan dengan oneliner (yang ingin saya tulis di sini untuk alasan yang jelas), tidak ada cara untuk mengubah IP untuk menunjuk ke arah mana pun selain benar. Ini berarti kita harus mendapatkan IP untuk melewati seluruh definisi konstan dan melanjutkan ke kanan, tanpa keluar dari program (yang #biasanya dilakukan). Untuk mengatasi ini, saya dengan hati-hati menggunakan definisi nomor yang +selalu didahului oleh =. Ini berarti bahwa saya dapat menulis kode untuk mengatur sel kedua ke 48 melalui @@@@=>+<@@@=>+<#, aman dalam pengetahuan bahwa tidak ada >perintah yang akan dilewati oleh@perintah (dan dengan demikian kami tetap mengontrol penunjuk kaset). Selain itu, kita tahu bahwa pada final #, sel tape pertama masih akan memiliki nilai awalnya. Oleh karena itu, kita dapat menggunakan sel tape pertama sebagai penanda untuk mengetahui apakah akan kembali dari definisi prosedur atau apakah untuk melanjutkan ke kanan (kita berada dalam banyak prosedur ketika melakukan itu, tetapi kita keluar dari program dengan jatuh dari tepi sehingga tidak masalah).

Kode SNUSP terakhir, oleh karena itu, adalah $+@+-@@@@=>+<@@@=>+<?#>+.--.. Ini $menandai dimulainya program. +@+-setel elemen rekaman pertama menjadi 1 ( ++-, tetapi begitu prosedur dimulai dengan @pengembalian, ia akan mulai menjalankan kode dari -seterusnya, dengan demikian mengatur elemen pita kembali ke 0. ?#mengakhiri prosedur hanya jika elemen rekaman pertama bukan nol; dengan demikian kita akhirnya berakhir setelah #dengan elemen pita kedua diatur ke 50 (48 dari definisi konstan, ditambah 2 dari dua yang >+<ditemui ketika pergi ke kanan setelah itu). Maka semua yang perlu kita lakukan adalah >+.--.untuk menghasilkan kode ASCII 51 ( 3) dan 49 ( 1), dan jatuh dari tepi program ( ]adalah no-op di SNUSP, dan /mencerminkan aliran kendali secara vertikal sehingga mengalir keluar dari tepi atas program); bit ini bekerja identik dengan brainfuck.


20

11. Befunge 98 , 102 byte

#v;2^0;7||"<+0+0+0+<;n4
#v0#_q@
#>3N.
#|\w*
#8  ^1b0<
#|
#M`
print(None and 9or 1/2and 1or 5)
#jd5ki2

Cetakan:

Sejujurnya, saya tidak tahu mengapa kode Vim membutuhkan waktu 1 menit untuk output. Juga, tidak tahu bagaimana Retina bekerja.

Penjelasan:

#v          Skips the v, which would send the IP down
  ;         Unlike '93, where ; is a no-op, '98 skips to the next ;
            and doesn't execute anything in between
   2^0;     Not executed, unlike Befunge 93
       7|   Pushes 7 onto the stack, and then sends the IP up, because 7 is not 0
n0b1        n clears the stack, and #s are pushed until the stack is [0, 11, 1
    *.      multiplies the top 2 values of the stack to give 11, and prints it (yay!)
      _     Sends the IP right, because the top value of the stack is 0
       q    Ends the program (no-op for '93, which continues to @)

Hal yang perlu diperhatikan:

  • Sebelah 0sebelah btidak sepenuhnya diperlukan dalam keadaan kode saat ini, dan tumpukan telah dihapus. Itu dapat dihapus jika perlu, tetapi memungkinkan untuk manipulasi tumpukan lain sebelumnya sebagai bagian dari program yang mungkin di masa depan.
  • Itu _q@ada di sana sebagai bagian dari Retina (Tidak berfungsi tanpa itu, jangan tanya kenapa). Tambahan qjuga memungkinkan kode '98 menjalankan toperasi, yang membagi IP (bersama dengan membuat program Retina mencetak 8 bukannya 7)
  • Ini _bukan sederhana >karena itu akan mengacaukan bagian SMBF.

Sunting: Baru menyadari bahwa _q@seharusnya @00(Di mana 0s dapat ~ karakter apa saja) untuk membuat program lebih fleksibel di masa depan. Saya terlalu malas (dan lelah) untuk mengubah semua tautan saat ini. Akan berkeliling untuk itu pada akhirnya ...

Sunting 2: Saya Tidak mengharapkan 6 lebih banyak jawaban ini dengan cepat. Saya kira itu tetap apa adanya. Kerja bagus semuanya!


Heh, saya menulis jawaban 11 saya, hanya untuk menyadari bahwa itu sudah diposting, sekarang saya mengubahnya ke jawaban 12 :)
Sapi dukun

Adakah ide mengapa Vim membutuhkan waktu begitu lama untuk dieksekusi?
MildlyMilquetoast

@MistahFiggins Saya kira itu karena kode harus dikonversi menjadi penekanan tombol, tapi selain itu, saya tidak tahu
Sapi dukun

Saya menulis penerjemah vim itu, dan saya tidak tahu mengapa perlu waktu lama. Saya belum melihat banyak masalah kinerja sebelumnya, tapi itu karena sebagian besar jawaban V / Vim saya kurang dari 40 byte. Tidak begitu yakin apa yang menyebabkannya, tetapi banyak orang mengeluh tentang hal itu di utas ini.
DJMcMayhem

20

35. INTERCAL (C-INTERCAL), 631 byte

#v`16/"<"6/b.q@"(: ::Q):  ␉␉␉␉ :(22)S#;n4"14"
#>3N6@15o|>␉^*ttt*~++~~~%
#= >␉1#v#v0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#[␉
#`<`|
print((eval(" 1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or' (\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
""""#//
=begin␉//
$'main'//
#-3o4o#␉
=end   #//
"""#"#//
#0]#echo 21#/ (\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE) a
#   +/Jn~
#8␛dggi2␛`␉|1|6$//''25  >>>#>27.say# =#print(17)#$nd^_^_.]Q222999/+23!@1#"26

adalah tab literal, karakter ESC literal; Stack Exchange akan memotong-motong program sebaliknya. Saya sarankan untuk menyalin program dari kotak "masukan" dari tautan TIO di bawah ini, jika Anda ingin mengerjakannya.

Cobalah secara online!

Kehabisan

Program ini mencetak 35 di INTERCAL, 34 di Rail, 33 di Insiden, 32 di Whirl, 31 di SNUSP Modular, 30 di Whitespace, 29 di Trigger, 28 di Brain-Flak, 27 di Perl 6, 26 di 05AB1E, 25 di Pip , 24 di Thutu, 23 di Hexagony, 22 di Underload, 21 di Nim, 20 di Prelude, 19 di Reng, 18 di Cardinal, 17 di Julia, 16 di Pyth,15 di Haystack, 14 di Turtlèd, 13 di Ruby, 12 di Fission, 11 di Befunge-98, 10 di Befunge-93, 9 di Perl 5, 8 di Retina, 7 di Japt, 6 di SMBF, 5 di Python 2, 4 in> <>, 3 di Minkolang, 2 di V / Vim, dan 1 di Python 3.

Verifikasi

Sebagian besar bahasa diuji oleh driver tes yang ditunjukkan di atas. Anda dapat menguji Reng di sini dan SNUSP Modular di sini ; mereka menghasilkan 19 dan 31 masing-masing, sesuai kebutuhan. Saya menguji Insiden secara lokal pada sistem saya sendiri, menggunakan penerjemah resmi.

Perhatikan bahwa saya menambahkan beberapa perubahan pada driver tes untuk membuatnya lebih mudah menemukan karakter yang tersembunyi; berbagai NUL byte telah merayap ke dalam keluaran program dalam bahasa tertentu. Saya telah memutuskan bahwa ini mungkin bukan masalah, karena a) berbagai pengiriman telah melakukannya, dan b) penerjemah Befunge tampaknya menambahkan byte NUL tambahan meskipun tidak ada dalam program yang menyiratkan bahwa (kecuali saya sudah melewatkan sesuatu), jadi itu pasti sudah berlangsung lama dan mungkin bagian dari cara kerja penerjemah. (Perhatikan bahwa bahasa yang masih menghasilkan byte NUL - Befunges dan Minkolang - belum berubah kode untuk pengiriman ini.)

Pengajuan Rail sebelumnya keluar melalui crash, yang tidak diizinkan, tetapi ini mudah diperbaiki (dengan menambahkan a #di akhir program Rail dan menyesuaikan Hexagony agar sesuai) dan jadi saya tidak menganggapnya sebagai masalah besar. Rel dalam solusi ini keluar dengan benar.

Penjelasan

Cara kerja kode INTERCAL

INTERCAL mem-parsing seluruh program. Namun, kesalahan sintaks adalah hal runtime di INTERCAL, bukan waktu kompilasi, dan ini sering digunakan untuk membuat komentar. (Jika kesalahan sintaks mencoba dieksekusi, program itu akan macet dengan kesalahan ICL000I, bertentangan dengan apa yang Wikipedia salah klaim. Tetapi jika Anda dapat mencegahnya mengeksekusi entah bagaimana - dan INTERCAL memiliki banyak cara untuk mencegah perintah berjalan - itu akan cukup senang tidak mengeksekusi tanpa menyebabkan masalah.)

Dengan demikian, kita dapat mencegah sampah di akhir file berjalan hanya dengan keluar dari program secara eksplisit terlebih dahulu (sesuatu yang diperlukan pula, karena INTERCAL lumpuh jika akhir program tercapai tanpa perintah keluar yang eksplisit). Menangani awal program lebih menarik, dan mengeksploitasi bug parser. Anda dapat menulis sesuatu seperti DO %20 READ OUT #8output VIIIdengan probabilitas 20% (dan jika tidak melakukan apa-apa). Sejauh yang saya tahu, C-INTERCAL mem-parsing% tunggal pada baris kedua sebagai menunjukkan probabilitas 0% untuk menjalankan perintah pertama, dan dengan demikian berakhir secara konsisten tidak menjalankannya setiap waktu. (Saya tidak yakin mengapa ia mem-parsing seperti itu, tetapi melihat kode yang dikompilasi menunjukkan itu menghasilkan angka acak dan membandingkannya dengan 0.)

Inilah tampilan program INTERCAL sebelum memasangnya di sekitar polyglot lainnya:

DO,1<-#2
DO,1SUB#1<-#52
DO,1SUB#2<-#32
DOREADOUT,1
PLEASEGIVEUP

Ini cukup sederhana: instantiate array 2-elemen; atur elemen menjadi 52 dan 32 (desimal) masing-masing (pengkodean string INTERCAL sebaiknya tidak disebutkan; saya lupa cara kerjanya dan harus melakukan berbagai percobaan untuk mencari tahu mengapa angka-angka ini disandikan 35); bacakan untuk output standar; dan keluar dari program. Saya menambahkan TOLONG tambahan di akhir untuk menghentikan pernyataan GIVE UP, memulai pernyataan baru untuk sampah di akhir program, sambil tetap menjaga batas yang dapat diterima untuk percakapan sopan. Tentu saja, INTERCAL tidak terlihat seperti itu di produk jadi; Saya akan menjelaskan mengapa saat kita pergi.

Terkubur di bawah beban Ses

Masalah paling jelas dengan program INTERCAL adalah bahwa ia berisi surat itu S. Ini cukup banyak tidak dapat dihindari, karena tidak ada cara untuk mengindeks array tanpa menggunakan huruf yang dimaksud. Namun, Sadalah perintah keluaran di Underload, dan tidak ada cara untuk mencegahnya menguraikan seluruh program. Satu-satunya solusi adalah menempatkan kode INTERCAL di dalam tanda kurung, ekuivalen Underload dari string literal, sehingga tidak langsung berjalan.

Namun, kami memiliki dua ^karakter di akhir program, yang mengeksekusi kode Underload; jadi Ses itu akan tetap dieksekusi jika kita tidak melakukan sesuatu tentang hal itu. Saya bisa mengubahnya ke karakter lain, tetapi memutuskan lebih mudah untuk melindungi kode sehingga menjadi tidak berarti. alolos string dalam Underload (yang berarti bahwa ^, setelah mengeksekusi string, hanya akan menghapusnya lagi daripada menghasilkan efek samping yang berbahaya). Kami sudah memiliki satu ayang saydigunakan dalam kode Perl 6 (yang dalam susunan kode ini, sebenarnya cukup karena perubahan yang tidak terkait). Namun, agar orang tidak harus bergantung pada itu, saya menambahkan yang lainapada akhir baris (saya ingin karakter di sana tetap untuk membuat apa yang akan menjadi jejak ruang terlihat, dan karena Hexagony perlu padding seperti itu; perhatikan bahwa Hexagony cukup mudah untuk diperbaiki dalam program ini, dan tidak benar-benar perlu diskusi terpisah). Jadi kode Underload sedikit kurang rapuh dari seharusnya.

Pendahuluan banyak pekerjaan dan kebingungan

Ah, Pendahuluan. Biasanya bukan bahasa yang paling sulit, tapi sudah pasti kali ini. Ada dua masalah nyata: satu adalah bahwa menambahkan tanda kurung tambahan pada garis yang jauh jauh berisiko mengganggu aliran kontrol program Prelude (karena mereka membuat setara dengan whileloop), dan satu hanya masalah mencegah mereka melapisi naik secara vertikal (yang bertanggung jawab untuk sebagian besar pergerakan acak spasi putih pada garis). Perhatikan bahwa Whitespace memberi saya beberapa masalah juga, tetapi program ini setara dengan yang sebelumnya dari sudut pandang Whitespace, jadi itu cukup banyak kasus "memperbaiki Prelude tanpa melanggar Whitespace".

Saya tidak terlalu yakin bagaimana Prelude sebenarnya bekerja pada saat ini. Ada beberapa perbaikan yang ditujukan untuk itu, seperti 0 di dekat sudut kiri bawah, tetapi jelas tidak berfungsi seperti yang saya inginkan. (Kode Julia juga akhirnya bergerak ke bagian bawah garis karena tanda kurung dalam printpernyataannya sangat sulit untuk ditangani.) Mungkin kita harus meninggalkannya sebagai sebuah misteri.

Kerusakan pada reaktor fisi

Meskipun perubahan di atas adalah untuk masalah yang cukup halus yang sulit untuk diperbaiki, ada masalah yang jauh lebih jelas; DOREADOUTcocok dengan regex R...O, dan dengan demikian akan menyebabkan Fisi untuk menghasilkan output yang tidak diinginkan pada siklus keempat, yang tidak cukup waktu untuk menghasilkan output yang diinginkan 12. Dan INTERCAL hanya memiliki satu instruksi yang menghasilkan output (kecuali jika Anda menghitung macet sebagai output). Salah satu perbaikan untuk ini adalah mencoba menambahkan spasi putih di antara READdan OUT, untuk memberi kita waktu untuk mencegat output, tetapi itu membuat Whitespace marah. Jadi untuk sementara, saya pikir program ini tidak mungkin; R, L, U, Dan Dsemua titik masuk di Fisi, dan semua mampu berpotensi menjalankan kode bermasalah, dan kata kunci INTERCAL harus dalam huruf besar.

Namun, ada perbaikan, dan yang cukup mengejutkan. Sebagai bagian dari upaya internasionalisasi, C-INTERCAL sebenarnya menerima kata kunci dalam berbagai bahasa, dengan dukungan untuk bahasa Inggris dan Latin. Kami tidak bisa menghindari Sseperti ini, tetapi kami bisa menghindari O; FACadalah pengganti yang sangat baik untuk DO, dan juga LEGERE EXberarti hal yang sama READ OUT. (Program akhirnya berakhir dalam campuran bahasa Inggris dan Latin, tapi tidak apa-apa; itu hampir tidak membuatnya kurang dibaca.) Dengan demikian, kita bisa dengan senang hati membiarkan Fission menjadi gila di sudut kanan bawah, dan tidak membiarkannya menghasilkan apa pun. keluaran. Kita dapat mengubah kode Fisi yang sebenarnya untuk diakhiri dengan *alih - alih;, yang keluar dari keseluruhan program dan bukan hanya satu utas; kode ini berjalan cukup cepat, sehingga keluar dari program sebelum semua titik masuk yang menyimpang punya waktu untuk melakukan kerusakan.

Rajut 6, Perl 6

Masalah berikutnya: The Perl 6 komentar bekerja dengan cara mencocokkan <dan >. Operator penugasan INTERCAL adalah <-. Untungnya, yang menambahkan ekstra pembukaan kurung, jadi aku hanya bisa menambahkan beberapa tanda kurung penutup untuk membatalkan mereka di lokasi yang unparsed dalam program (hanya setelah kode Pip, dalam hal ini).

Namun, saya tidak ingin mengubah anggaran spasi program, tetapi memindahkan kode Julia (untuk Prelude) akhirnya menambahkan ruang ekstra ke baris terakhir; Saya harus menghapus satu dari suatu tempat. Spasi ganda adalah penanda komentar di Pip, jadi saya hampir tidak bisa mengubahnya; satu-satunya pilihan yang tersisa adalah ruang di say 27. Peg golf Perl 5 akan segera berpikir "lakukan saja say+27" (unary +sering kali sangat berguna!), Tetapi sayangnya ini bukan sintaks Perl 6 yang valid.

Apa yang bisa kita lakukan adalah mengubah saysintaks fungsi menjadi sintaks metode. Literal integer memiliki banyak metode, termasuk satu untuk mencetaknya, sehingga 27.saymerupakan program yang valid dengan panjang yang sama.

Menjadi persegi? Jangan di sana

Jadi masalah berikutnya adalah saya menambahkan tambahan .ke program. Pengguna SMBF akan tahu bahwa itu jelas merupakan masalah dalam bahasa itu, menghasilkan output yang menyimpang (NUL byte dalam kasus ini). Ada sudah menjadi .keluaran liar memproduksi program terakhir, tapi itu tidak berarti saya tidak harus mengambil kesempatan untuk memperbaikinya.

Ide dasar di sini adalah membuat loop SMBF untuk mengomentari instruksi yang menyinggung. Ini berarti memindahkan tanda kurung siku. Saya mengambilnya dari sekitar kode SNUSP (karena mereka hanya ada demi Insiden, dan Insiden tidak peduli di mana dalam program mereka), dan menempatkan braket pembuka di awal kode INTERCAL, dan menutup braket tepat sebelum Pemicu (dengan demikian menyembunyikan kedua .s) dengan rapi .

Sayangnya, tanda kurung siku bermakna bagi Retina; ia melihat […<-#…dan mengatakan "itu tidak masuk akal, Anda tidak dapat membuat rentang itu karena <tidak datang sebelumnya #". Untungnya, ini mudah diperbaiki dengan backslash yang ditempatkan secara strategis.

Insiden tengah program

Ini terjadi jawaban terakhir, dan itu mungkin akan terjadi berulang kali mulai sekarang; berbagai string terjadi secara acak terjadi tiga kali, dan bergeser di sekitar pusat program dari sudut pandang Insiden.

Token yang paling mendesak untuk ditangani adalah 1#, yang muncul tiga kali jika Anda membuat perubahan ini secara naif: #= >␉1#di awal baris ketiga __DATA__=1#,, dan echo 21#. Mengapa ini menjadi masalah? Karena 1#pada baris ketiga tumpang tindih #vtepat setelah itu, dan dua token yang tumpang tindih menyebabkan keduanya tidak dihitung. Dan #vadalah token yang kami gunakan untuk mengomentari kode sebelum program Insiden keluar! Saya memperbaikinya dengan menyelinap di 1#akhir program (hanya tiga karakter yang mengikuti); tidak ada bahasa yang mem-parsing bagian program yang melakukan apa pun dengannya.

Ada berbagai token bermasalah lainnya untuk dihadapi. Sepasang adalah surat tunggal, Pdan U; Saya berurusan dengan ini melalui mengubah beberapa no-ops pengisi dalam kode Insiden dari xke Patau Umasing - masing, memberikan salinan keempat. Perubahan ke kode Fission meninggalkan *sebagai token, tetapi terutama, ini terbagi berbeda dari normal, muncul dua kali sebelum kode Insiden dan hanya sekali setelah itu. Alih-alih menghapusnya, oleh karena itu, saya menggunakannya untuk menyeimbangkan sebagian LEtoken baru yang muncul dalam kode INTERCAL. Itu cukup untuk mendorong pusat program kembali0otoken. Tentu saja, perubahan pada program sangat mungkin mengganggu ini. (Upaya saya untuk memasukkan Insiden ke TIO gagal karena libdivsufsort tidak tersedia di sana, jadi sepertinya kami mungkin mendapat manfaat dari juru bahasa baru, terutama dalam JavaScript sehingga dapat berjalan online. Jika Anda tertarik, lihat ini pertanyaan .)


1
Wow, tantangan ini sangat mengejutkan. Kerja bagus!
MildlyMilquetoast

Latin?! Wow, pemecahan yang hebat! Saya suka bahwa kode mengatakan 'tolong menyerah' sekarang. Sepertinya saya berani untuk berhenti.
Peluang

19

1. Python 3 (8 byte)

print(1)

Program ini mencetak 1 dengan Python 3.

Memulai ini dengan Python 3 karena saya tahu itu baik untuk polyglots dan dapat diambil di sejumlah arah yang berbeda (juga, saya ingin memastikan bahwa jawaban pertama adalah dalam bahasa yang relatif normal, daripada esolang yang tidak masuk akal yang sulit untuk polyglot dengan).


Apakah>>> menjadi pilihan yang baik untuk bahasa kedua (sehingga kita mulai ruang 2d)?
Sapi dukun

Jadi itu berarti jawaban selanjutnya tidak boleh lebih dari 9 byte? Itu akan sangat sulit untuk menghasilkan yang lain.
DJMcMayhem

1
@DJMcMayhem Setiap jawaban harus tidak lebih dari 20% atau 20 byte (mana yang lebih besar)
Sapi dukun

19

10. Befunge , 95 byte

#v02^0;7||"<+0+0+0+<;n4
#v0#@00
#>3N.
#|\w*
#8
#|
#M`
print(None and 9or 1/2and 1or 5)
#jd5ki2

Ada karakter ESC literal antara jdan ddi baris terakhir (grr, @ ais523). Itu tidak termasuk dalam kode ini. Untuk mendapatkan kode aktual, buka Try it onlinetautan.

Ini mencetak 1 di Python 3, 2 di Vim, 3 di Minkolang, 4 di <> <, 5 di Python 2, 6 di SMBF, 7 di Japt, 8 di Retina, 9 di Perl, dan 10 di Befunge.

Kode ini dibagikan *dengan Retina dan .dengan Minkolang dan SMBF.

Cobalah online

Penjelasan

Program yang sebenarnya

#v02^
    @
    .
    *



    t
    5
#v02^

Baris terakhir ditulis untuk kejelasan ( taman bermain Befunge adalah siklik.)

#

Trampolin, lewati v

02^

Dorong 0kemudian 2dalam tumpukan dan naik.

5t*.@

Push 5, no-op, gandakan dua elemen dalam tumpukan ( 2dan 5), cetak, akhiri program.


1
Ini membuat SMBF mencetak byte nol pada awalnya ..
PurkkaKoodari

@ Pietu1998 diperbaiki!
JungHwan Min

Hei, bukan saya yang memilih untuk menggunakan bahasa di mana banyak perintah paling penting adalah karakter yang tidak dapat dicetak ... (Dalam berita lain, saya mempertimbangkan Befunge sebagai kemungkinan yang kuat untuk menambahkan polyglot ini; sepertinya cocok dengan bahasa lain. Saya suka cara Anda melakukannya, meskipun mungkin perlu dimodifikasi agar lebih cocok.)

@ ais523 Saya setuju bahwa memodifikasi kode ini mungkin sulit. Untuk meringankan ini, saya memasukkan beberapa 0tanda untuk menunjukkan bahwa karakter tersebut dapat berupa apa saja (kecuali "<+0+0+0+<;n4bagian) dan bagian dari kode Befunge dapat dipindahkan. Dan tip untuk orang berikutnya: sebagian besar karakter adalah no-op di Befunge, jadi menambahkan lebih banyak garis tidak akan mempengaruhi kode Befunge.
JungHwan Min

Berpikir tentang membuat pengajuan befunge-98 (atau funge serupa lainnya), karena mereka menambahkan sejumlah operasi yang adil yang bukan-ops dalam biasa '93. Mungkin sulit untuk menyesuaikan, dan saya perlu mencari tahu bagaimana semua bahasa lain bekerja sehingga saya bisa mengatasi mereka ...
MildlyMilquetoast

19

21. Nim (161 bytes)

#v`16/"<"6/b.q@#;n4"14""
#>3N6@15o|> ^*ttt*~++ %
#=~nJ<R"12";
#[

print((1/2and 9 or 13)-(0and+4)^1<<65>>62)#46(89999+++++!)=#print(17)#]#echo 21
#8dggi2` |1|6

Dua <ESC>s, antara 8ddan di antara 2`baris terakhir. Anda dapat mengatakan bahwa yang sebelumnya saya sedang bermain golf dengan tergesa-gesa, karena saya bangun pagi ini dan menyadari bahwa saya dapat mengambil banyak lagi. Saya memiliki 152 byte tetapi tampaknya hanya bekerja di Perl 5.24.0, jadi untuk kepentingan kompatibilitas dengan TIO saya telah menyimpan ekspresi asli untuk saat ini.

Mencetak 1 dalam Python 3, 2 dalam V, 3 di Minkolang, 4 di> <>, 5 di Python 2, 6 di SMBF, 7 di Japt, 8 di Retina, 9 di Perl, 10 di Befunge-93, 11 di Befunge -98, 12 dalam Fission, 13 di Ruby, 14 di Turtléd, 15 di Haystack, 16 di Pyth, 17 di Julia, 18 di Cardinal, 19 di Reng, 20 di Prelude dan 21 di Nim .

Perhatikan bahwa Nim di ideone.com menggunakan versi 0.11.2, yang sedikit terlalu tua, karena program ini bergantung pada #[ ... ]#komentar multiline yang ditambahkan pada awal 2016.

Berkat interpreter Windows Cardinal, alur kerja saya sekarang terdiri dari dua laptop dan Python http.serverdi antaranya.


Edit - beberapa petunjuk lagi:

  • Pada 8awal baris terakhir adalah untuk menetapkan batas Retina ke 8 pertandingan pertama, jika tidak maka Retina akan menghasilkan 2. Perhatikan bahwa ini berarti regex baris terakhir hanya perlu mencocokkan setidaknya 8 kali di baris terakhir kedua sekarang, dibandingkan dengan tepat 8 - selama campur tangan saya, saya memodifikasi Prelude untuk mendapatkan Retina dengan benar, tetapi ternyata pada akhirnya tidak diperlukan. .
  • Kutipan yang tidak cocok pada akhir baris pertama adalah agar Pyth tidak mengeluh tentang sintaks yang tidak valid untuk sisa kode.
  • Jika Anda memodifikasi baris kedua, Anda mungkin harus mengubah 6@untuk Minkolang, yang membuat pointer melompat 6 spasi untuk mendarat di ^.
  • Ada sepasang []sekarang, jadi SMBF perlu berada di sel 0 sebelum hits [, atau alternatif interior perlu membersihkan sel.

Mungkin ada lebih banyak golf (bahkan sekarang saya melihat ruang yang menyimpang sebelum %Cardinal), tapi saya harus benar-benar berhenti bermain golf di dini hari.


1
TIO sekarang mendukung Cardinal
MildlyMilquetoast

19

51. Majelis (x64, Linux, AS) , 1086 byte

#16  "(}23!@)(" 3//*v\D@;'[af2.qc]'#)"14";n4
#/*` PkPPZ (22)S"[!(>7 7*,;68*,@;'1,@␉␉␉␉ q
#>␉
# >36!@␉
#`<`
#<]+<[.>-]>[
#{
#z}
#
#=x<R+++++[D>+++++++EAL+++<-][pPLEASE,2<-#2DO,2SUB#1<-#52PLEASE,2SUB#2<-#32DOREADOUT,2DOGIVEUPDOiiipsddsdoh]>+.-- -. >][
#x%+>+=+~tt .
#D>xU/-<+++L
#R+.----\).>]|
#[#[(}2}20l0v01k1kx0l0ix0jor0h0h1d111x0eU0bx0b0o1d0b0e0e0@O6O4/0m1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10vx0v0l111111^_)  0046(8+9+9+9+9+=!)
###|
'\';echo 50;exit;';print((eval("1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or"'x"or'({({1})({1}[(0)])}{1}\{1})'#}#(prin 45)(bye)|/=1/24=x<$+@+-@@@@=>+<@@@=>+<?#d>+.--./
__DATA__=1#"'x"//
#.\."12"__*'
###;console.log 39
""""#//
=begin //
#sseemeePaeueewuuweeeeeeeeeeCisajjap*///;.int 2298589328,898451655,12,178790,1018168591,84934449,12597/*
#define p sizeof'p'-1?"38":"37"
#include<stdio.h>
main ( )/*/
#
#"`#"\'*/{puts (p);}/*'"`"
/*
<>{#65}//
#}
disp 49#//
#{
1}<>//
$'main'//
#-3o4o#$$$
#<R>"3"O.
=end #//
"""#"#//
#}
#s|o51~nJ;#:p'34'\=#print (17)#>27.say#]#print(47)#]#echo  21
#sss8␛dggi2␛ `|1|6$//''25  16*///89^_^_Z222999"26

adalah tab literal, karakter ESC literal; Stack Exchange akan memotong-motong program sebaliknya. Saya sarankan untuk menyalin program dari kotak "masukan" dari tautan TIO di bawah ini, jika Anda ingin mengerjakannya.

Ingin belajar lebih banyak? Coba obrolan poligot !

Cobalah online!

Skor VIP ( Versatile Integer Printer ): .008186 (untuk meningkatkan, entri berikutnya tidak boleh lebih dari 1151 byte)

Program ini mencetak 51 di Assembly, 50 di Bash, 49 di Octave, 48 di Deadfish ~, 47 di Lily, 46 di Cubix, 45 di PicoLisp, 44 di alphuck, 43 di reticular, 42 di evil, 41 di brainf *** , 40 di Minimal-2D, 39 di CoffeeScript, 38 di C, 37 di C ++, 36 di Labyrinth, 35 di INTERCAL, 34 di Rail, 33 di Insident, 32 di Whirl, 31di Modular SNUSP, 30 di Whitespace, 29 di Trigger, 28 di Brain-Flak, 27 di Perl 6, 26 di 05AB1E, 25 di Pip, 24 di Thutu, 23 di Hexagony, 22 di Underload, 21 di Nim, 20 in Prelude, 19 di Reng, 18 di Kardinal, 17 di Julia, 16 di Pyth, 15 di Haystack, 14 di Turtlèd, 13 di Ruby, 12 di Fission, 11 di Befunge-98,10 di Befunge-93,9 di Perl 5, 8 di Retina, 7 di Japt, 6 di SMBF, 5 di Python 2, 4 di> <>, 3 di Minkolang, 2 di V / Vim, dan 1 di Python 3.

Verifikasi

Sebagian besar bahasa diuji oleh driver tes yang ditunjukkan di atas.

  • Reng dapat diuji untuk menghasilkan 19 di sini .

  • SNUSP modular dapat diuji untuk menghasilkan keluaran 31 di sini .

  • Bentuk kubus Cubix dilihat di sini

  • Insiden diperiksa dengan menjaga token seimbang seperti yang dijelaskan dalam jawaban sebelumnya.

  • Untuk Deadfish ~, dapat diuji untuk menghasilkan 48 dengan ini . Perhatikan bahwa Deadfish ~ mengambil polyglot untuk diberi makan stdin, tetapi dan mencetak sejumlah >>prompt ke output standar, yang merupakan konsekuensi yang tidak dapat dihindari dari menjalankan program Deadfish ~.

  • Majelis dapat diuji untuk menghasilkan 51 di sini

Terima kasih dan selamat

Ketika jawaban 50-in-1-k @ ais523 turun 2 minggu lalu, air mata mengalir di pipiku. Itu terlalu indah. Dan itu di Bash. Itu terlalu sempurna.

Saya menoleh ke istri saya dan berkata, “Saya pikir polyglot sudah selesai,” merasa sangat bangga.

Dia berbalik untuk menatap mataku, berhenti sejenak, dan berkata, “Bagus. Sekarang ambil sampahnya. ”

Apa yang dia maksudkan adalah dia merasakan kegembiraan yang dalam bagi saya dan teman-teman internet saya. Terima kasih dan selamat untuk semuanya.

Penjelasan Majelis

Pada hari-hari berikutnya, pikiran saya terus berkeliaran ke sesuatu yang dikatakan @ ais523 dalam obrolan polyglot sesaat sebelum memposting Bash. Dia menunjukkan bahwa beberapa rasa perakitan menggunakan #komentar garis berdasarkan dan /*memblokir komentar. Ya sudah cukup bagi saya untuk perlahan-lahan kehilangan ingatan selama 2 minggu ke depan.

Ada semacam tantangan implisit dalam polyglots untuk memasukkan bahasa yang sah. Saya menggunakan istilah yang sah di sini dengan sangat longgar, tetapi saya pikir kita semua bisa mengerti apa yang saya maksudkan. Itu adalah satu hal untuk memasukkan Brainf ***, tapi itu hal lain yang sepenuhnya termasuk orang-orang seperti Mathlab atau R. Assembly tentu saja termasuk dalam kategori yang terakhir, dan pikiranku tidak bisa membiarkannya pergi. Tapi aku tidak tahu apa-apa tentang Majelis, jadi ini adalah perjuangan berat.

Setelah membenturkan kepala saya terhadap masalah untuk sementara waktu, mencari cara untuk Assembly dan C / C ++ untuk hidup berdampingan, saya menemukan ini adalah dokumentasi untuk assembler GNU:

Agar kompatibel dengan assembler sebelumnya, baris yang dimulai dengan '#' memiliki interpretasi khusus. Mengikuti '#' harus berupa ekspresi absolut (lihat Ekspresi): nomor baris logis dari baris berikutnya. Kemudian string (lihat Strings) diperbolehkan: jika ada itu adalah nama file logis baru. Sisa baris, jika ada, harus spasi putih.

Ini saya perhatikan kebetulan sangat mirip dengan direktif pra-prosesor kami untuk C / C ++ di baris 1 dari polyglot. Setelah beberapa percobaan dan kesalahan saya menemukan bahwa #1 “bla” 1//*akan memasukkan komentar blok hanya untuk Majelis.

Jadi poliglot dibuat.

Dengan masalah pemblokiran terbesar terpecahkan, saya berangkat untuk melihat contoh dunia halo ini.

.intel_syntax noprefix
.section .data
     msg: .asciz "51"
.section .text
.global _start
_start:
    # write syscall
    mov     rax, 1
    # file descriptor, standard output
    mov     rdi, 1
    # message address
    mov     rsi, OFFSET FLAT:msg
    # length of message
    mov     rdx, 14
    # call write syscall
    syscall
    #End the Program
    mov    rax, 60
    mov    rdi, 0
    syscall

Kredit Penulis Utama

Sebenarnya saya berbohong sesaat yang lalu, versi pertama dari kode Majelis yang saya gunakan adalah dalam sintaks AT&T, yang merupakan salah satu dari dua cabang Majelis sintaksis. Salah satu elemen utama sintaks AT&T adalah bahwa itu mendaftarkan referensi menggunakan %awalan dan ini adalah masalah untuk polyglot. Cardinal menggunakan %sebagai asal pointer, jadi jika kita mengotori banyak %tentang, itu akan seperti reaksi Fisi kedua.

Cabang sintaksis lainnya, yang tidak digunakan %sebagai awalan register, disebut sintaks Intel. Eksploitasi yang kami gunakan di polyglot untuk melewati baris pertama dan memasukkan komentar blok ada di GNU Assembler (disingkat GAS atau AS). AS memiliki fitur senang memungkinkan kedua cabang sintaksis. Anda hanya perlu menyatakan bahwa Anda ingin menggunakan sintaks Intel, yang terjadi pada Baris 1 dari kode Majelis.

Majelis menggunakan register, yang merupakan sejumlah kecil lokasi memori yang secara harfiah terletak pada CPU untuk kecepatan akses. Ini tidak unik untuk Majelis selain fakta bahwa penggunaannya tidak disarikan dari perhatian pengembang.

Ada berbagai jenis register yang digunakan untuk tujuan yang berbeda. Dari Wikipedia:

• Mengalikan / membagi AX, memuat & menyimpan string

• Jumlah CX untuk operasi string & shift

• Alamat port DX untuk IN dan OUT

• Daftar indeks BX untuk MOVE

• Poin SP ke atas tumpukan

• BP menunjuk ke dasar bingkai tumpukan

• SI menunjuk ke sumber dalam operasi stream

• DI menunjuk ke tujuan dalam operasi stream

AX digunakan dalam garis Fungsi _start di sini: mov rax, 1. Di rdalam raxmenunjukkan bahwa memori 64-bit. Jika kita menukar ini untuk e, itu akan menunjukkan memori 32-bit, yang benar-benar valid untuk dilakukan dengan prosesor 64-bit. Kami tidak akan menggunakan setengah dari memori yang tersedia. Untuk menunjukkan memori 16-bit, Anda hanya menggunakan ax, yang baik bagi kami karena kami hanya mencetak bilangan bulat. Jadi kita bisa bermain golf beberapa byte dengan mengubah semua referensi register menjadi 16-bit.

Oke, tidak semua referensi register bisa drop the r. mov rsi, OFFSET FLAT:msg. Jika Anda terbiasa dengan Majelis, tetapi bukan pernyataan ini, itu karena ini semi unik untuk AS. Setidaknya, itulah yang saya dapatkan dari ini , yang membantu saya menurunkan pernyataan menjadi adil lea rsi,m.

Setelah ini, saya menemukan bahwa saya bisa merobohkan _start:ke _pdan memotong .global _startsepenuhnya hanya dengan peringatan yang dikeluarkan. Kedua, msg:dikurangi menjadi hanya variabel karakter tunggal p:. Saya memilih puntuk variabel string dan fungsi awal untuk mengimbangi beberapa sMajelis yang ditambahkan untuk keuntungan Alphuck.

Kemudian, saya memasukkan ;perintah pembatas untuk menempatkan semuanya dalam satu baris. Ini terutama untuk menghindari #//jejak berlebihan pada setiap baris demi keuntungan Thutu. Juga, saya perhatikan bahwa Assembler kami tidak terlihat peka huruf besar-kecil, jadi saya hanya menggunakan berbagai karakter untuk menghindari ketidakseimbangan Insiden.

Golf ini mengantarkan kami ke:

.intel_syntax noprefix;.text;mov ax,1;mov di,1;lea rsi,m;mov dx,2;syscall;mov ax,60;mov di,0;syscall;m:.asciz "51"

Setelah semua ini, Japt dan Underload adalah satu-satunya anak yang bermasalah dalam jawaban ini. Japt memiliki beberapa daging sapi dengan *ditambahkan di baris 1, tetapi tampaknya diperbaiki dengan kembali ke puts(p);baris dari jawaban C ++. Saya akhirnya melempar (di baris ini juga dan kemudian menutupnya di baris Octive. Ini jadi Underload akan berhenti sefaulting. Perlakuan serupa juga diberikan pada saluran 1 untuk ditambahkan di *sana.

Ini cukup untuk memenuhi persyaratan byte dari tantangan ini. Sebenarnya saya memverifikasi ini dengan memproduksi versi polyglot ini. Tapi saya ingin berusaha meningkatkan skor VIP juga jika memungkinkan. Dan karena saya telah memenuhi semua persyaratan tantangan, saya merasa oke tentang berkolaborasi untuk menurunkan kode. Jadi saya berhenti di polyglot chat untuk mencari bantuan golf.

Kita harus masuk lebih dalam

@ ais523 mendemonstrasikan teknik menyampaikan instruksi kepada assembler sebagai kode mesin dengan pernyataan ini.

.text;.long 2298589328,898451655,12,178790,1018168591,84934449,12597 Kode mesin adalah serangkaian instruksi numerik yang dieksekusi langsung oleh CPU yang dapat direpresentasikan dalam desimal, Heksadesimal atau Oktal. Untuk keperluan kita, desimal adalah yang terpendek sejak (hex mengambil awalan 0xuntuk mewakili). The .longPernyataan sini adalah membuat pernyataan bahwa apa yang berikut adalah serangkaian instruksi kode mesin desimal.

Yah saya menyodok pernyataan ini juga sebentar untuk melihat apa yang akan memungkinkan assembler, dan membuat beberapa perubahan. Pertama, saya menemukan bahwa saya dapat menghapus .text;semua bersama-sama, dengan hanya masalah peringatan, yang merupakan penghematan byte yang cukup dijual. Kemudian beberapa saat kemudian saya juga menemukan, pernyataan ini dalam dokumentasi spesifikasi AS

.long sama dengan .int

Keren. Jadi, kita bisa melakukan swap itu dengan byte cepat. Sekarang perakitan kami, tetapi benar-benar kode mesin, dipotong untuk ini:

.int 2298589328,898451655,12,178790,1018168591,84934449,12597.

Walaupun ini semua baik dan bagus, cukup sulit untuk bekerja dengan kode mesin secara langsung dan saya ingin setidaknya melihat bagaimana membuat semua terjemahan. Jadi idealnya, kami ingin menyembunyikan kode mesin kembali ke perakitan. Cara termudah untuk melakukan itu adalah dengan mengambil objek dump, yang ditunjukkan oleh @ ais523 untuk saya dengan potongan kode ini.

Berikut cuplikan kode.

Dan inilah Majelis.

nop
mov    $0x1,%al
mov    %eax,%edi
lea    0xc(%rip),%rsi
mov    $0x2,%dx
syscall 
mov    $0x3c,%al
xor    %edi,%edi
syscall 
.byte 0x35
xor    %eax,(%rax)

Tautan itu juga menunjukkan beberapa angka heksa 2 karakter di samping setiap baris rakitan. Itu sesuai dengan instruksi desimal. Misalnya, jika Anda menempatkan 2298589328ke dalam ini desimal ke hex converter, Anda mendapatkan 8901B090kembali. Dan jika Anda melihat lebih dekat, itu adalah 4 instruksi hex pertama dari dump objek (dalam urutan terbalik).

Dari apa yang dapat saya katakan, set dari 4 angka heksadesimal selalu digunakan untuk mengkonversi ke desimal dan trik penghematan byte utama yang digunakan di sini adalah untuk menyusun susunan sehingga beberapa angka hex terakhir dalam 4 set kami adalah 00. Ini kemudian akan mengubah untuk memimpin nol ketika kita memasukkannya ke dalam .intpernyataan yang baru saja dihilangkan.

Inilah yang terjadi dalam 12pernyataan itu. Di bagian hex dari objek dump ini 0c 00 00 00.

Ini sejauh pemahaman saya tentang Majelis telah didapat dalam 2 minggu. Kursus kilat!

Kejadian

Insiden adalah penyelesaian yang lebih sulit dalam implementasi perakitan yang lebih pendek karena hal itu membuat token polyglot jauh lebih berat ke atas. Ini laporan Insiden.

  • ! pada baris 2 melepaskan !

  • Yang pertama EApada baris INTERCAL melepaskan dirinya sendiri

  • Spasi terakhir pada baris kedua hingga terakhir melepaskan token ruang-ruang.

  • 85 pada baris terakhir detokenizes

  • The Rdi #<R>"3"O.detokenizesR

  • 65di <>{#65 }//tokenizes65

  • 16 pada baris terakhir mencabut dirinya sendiri

  • 89 pada baris terakhir tokenizes itu sendiri

Kardinal

Saya baru sadar saya membuat perubahan pada Kardinal yang saya lupa dokumentasikan. Saya menghabiskan waktu mencari-cari cara untuk menghemat byte, dan memutuskan untuk belajar Kardinal. Setelah sedikit waktu dengan dokumentasi, saya melihat baris ini.

= menyalin nilai aktif pointer ke nilai tidak aktifnya.

Ini bukan trik yang digunakan dalam polyglot. Solusi lama termasuk instruksi ini: `++ ~ * t

++ peningkatan hingga 2.

~ mengubah tumpukan aktif

* menambahkan tumpukan.

Saya menyadari bahwa ~*itu dapat dicapai hanya dengan =instruksi, jadi saya mengerjakan ulang solusi untuk mengambil beberapa swap stack yang tidak berguna dan menambahkan penghematan byte kecil ini.


3
Saya tertarik bagaimana Anda bisa tetap melakukan polyglotting ke tahap menakjubkan ini. Bagaimana???
Qwerp-Derp

3
Ini benar-benar keindahan yang murni.
Muzer

Unary harus menjadi yang berikutnya
Christopher

Tidak, itu akan membunuh skor VIP (kecuali kodenya 3 byte atau kurang)
CalculatorFeline

19

6. SMBF , 45 byte

#v<++++<;n4
#>3N.
print('1'if 1/2else'5')
#i2

Cobalah online

Program ini mencetak 1 di Python 3, 2 di V, 3 di Minkolang v0.15, 4 in> <>, 5 di Python 2, dan 6 di SMBF.

SMBF (alias Brainfuck yang memodifikasi sendiri) menggunakan <++++<>.. Pointer dipindahkan ke kiri (ke karakter terakhir dari kode sumber), dan sel bertambah empat kali kemudian dicetak.


17

13. Ruby (129 bytes)

#v;2^0;7||"<+0+0+0+<*!2'!1'L;n4
#v0#_q@
#>3N.
#|\w*
#8  ^1b0<
#|
#M`
print ((0 and'13')or(None and 9 or 1/2 and 1 or 5))
#jd5ki2

Harap perhatikan Esckarakter literal pada baris terakhir antara jdan d, sesuai jawaban Perl ais523 .

Cobalah online!

Ini mencetak 1 dalam Python 3, 2 di Vim, 3 di Minkolang, 4 di <> <, 5 di Python 2, 6 di SMBF, 7 di Japt, 8 di Retina, 9 di Perl, 10 di Befunge, 11 di Befunge- 98, 12 dalam Fission dan 13 di Ruby.

Hanya sedikit modifikasi pada printpernyataan yang ada untuk menyalahgunakan fakta yang 0benar di Ruby. Saya harus menambahkan beberapa spasi pada pernyataan lain untuk membuatnya parse dengan benar.


17

15. tumpukan jerami (141 byte)

#v;2^0;7||"<+0+0+0+<*!2'!1'L#'1r'4;n4
#v0#_q@
#>3N.15o|1
#|\w*
#8  ^1b0<
#|
#M`
print ((0 and'13')or(None and 9 or 1/2 and 1 or 5))
#jd5ki2

Catatan: ada ESCsetelah odi baris ketiga dan setelah jdi baris terakhir

Ini mencetak 1 dalam Python 3 , 2 di Vim, 3 di Minkolang, 4 di <> <, 5 di Python 2 , 6 di SMBF, 7 di Japt, 8 di Retina, 9 di Perl, 10 di Befunge, 11 di Befunge- 98 , 12 di Fission, 13 di Ruby, 14 di turtlèd, dan 15 di Haystack.

Cobalah online!

Penjelasan

#v                           go down
 v
 >                           go right
  3N.                        does nothing important
     15o|                    outputs 15 and ends program
                             there is an <ESC> after 'o' since 'o' in Vim enters insert mode
         1                   I added this to satisfy Retina

Luar biasa, terima kasih telah mengunjungi Haystack! :)
Kade

@Kade Ini adalah bahasa 2D yang bagus, juru bahasa online akan lebih membantu (walaupun saya sudah mengunduh juru bahasa Python) :)
Sapi dukun

@Kade Ada tautan TIO untuk tumpukan jerami sekarang!
Sapi dukun

@MistahFiggins Tautan ini berfungsi untuk saya dan menghasilkan 15
Sapi dukun

@MistahFiggins Cache? Karena berfungsi untuk saya tanpa masalah atau pesan kesalahan
Sapi dukun

17

9. Perl, 84 byte

#v;7||"<+0+0+0+<;n4
#>3N.
#|\w*
#8
#|

#M`
print(None and 9or 1/2and 1or 5)
#j␛d5ki2

Ada karakter ESC literal dalam kode aktual antara jdan d; telah diganti dengan ␛ di sini untuk visibilitas.

Ini mencetak 1 di Python 3 , 2 di Vim (diuji secara lokal, tapi di sini ada tautan untuk bahasa V yang sangat mirip), 3 di Minkolang , 4 di <> < , 5 di Python 2 , 6 di SMBF , 7 di Japt , 8 di Retina , dan 9 di Perl .

Mari kita bahas beberapa bahasa eksoteris, melalui penyalahgunaan aritmatika yang bekerja secara berbeda dalam bahasa yang berbeda. (Apakah Nonefalsey dalam Python tetapi benar dalam Perl, dan and/ orchains bekerja dengan cara yang sama dalam kedua bahasa.)

Selain Python, saya juga harus mengubah kode vim. Alih-alih membuatnya menjadi serangkaian no-ops, saya hanya membiarkannya memasukkan sampah, lalu menghapus sampah itu lagi di akhir.


4
Serius? Anda akan membuatnya sangat sulit bagi orang lain untuk membuat jawaban jika Anda menggunakan ESC literal. Kita harus dapat menguji kodenya.
mbomb007

1
Anda tidak harus menyertakan ESC literal dalam jawaban Anda sendiri; Saya baru saja menemukan itu menjadi cara termudah untuk menulis yang satu ini. (Selain itu, berfungsi dengan baik di Firefox, dan dalam pengujian lokal; satu-satunya hal yang menghalangi saya untuk meletakkannya di pos adalah Chromium, yang saya gunakan untuk SE, tidak ingin memasukkannya ke dalam kotak input.)

1
Selain itu, Anda tidak dapat menguji Vim secara lokal. Bahasa didefinisikan oleh interpreter yang digunakan. Jadi benar-benar V yang kita miliki selama ini.
mbomb007

1
Err, bukankah vimjuru bahasa untuk Vim? (Ini bekerja di keduanya vimdan V, meskipun.)

4
@ ais523 mungkin Anda dapat menempatkan ␛ untuk mewakili byte 0x1B?
betseg

17

36. Labyrinth , 647 bytes

#v`16/"<"6/b.q@"(: ::Q):  ␉␉␉␉ :(22)S#;n4"14"
#>3N36!@@15o|>␉^?.*ttt*~++~~~%
#= >␉1#v#v0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#[␉
#`<`|
print((eval(" 1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or' (\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
""""#//
=begin␉//
$'main'//
#-3o4o#␉
=end   #//
"""#"#//
#0]#echo 21#/ (\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE) a
#   +/Jn~
#0␛dggi2␛`␉|1|6$//''25  >>>#>27.say# =#print(17)#$nd^_^_.]Q2229991#;abcd!fghij/+23!@"26

adalah tab literal, karakter ESC literal; Stack Exchange akan memotong-motong program sebaliknya. Saya sarankan untuk menyalin program dari kotak "masukan" dari tautan TIO di bawah ini, jika Anda ingin mengerjakannya.

Cobalah secara online!

Kehabisan

Program ini mencetak 36 di Labyrinth, 35 di INTERCAL, 34 di Rail, 33 di Insiden, 32 di Whirl, 31 di Modular SNUSP, 30 di Whitespace, 29 di Trigger, 28 di Brain-Flak, 27 di Perl 6, 26 di Perl 6, 26 di 05AB1E , 25 di Pip, 24 di Thutu, 23 di Hexagony, 22 di Underload, 21 di Nim, 20 di Prelude, 19 di Reng, 18 di Cardinal, 17 di Julia, 16 di Pyth, 15 di Haystack, 14 di Turtlèd, 13 di Ruby, 12 di Fission, 11 di Befunge-98, 10 di Befunge-93, 9 di Perl 5, 8 di Retina, 7 di Japt, 6 di SMBF, 5 di Python 2, 4 di> <>, 3 di Minkolang , 2 dalam V / Vim, dan 1 dalam Python 3.

Verifikasi

Sebagian besar bahasa diuji oleh driver tes yang ditunjukkan di atas. Anda dapat menguji Reng di sini dan SNUSP Modular di sini ; mereka menghasilkan 19 dan 31 masing-masing. @ ais523 membantu men-debug dan memperbaiki kode Insiden, yang sekarang berfungsi.

Bagaimana Labyrinth bekerja

Labyrinth memulai dengan menggeser beberapa kolom di sumber sekitar sedikit, tetapi setelah beberapa langkah penunjuk sampai ke tempat Ndi garis ke-2 (awalnya, saat penunjuk tiba di sana, tidak lagi Nada di sana), bergerak ke kanan. , dengan 0 di bagian atas tumpukan. Kemudian, itu hanya mendorong dan mencetak 36 dan berakhir dengan36!@

Hal-hal yang Saya Lakukan Rusak

Saya tahu saya ingin menambahkan Labyrinth, karena ini adalah salah satu dari sedikit esolang yang saya tahu sedikit tentang. Dengan debugger-nya, saya menemukan bahwa dengan mengubah 8 di baris terakhir menjadi 0, Labyrinth tidak terjebak dalam infinite loop dan, anehnya, tidak ada hal lain yang tampaknya pecah. Dari sana saya hanya membuang perintah baku dan keluaran 36 yang saya butuhkan, dan yang mudah mengarah @ke mengakhiri hal-hal.

Kemudian, itu untuk memperbaiki apa yang saya hancurkan: Minkolang, Cardinal, dan Hexagony.

Itu !membuat Minko melewatkan karakter berikutnya, yang harus diakhiri, jadi saya hanya menambahkan tambahan @. Sejauh ini bagus.

Perubahan panjang garis ke-2 membuat Kardinal kehilangan pernyataan keluarannya. Mencoba untuk menambahkan tambahan .pada baris pertama membuat Prelude kehilangan akal (tidak tahu mengapa, jujur), jadi saya pergi metode yang berbeda dan hanya menjatuhkannya di baris kedua. Itu secara tidak sengaja menelurkan pointer Kardinal ke-3, jadi saya mengisi hal-hal dengan ?(bukan pilihan yang diperlukan, hanya hal pertama yang saya temukan yang memperbaiki Fisi dan Kardinal).

Untungnya Hexagony merupakan perbaikan yang relatif sederhana, saya hanya melemparkan seutas huruf sehingga penunjuk menemukan kodenya. Saya pikir alfabet seharusnya tidak muncul sebelumnya dan tidak akan menyebabkan masalah dengan Insiden. Ini juga ketika saya menyadari saya belum menguji Insiden. Berkat @ ai523, saya tahu saya hanya perlu tanda seru tambahan, jadi estring alfabet berubah menjadi a !.

Skor dari printer integer serbaguna

Hanya untuk iseng dan pergi dari komentar @Stewie Griffin pada pertanyaan, inilah cuplikan yang menunjukkan bagaimana setiap jawaban akan mencetak skor jika dimasukkan ke dalam "The Verstatile Integer Printer".


1
OK, sepertinya ini hanya sedikit menyebabkan masalah dengan Insiden; program off-center karena sekarang memiliki tepat tiga tanda seru, tetapi ini dapat dengan mudah diperbaiki dengan mengubah karakter pengisi menjadi tanda seru keempat. Saya mengubah edalam alfabet yang Anda tambahkan ke tanda seru; yang tampaknya berhasil.

1
Bagus! Diam-diam aku menunggu labirin, sangat bagus untukmu. Pada catatan terpisah, bagian terbaik dari kode sejauh ini (bagi saya) adalah pesan "PLEASEGIVEUPPLEASE", yang memberitahu Anda untuk berhenti mencoba. ;)
MildlyMilquetoast

17

41. brainf *** , 916 bytes

#  4"16" 3//v\(@#/;\D"14"<;n4
#/*`3 afaaZ">;[77*,68*,@;'1,'1,q)(22)S#   ␉␉␉␉ (
#yy␉;36!@
#`<` ␉
#=␉x
#<]+<[.>-]>[
#␉<
###xR+++++[D>+++++++L+++<-][<<<]>+.---.>][
#px%>~~~+␉+~*ttt*.x
#D>xU/-<+++L)
#R+.----.R␉>]|
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#|␉
print((eval("1\x2f2")and(9)or(13   ) )-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
###; console.log  39
""""#//
=begin␉//
#*/
#define␉z  sizeof 'c'-1?"38":"37"
#include<stdio.h>
int main()  /*/
#()`#`\'*/{puts(z);}/*'``
$'main'␉//
#-3o4o#$$$
<>"3"O.<␉>//
#
=end   #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE)  a>>>
#>27.say# /7Jn~15o|  
#8␛dggi2␛`␉|1|6$//''25  =#print(17) ###^_^_LEintnd"3"z!]/}23!@/*///Z222999"26

adalah tab literal, karakter ESC literal; Stack Exchange akan memotong-motong program sebaliknya. Saya sarankan untuk menyalin program dari kotak "masukan" dari tautan TIO di bawah ini, jika Anda ingin mengerjakannya.

Cobalah online!

Skor VIP (Printer Integer Serbaguna): 0,01329

Kehabisan

Program ini mencetak 41 di BrainF ***, 40 di Minimal-2D, 39 di CoffeeScript, 38 di C, 37 di C ++, 36 di Labyrinth, 35 di INTERCAL, 34 di Rail, 33 di Insiden, 32 di Whirl, 31 di SNUSP Modular, 30 di Whitespace, 29 di Trigger, 28 di Brain-Flak, 27 di Perl 6, 26 di 05AB1E, 25 di Pip, 24 di Thutu, 23 di Hexagony, 22 di Underload,21 di Nim, 20 di Prelude, 19 di Reng, 18 di Kardinal, 17 di Julia, 16 di Pyth, 15 di Haystack, 14 di Turtlèd, 13 di Ruby, 12 di Fission, 11 di Befunge-98, 10 di Befunge- 93, 9 di Perl 5, 8 di Retina, 7 di Japt, 6 di SMBF, 5 di Python 2, 4 di> <>, 3 di Minkolang, 2 di V / Vim, dan 1 di Python 3.

Verifikasi

Sebagian besar bahasa diuji oleh driver tes yang ditunjukkan di atas. Anda dapat menguji Reng di sini dan SNUSP Modular di sini ; mereka menghasilkan 19 dan 31 masing-masing, sesuai kebutuhan.

Test Driver telah diperbarui untuk menyertakan Tokenizer, akhirnya. Semua kode C disimpan sebagai argumen dari perspektif Bash Script. Saya juga mengubah output untuk membungkus secara horizontal dengan spasi tambahan setelah setiap token alih-alih menghasilkan secara vertikal. Ini hanya preferensi saya, agar sesuai dengan output Whitespace. Tetapi orang lain dapat mengubahnya jika mereka merasa itu terlalu membingungkan.

Saya juga membuat penyesuaian Test Driver untuk menangani spasi kolom untuk Turtlèd's UFT8 char di jadwal. Ketidakselarasan itu membuatku gila! "Perbaikan" ini cukup hack-ish karena hanya mencari è dan mengubah lebar kolom untuk kasus itu, tetapi itu menyelesaikan pekerjaan.

Penjelasan

Pertama, saya ingin mengatakan betapa mengagumkannya snipet kode Skor Rundown dari SnoringFrog's Integer Printer dari pos terakhir. Saya telah menghitung jawaban sebelum memposting untuk sementara waktu, dan ini telah mengilhami saya untuk tetap kecil. Saya pikir kita bisa mengalahkan jawaban @ sp3000 pada akhirnya.

Jadi saya mulai mengerjakan jawaban ini dengan mencoba mengurangi apa yang saya bisa dan saya cukup sukses. Saya bahkan punya jawaban dalam bahasa yang berbeda dengan jumlah byte total lebih kecil dari # 40. Tetapi ketika saya mencoba bermain Minimal-2D, saya harus belajar BF sehingga saya bisa bekerja dengan turunannya dan dalam prosesnya saya menemukan pemecahan rekor @ Primo Hello, World! . Aku jatuh cinta pada keanggunan.

Minimal-2D, ternyata, tidak cukup efisien untuk memanfaatkan teknik inisialisasi tape yang digunakan oleh @PoGo, tapi saya berpendapat sekarang mungkin akan terlalu berat byte. Kami hanya mencoba mencetak bilangan bulat. Tapi @Primo memang mengirim saya ke jalur untuk belajar bagaimana mengalikan dalam BF, yang saya bawa ke kode Minimal-2D.

Kemudian setelah semua ini, saya membaca kembali komentar @ SnoringFrog tentang cara memasukkan BF dan menyadari bahwa tidak hanya saya bisa melakukannya, tetapi saya juga bisa menggunakan banyak kode Minimal-2D yang saya temukan dalam jawaban BF. Jadi saya menggali untuk menjawab dengan BF, dan inilah kita.

Satu hal lagi sebelum saya masuk ke detail. Ada beberapa perubahan yang saya buat untuk alasan non-golf. Pertama, saya memindahkan sebagian besar kode @SnoringFrog ditambahkan ke tepat di bawah bahasa 2D di beberapa baris teratas. Bagi saya, ini adalah langkah strategis jangka panjang untuk mencegah 2D-langs melintasi pusat polyglot untuk mencegah bug di masa depan jika memungkinkan. Hit byte rendah untuk gerakan ini, jadi saya melakukannya.

Kedua, selama berbagai faktor ulang, saya mengetahui bahwa Begunges dan Minkolang menghasilkan spasi tambahan setelah output numerik dan bahwa ini adalah penyebab byte nol yang telah kami lihat di Test Driver untuk bahasa-bahasa ini. Saya memperbaikinya dengan mengeluarkan nilai stack sebagai kode ascii (yang tidak menyertakan fitur spasi tambahan), alih-alih nilainya secara langsung. Ada hit byte kecil untuk perubahan ini juga, tetapi sekarang output Driver Test sangat seragam. Bagaimana bisa aku tidak?

SM / BF

Mari kita cepat membahas dasar-dasarnya. Ini adalah satu-satunya perintah yang valid untuk SMBF dan BF:

>   Move the pointer to the right
<   Move the pointer to the left
+   Increment the memory cell under the pointer
-   Decrement the memory cell under the pointer
.   Output the character signified by the cell at the pointer
,   Input a character and store it in the cell at the pointer
[   Jump past the matching ] if the cell under the pointer is 0
]   Jump back to the matching [ if the cell under the pointer is nonzero

Kedua bahasa memiliki pita memori di mana nilai disimpan dan diubah. Satu-satunya perbedaan SMBF adalah bahwa kode apa pun yang sedang dieksekusi juga disimpan pada pita memori di sebelah kiri titik awal. Seperti yang ditunjukkan oleh @SnoringFrog, membuat SMBF dan BF untuk menghasilkan hasil yang berbeda bergantung pada pemindahan penunjuk memori ke kiri sumber aslinya. Dalam penerjemah BF Tio, penunjuk memori mampu bergerak ke kiri dari asal dan akan menemukan 0 alih-alih kode ascii Polyglot yang dilihat SMBF. Berikut adalah contoh yang dapat dijalankan di SMBF dan BF untuk menunjukkan perbedaannya.

Pada awal polyglot, Befunges mengharuskan >pada baris kedua untuk menjalankan sampai selesai dan Perl6 mengharuskan setiap >didahului oleh a <. Jadi SM / BF mulai dengan<> meninggalkan penunjuk memori di tempat asalnya, lalu tekan [yang melompat beberapa karakter ofensif untuk kedua bahasa ke ]pada baris ke-6.

Selanjutnya, kami menambah sel memori asal untuk kedua bahasa dan memindahkan penunjuk memori ke kiri dengan +<. (Untuk konvensi percakapan, kami akan memanggil sel memori asal sebagai sel 0, sel di sebelah kanan titik asal 1, 2, ... Dan sel di sebelah kiri -1, -2, ...). Sel -1 berisi kode asci dari karakter terakhir dalam polyglot di SMBF dan 0 di BF, jadi ketika berikutnya [ditemui, hanya BF melompat ke yang berikutnya ]sementara SMBF masuk ke dalam kode.

Sebagai SMBF melintasi [.>-] ia mencetak 6 yang ditemukan di ujung polyglot dan kemudian memindahkan penunjuk memori kembali ke sel 0, mengatur nilainya kembali ke nol untuk keluar dari ]. Untuk meninjau, rekaman di pint ini adalah: Sel-sel negatif SMBF menahan polyglot, dan itu 0 dan sel-sel positif memegang nol. Sel-sel negatif dan positif BF memegang nol sedangkan sel asal memegang 1.

Selanjutnya >pindahkan SMBF ke sel 1 dan BF kembali ke sel 0 yang memungkinkan BF untuk memasukkan blok kode pribadi:[<+++++[>++++++++++<-][<<<]>+.---.>] (Saya telah menghapus karakter non-BF dari ini). Di sini, kita kembali ke sel -1 dan menginisialisasi variabel kontrol loop (sel -1) ke nilai 5. Kemudian kita masukkan loop di mana kita menambahkan 10 ke sel 0 dan mengurangi sel -1 lima kali sebelum keluar dari loop di mana kita akan menunjuk pada sel -1 dengan nilai 0.

Selanjutnya kita temui [<<<]sambil menunjuk nol, jadi BF tidak melewati ini. Tujuannya di sini adalah untuk menyeimbangkan sejumlah >'s dengan sebelumnya <sehingga Perl6 tidak kesalahan.

Pada titik ini sel 0 bernilai 51. Nilai ascii dari 4 adalah 52, jadi kami memindahkan kursor ke sel 0 tambah 1, lalu cetak nilainya. Dan akhirnya, kita menurunkan sel 0 kembali ke karakter ascii 1 dan mencetak lagi sebelum mengatur penunjuk memori ke sel 1 (nilai 0) untuk keluar melewati ].

SMBF dan BF keduanya mencapai yang terakhir [pada baris 8 berikutnya sementara keduanya bertumpu pada nilai 0. Jadi keduanya melompat melewati kode Minimal-2D yang tersisa sampai ]ditemui pada baris 11. Tapi ini berumur pendek karena baris 12 dimulai dengan yang lain[ yang membawa kedua bahasa ke hampir akhir polyglot di mana tidak ada instruksi lebih lanjut ditemui.

Refaktor

Minimal-2D

Minimal-2D menulis ulang sebagian besar untuk menghemat beberapa byte dengan cara yang mirip dengan trik multiplikasi BF. Minimal-2D namun tidak memiliki [dan ]karakter untuk kontrol loop. Sebaliknya ia memiliki perintah-perintah ini:

/   Skips next instruction if the data pointer is set to 0.
U   Tells the program to switch to the up direction of processing instructions.
D   Tells the program to switch to the down direction of processing instructions.
L   Tells the program to switch to the left direction of processing instructions.
R   Tells the program to switch to the right direction of processing instructions.

Ini dapat digunakan untuk menghasilkan struktur logika yang sama, meskipun dalam manor 2D, seperti halnya pada BF. Misalnya, BF's ++++++[>++++++<-]>.setara dengan ini dalam Minimal-2D.

Berikut adalah versi disederhanakan dari kode Minimal-2D di polyglot, dengan semua kode asing dihapus dan semua karakter tempat holding diganti #.

###################D
###R+++++[D>+++++++L
###>
D>#U/-<+++L)
R+.----.R

The Dsejalan 1 mengirimkan instruksi pointer turun ke Lsejalan 8 dari polyglot yang mengirimkan pointer ke kiri. Di sini kita mengatur variabel kontrol loop (sel 0) ke 7, pindahkan penunjuk memori ke sel 1 dan masukkan satu loop. Dalam lingkaran, kita menambahkan 3 ke sel 1, menurunkan sel 0 lalu memeriksa apakah nilai sel 0 masih nol. Jika tidak, kami menambahkan 8 lagi ke sel 1 lalu mengurangi dan memeriksa lagi. Hasil dari loop ini adalah nilai sel 1 diatur ke 51 pada akhir loop (6 * 8 + 3).

Kami keluar dari loop dengan melompat U, memindahkan penunjuk memori ke sel 1 dan turun kemudian ke kanan pada baris 11 dari polyglot. Dan akhirnya, kami menambah hingga nilai ascii untuk 4 lalu turun ke nilai ascii untuk 0 sebelum lari ke kanan untuk mengakhiri program.

Retina

Retina memiliki banyak persyaratan yang sulit untuk dikerjakan untuk semua turunan BF. Tidak suka berturut - turut +atau tidak cocok ()atau []. Tapi ini benar-benar hanya persyaratan untuk setiap baris lain, jadi banyak pekerjaan untuk BF, SMBF dan Minimal-2D berputar menempatkan sebagian besar kode pada baris genap.

Satu byte yang |dikhususkan hanya untuk Retina adalah pada akhir baris 11. Mengutip @ ais523 “kebanyakan regex berakhir dengan | akan cocok dengan apa pun ”. Tanpa ini, Retina mengembalikan 0. Mengapa ini memperbaikinya, saya tidak tahu. Saya tidak perlu menggali Retina terlalu banyak, mungkin karena saya telah menghindari antrian panjang. Tapi seperti Prelude, saya menemukan saya tidak perlu memahaminya sebanyak yang saya perlu mengerti bagaimana men-debug itu, yang dalam hal ini sebagian besar terdiri dari menghapus garis (dalam kelipatan 2) sampai saya menemukan garis itu menyebabkannya pecah. Saya menduga perbaikan ini berdasarkan komentar @ ais523, dan dihargai. Kurasa terlalu keren untuk sekolah.

Kardinal

Saya kebetulan menyukai penempatan Minimal-2D dari @ SnoringFrog ke kode Cardinal. Ini adalah lokasi yang baik mengingat Cardinal tidak mengecewakan Retina, dan sepertinya memungkinkan beberapa menjalin dengan Minimal-2D. Jadi ketika saya memulai transplantasi Minimal-2D hingga ke 2D, saya membawa Cardinal untuk ikut. Ada beberapa perubahan kosmetik pada Cardinal. Pertama, saya melemparkan >hampir awal pernyataannya #p x%>~~~+ +~*ttt*.xuntuk Minimal-2D untuk mengubah pointer memori dalam loop-nya / Kedua, saya menggeser semua karakter satu ke kanan untuk memberikan ruang Minimal-2D untuk keluar dari loop itu dengan anggun. The pdalam sengatan ini untuk padding karakter ini.

Befunge / 98

The Befunges sebenarnya di mana saya mulai mencoba golf turun polyglot, karena C ++ refactor mengubah semua kode lang 2D lainnya, kecuali yang ini. Dalam mencoba mempelajari WTF yang terjadi dalam kode ini, saya menemukan ini di dokumentasi Begunge:

The .perintah akan muncul nilai dari tumpukan dan output sebagai integer desimal, diikuti dengan spasi , agak seperti Forth. ,akan memunculkan nilai, menafsirkannya sebagai nilai ASCII dari suatu karakter, dan menampilkan karakter tersebut ( tidak diikuti oleh spasi. )

Molly suci! Kita dapat membersihkan byte nol pada output. Setelah ini, itu semua hanya masalah mencari tahu bagaimana cara memasukkan nilai asci yang lebih besar, dan memisahkan kode. Befunge-98 memiliki kode melompat ;mengatakan hal itu untuk melewatkan [77*,68*,@di ;[77*,68*,@;'1,'1,q, yang memberi kami segregasi tersebut.

Befunge-98 juga memiliki perintah ( ') untuk mengambil kode ascii dari karakter selanjutnya. Jadi, '1,ambil kode kode asci untuk karakter tersebut 1, letakkan di tumpukan, lalu cetak karakter ascii untuk nilai teratas di tumpukan ,. Hanya harus melakukan ini dua kali untuk mencetak 11 dan menjatuhkan quntuk keluar dengan anggun.

Befunge yang tepat sedikit kurang nyaman, tetapi hanya adil. Di sini kita harus melakukan perhitungan untuk meletakkan kode yang diinginkan di tumpukan. Untungnya, kode kita dengan mudah dikalikan dengan 7 * 7 dan 6 * 8 sebelum perintah output yang sama ,. Kemudian kami keluar dari Befunge dengan @sebelum kode kakaknya terkontaminasi output.

Minkolang

Setelah menemukan perbaikan untuk ruang trailing Befunge saya cukup bersemangat tentang ide menemukan perbaikan Minkolang juga dan dokumentasi Minkolang mengatakan bahwa perintah output yang telah digunakan sampai titik ini bekerja dengan cara yang sama seperti Juru Bahasa Befunge. OKebetulan didokumentasikan sebagai perintah output lain, yang tidak digambarkan sebagai berbagi Begunge-ness ini, jadi saya hanya mengambil bidikan dalam gelap dan mencoba mengeluarkan string "3". Kemenangan sempurna.

> <>

Salah satu hal pertama yang saya lihat ketika memindahkan kode Minimal-2D adalah memverifikasi bahwa saya bisa bergerak> <> bersamaan dengan itu. Jika saya akan berurusan dengan transversalisme polyglot 2D, saya akan berurusan dengan semua pelanggaran. Saya pada dasarnya beruntung memilah jalan saya ke solusi menempatkan ;n4 pada akhir baris 1 dan pindah \Dlebih jauh ke belakang di baris 1. BTW, saya tidak tahu bahwa> <> dapat diarahkan ke bawah sebelum jawaban 40 karena sudah terkandung dengan sangat baik . Saya ingin berpikir ini dapat digunakan nanti untuk menyimpang> <> dari bahasa lain yang serupa.

Perl6

Saya sudah bicara tentang beberapa <>masalah keseimbangan Perl6 di tempat lain dalam jawaban ini, jadi saya tidak akan membahasnya lagi. Tetapi saya ingin menunjukkan bahwa saya pindah#>27.say# ke baris kedua ke baris terakhir. Ini tidak memiliki tujuan fungsional dalam jawaban ini. Saya benar-benar membuat langkah ini untuk memuaskan jawaban berbeda yang akhirnya saya tidak menggunakan putaran ini. Saya memutuskan untuk meninggalkannya karena saya berencana untuk mengirim jawaban itu di kesempatan berikutnya dan saya tidak ingin repot-repot membatalkan dan melakukannya lagi.

Perbaikan kerusakan

05as1e

05as1e pasti tidak suka kode Begunge baru seperti versi lama. Saya kira itu ,karena itu satu-satunya karakter revolusioner. Bagaimanapun, saya harus pindah "lebih jauh ke belakang di baris dua untuk menyembunyikan perintah ofensif, dan saya tahu bahwa "harus pergi sebelum jalur kode Befunge karena "merupakan ya-op dalam kedua bahasa. (Saya hanya bisa membuat istilah seperti yes-op kan?) 2-dimentionality Line 2 cukup kaku, tapi saya bisa mengganti <sebelum kode jalur Begunge dengan ". The <namun adalah kebutuhan Perl6. (Itu harus memiliki <semua sebelumnya >.) Saya dapat menjatuhkan <baris satu di lokasi yang diramalkan oleh naluri dan pengetahuan sebelumnya menyelesaikan 05ab1e dan pertikaian Perl6.

Berputar

Perubahan Befunge pada baris 2 menambahkan ekstra 1ke polyglot sebelum garis Insident / Whirl. Ekstra ini 1menyebabkan Whirl untuk mulai menunjuk ke instruksi yang salah pada roda. Yang paling pertama 1dalam arahan preprocessor C / C ++ hanyalah referensi nomor baris dalam kode, dan ini bisa dengan mudah menjadi nomor baris lain, jadi saya sewenang-wenang mengubah ini 4untuk memuaskan Whirl.

Kejadian

String detokenizing pada akhir polyglot sudah dikenal saat ini, jadi saya tidak akan membahasnya. Saya menghapus dari string apa yang saya bisa dan menambahkan token baru yang diperlukan. Ada 2 karakter detokenizing yang tidak ada dalam string ini meskipun saya harus tunjukkan. Pertama, yang kedua Rdi #R+.----.R >]|yang dibutuhkan di sini karena itu titik Fusion awal, dan itu lebih aman pada baris ini karena sudah ada Fusion awal titik pos dalam arah yang sama. Kedua, xin #= xadalah untuk menghapus token yang terlibat dalam suatu ␉␊#pola, yang telah menjadi lebih umum.

Lainnya

Hexagony, Whitespace, dan Prelude semuanya memiliki penyesuaian kecil yang biasa, tetapi tidak ada yang layak dibicarakan.

Pikiran terakhir

Hanya itu yang saya dapat untuk jawaban ini. Bagi mereka yang mencari titik awal pada jawaban berikutnya, saya sarankan yang jahat. Tampaknya bisa diterapkan, meskipun saya belum melihatnya terlalu dekat, tetapi saya kira itu tidak akan terlalu sulit untuk diintegrasikan. Saya tahu ini memiliki perintah lompat yang seharusnya membantu melewati sebagian besar polyglot. Semoga berhasil.


Gagal dalam Insiden (mencetak 3333kemudian menunggu input), tetapi kemungkinan mudah diperbaiki. Masalahnya adalah bahwa Anda menempatkan tanda ( -]) setelah para ^-token yang sebelumnya digunakan untuk melompat ke akhir program. Dua penggunaan -]lainnya berturut-turut, sehingga membentuk pola ... xx ... x ..., yang merupakan lompatan mundur. Memindahkan yang bertahan -]sedikit lebih awal (atau ^_sedikit lebih lambat, atau keduanya), bagaimanapun, sepertinya cukup mudah.

@ ais523 Terima kasih. Inilah yang saya dapatkan untuk bermain golf saat menulis. Selalu ingat untuk memeriksa anak-anak Insiden. Untungnya saya bisa memperbaiki yang satu ini dengan tambahan dengan pengurangan, jadi saya kira menang secara keseluruhan.
Peluang

1
Jika Anda menjalankan V dengan -v(untuk verbose), Anda dapat mengganti pelarian karakter literal <esc>, yang mungkin membuat bekerja dengan kode di masa depan sedikit lebih mudah. (Saya pikir)
Pavel

Wow! Terima kasih @ ais523 untuk hadiahnya. Cara yang bagus untuk memulai Senin pagi!
Peluang

Befunge-98 lebih tua dari Befunge-93?
CalculatorFeline

17

183. Intel 8080 boot image (ZEMU), 9870 byte

Cobalah online!

Penjelasan

Berkat Potato44 untuk ide menambahkan kode mesin, sangat menyenangkan untuk membuat jawaban ini.

Saya tidak melakukan file COM COM / CP karena membatasi ukuran polyglot menjadi sekitar 60KB yang ingin saya hindari. Gambar boot ternyata lebih mudah dilakukan daripada COM karena ZEMU memuat sektor boot dari sektor ke-6 secara default (berbasis 1, sektor logis 128 byte), jadi mulai dari polyglot tidak perlu dijalankan. Kode boot harus di offset 0x280 ((6-1) * 128) di polyglot.

Saya menggunakan emulator ZEMU yang ditautkan dari halaman ini . Untuk menjalankan polyglot di ZEMU:

  • Disk> A: pilih file poliglot
  • Pilihan> Set Instruksi I8080
  • Tekan tombol Boot

Fungsi yang mencetak satu karakter ke konsol ( cns$ot) disalin dari BIOS22Dv221.ASM dari distribusi ZEMU. Saya membuat dua perubahan: karakter tidak tertutupi hingga 7 bit ASCII karena kami mengontrol parameter dan jrz cns$otdiganti dengan jz cns$otkarena jrz(lompat relatif jika nol) adalah instruksi Zilog Z80 tidak ada di Intel 8080.

Program awal ( sintaks Intel , assembler ditautkan dari sini ):

    org 3120h    ; chosen so that cns$ot == 0x3131, easier to generate
                 ; this program will be generated at this offset
                 ; to run it directly specify org 0100h

    mvi c,31h    ; '1'
    call cns$ot
    mvi c,38h    ; '8'
    call cns$ot
    db 38h       ; for answer 188, NOP in I8080
    mvi c,33h    ; '3'
    call cns$ot
    hlt          ; halt processor

;;;;;;;;; copied from BIOS22Dv221.ASM
cno$sp equ 7dh
cno$sb equ 01h
cno$si equ 00h
cno$dp equ 7ch

; print char to console, receives char in c register
cns$ot:
    in cno$sp    ; in status
    xri cno$si   ; adjust polarity
    ani cno$sb   ; mask status bit
    jz cns$ot    ; repeat until ready
    mov a,c      ; get character in a
    out cno$dp   ; out character
    ret

Program ini berisi karakter yang tidak dapat digunakan secara langsung dalam polyglot. Sebagian besar karakter kontrol ASCII (kode <0x20) dilarang di Simula, karakter non-ASCII (kode> = 0x80) tidak dapat muncul sendiri karena file tersebut harus valid UTF-8. Jadi program di atas dihasilkan oleh program lain yang valid UTF-8.

Program berikut menghasilkan kode yang diperlukan dan melompat ke sana. ld (hl),atidak dapat digunakan karena Grass ( 'w'==0x77). sub h(0x94) dan xor a(0xAF) adalah byte lanjutan UTF-8, mereka harus diawali dengan byte memimpin UTF-8. Instruksi ret nc(= 0xD0, kembali jika tidak membawa) digunakan sebagai byte memimpin UTF-8. Untuk membuatnya tidak melakukan apa-apa itu didahului dengan scfinstruksi (set carry flag). Juga dihindari ','(0x2C) dan '.'(0x2E) untuk DOBELA. org 0100hdirektif tidak digunakan karena assembler yang digunakan tidak memahaminya (org diatur dalam GUI). Program ini adalah posisi independen. Saya lebih suka Zilog mnemonik, jadi saya menggunakannya untuk program yang lebih lama.

Sintaks Zilog , assembler ditautkan dari sini :

  ; generate: 0E 31 CD 31 31 0E 38 CD 31 31 38 0E 33 CD 31 31 76 DB 7D EE 00 E6 01 CA 31 31 79 D3 7C C9

  ld hl,3120h

  ld a,3Fh
  scf       ; set carry flag so that ret nc does nothing
  ret nc    ; utf8 lead byte for next insn
  sub h     ; a -= h; a = 0Eh;  utf8 cont byte (opcode 0x94)
  ld c,a

  ld (hl),c ; 0Eh    ; not using ld (hl),a because it is 'w'
  inc hl

  ld (hl),h ; 31h
  inc hl

  ld a,32h
  cpl       ; a = ~a; a = 0xCD
  ld d,a
  ld (hl),d ; CDh
  inc hl

  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),c ; 0Eh
  inc hl
  ld (hl),38h ; 38h
  inc hl

  ld (hl),d ; CDh
  inc hl
  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),38h ; 38h
  inc hl

  ld (hl),c ; 0Eh
  inc hl
  ld (hl),33h ; 33h
  inc hl

  ld (hl),d ; CDh
  inc hl
  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),76h ; 76h
  inc hl

  ld a,23h  ; not using ld a,24h because it has '$' (breaks SNUSP)
  inc a
  cpl       ; a = ~a; a = 0xDB
  ld d,a
  ld (hl),d ; DBh
  inc hl

  ld (hl),7Dh ; 7Dh
  inc hl

  ld a,c    ; a = 0Eh
  cpl       ; a = F1h
  dec a
  dec a
  dec a     ; a = EEh
  ld d,a
  ld (hl),d ; EEh
  inc hl

  scf
  ret nc
  xor a     ; a ^= a; a = 0; utf8 cont byte
  ld c,a
  ld (hl),c ; 00h
  inc hl

  ld a,4Ah
  scf
  ret nc
  sub h     ; a -= h; a = 0x19;  utf8 cont byte
  cpl       ; a = ~a; a = 0xE6
  ld d,a
  ld (hl),d ; E6h
  inc hl

  ld a,c
  inc a
  ld d,a
  ld (hl),d ; 01h
  inc hl

  ld a,35h
  cpl       ; a = 0xCA
  ld d,a
  ld (hl),d ; CAh
  inc hl
  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),79h ; 79h
  inc hl

  ld a,2Dh  ; not using ld a,2Ch because it has ','
  dec a
  cpl       ; a = 0xD3
  ld d,a
  ld (hl),d ; D3h
  inc hl

  ld (hl),7Ch ; 7Ch
  inc hl

  ld a,36h
  cpl       ; a = 0xC9
  ld d,a
  ld (hl),d ; C9h

  ld sp,3232h  ; set up stack for generated program

  ld hl,3120h  ; not using ld l,20h because it has '.'
  jp (hl)      ; go to generated program 
               ; confusing mnemonic - actually it is jp hl, ie. PC = HL
               ; opcode 0xE9, utf8 lead byte (0xE9 = 0b11101001), must be followed by 2 cont bytes
  db 80h,80h

Program ini dirangkai menjadi:

! 1>?7ДOq#t#>2/Wr#t#t#q#68#r#t#t#68#q#63#r#t#t#6v#>#</Wr#6}#y/===Wr#7ЯOq#>J7Д/Wr#y<Wr#>5/Wr#t#t#6y#>-=/Wr#6|#>6/Wr122! 1退

Itu harus diimbangi 0x280 di polyglot (lihat baris 2). Tes abstraksi di driver tes memeriksa itu.

Refactor

Kerang

Kerang dipindahkan kembali ke garis terpanjang. Saya suka tata letak ini lebih karena parens tidak disejajarkan dengan langs lain. Pindah Moorhenses dan Flak sebelum kerang, sehingga mereka tidak pecah ketika kerang diubah. Baris terpanjang memiliki tata letak ini sekarang:

Grass  Moorhenses  Flaks  Shells  Rubies/Pythons/Perl5  PicoLisp  Prelude  Klein001

Kode kerang baru:

a=$(printf \\x00)
b=$(echo -n $a | wc -c)
case $b[1] in 1*)echo 54;; 4*)echo 78;; 8*)echo 166;; *1*)echo 50;; *)echo 58;; esac
exit

Kode kerang lama:

a=$(printf \\x00)
b=${#a}
case "{"$ar[1]"}"${b} in *1)echo 54;; *4)echo $((19629227668178112600/ 118248359446856100));; *1*)echo 50;; *)echo 58;; esac
exit

Panjangnya $adihitung $(echo -n $a | wc -c)sekarang (dari sini ). Awalnya saya menggunakan ini untuk menyingkirkan #, tetapi sekarang digunakan karena kode lebih pendek. Kerang dapat mengandung #karena Flaks ada sebelum kerang.

Yash (166) menggunakan perintah echo bawaan yang tidak mendukung opsi secara default, jadi "-n" dan linefeed akhirnya menjadi bagian dari output, yang memberikan tambahan 4 byte. Ketika tidak diatur ECHO_STYLEke default SYSV( -nopsi tidak diterima).

TIO link ini menguji kode di semua shell.

Tambahan (((((sebelum kerang memperbaiki Underload dan Retina. Satu pasang lagi parens ditambahkan untuk disembunyikan 58dari Prelude (ditutup dengan #)setelah exit). {sebelumnya ((((((adalah untuk Japt, tanpa itu Japt hang.

Flaks

Karena relokasi kode awal Flaks dapat disederhanakan - hanya ([])tersisa:

     line 21      (Grass(([5]{})))    scripting langs                  clear stack     Flaks main code                                                                                      begin skip code      the rest of polyglot   end skip code   print(85)
old: []{}[][][]   ((([]{})))          ((()()<<()>>)((()([])))<<()>>)   {}{}{}{}{}{}{}  ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>)   (<><()>){({}[()])}{           ...           }{}<>              ()
new: []{}[][][]     ([]  )                                                             ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>)   (<><()>){({}[()])}{           ...           }{}<>              ()

TIO link ini menguji kode di semua Flaks.

Fisi & Kardinal

Fisi dipindahkan ke LNUSP: R"12"R _*. Pointer kedua digunakan untuk menghentikan Fission sesegera mungkin - pada langkah ke-3, lihat jawaban 54 untuk informasi lebih lanjut.

Kardinal dipindahkan ke LNUSP: @ %"18". Seperti dalam Fission, pointer kedua digunakan untuk mengakhiri Cardinal sesegera mungkin - pada langkah ke-3.

MarioLANG

Gunakan ####...sebagai ganti ====...platform:

masukkan deskripsi gambar di sini

Minimal-2D

Polyglot dengan MarioLANG:

masukkan deskripsi gambar di sini

Wierd & 1L_a

Wierd: gunakan spasi di baris 10 kolom 79 untuk mencerminkan IP.
1L_a, Wierd: spasi di baris 9 kolom 79 penting.

masukkan deskripsi gambar di sini

Secara kubik

Kode baru: :1*23!/5x%6E0

:1*23!/5x%6E0
! - skip over / in Klein 201
x - destroy Cardinal pointer before it hits /

pure:
:1*23/5%6E0

faceval:
0 0
1 9
2 18
3 27
4 36
5 45

program:
:1   mem = 9
*23  mem *= 18; mem *= 27
/5   mem /= 45
%6   print mem
E0   exit

9*18*27/45 == 97 (integer division)

6 in %6 is used to print mem because 0-5 are used to print faceval (eg. %3 prints 27)
0 in E0 is not an exit code, it is present just to trigger E instruction

Klein 201/100

Kode baru: !|*****[[[828+*+@+*99]]]*****|!

Setelah semua tumpukan perkalian berisi nol tunggal karena popping dari tumpukan kosong memberi nol. Nol ini ditambahkan ke nomor utama dengan di +sebelah @. Sebelumnya dibuang dengan ?, lihat jawaban Klein 001 .

Cara kerja pintu di Klein:

masukkan deskripsi gambar di sini

Berputar

Kode whirl pada dasarnya sama, satu-satunya perubahan adalah bahwa kode utama mengasumsikan bahwa operasi saat ini adalah ops.one (2), bukan ops.load (4).

Secara efektif Whirl dapat dianggap memiliki 3 operasi:

  • 1 putar satu langkah
  • 0 beralih arah rotasi
  • 00 jalankan instruksi saat ini dan alihkan cincin

Operasi gabungan untuk menyederhanakan alasan tentang program:

  • 0000 jika op saat ini dari ring tidak aktif tidak ada maka jalankan saja op saat ini dari ring aktif tanpa efek samping
  • 11..11 putar n langkah
  • 011..11 beralih arah dan putar n langkah

0000mengeksekusi instruksi saat ini dari cincin aktif, tetapi juga mengeksekusi instruksi saat ini dari cincin tidak aktif sebagai efek samping. Jika instruksi saat ini dari cincin tidak aktif tidak berbahaya maka kita bisa fokus pada operasi pada cincin aktif tanpa memikirkan apa yang terjadi dengan cincin tidak aktif. Ini sangat berguna dengan program ini karena memiliki pemisahan yang jelas: pertama angka 32 dibuat hanya menggunakan dering matematika dan kemudian kita beralih ke ops ring dan menjalankan 2 instruksi di sana (cetak dan keluar).

Pertama saya ingin memiliki operasi saat ini pada ops ring menjadi noop ketika kode utama mulai dijalankan. Ini memiliki 2 keuntungan: 1) kode Whirl utama dapat dieksekusi mandiri dan 2) kita benar-benar dapat melupakan ops ring saat membuat angka 32 dengan ring matematika. Namun, itu membuat kode lebih lama dari itu, jadi alih-alih kode utama menganggap bahwa operasi saat ini adalah ops.one (2). Ini berarti bahwa ops.value diatur ke 1 sebagai efek samping dari operasi matematika, yang kemudian digunakan untuk mencetak. Kode lama mencapai efek yang sama dengan instruksi ops.load, tetapi menggunakan ops.one lebih jelas menyatakan niatnya - untuk mengatur ops.value menjadi bukan nol.

at this point current ring is ops, dir = clockwise, cur op = ops.one
00    switch to math ring
011   rotate to math.not
0000  math.not (math.val = 1)
01111 rotate to math.store
0000  math.store (mem[0] = 1)
1     rotate to math.add
0000  math.add (math.val = 2)
01    rotate to math.store
0000  math.store (mem[0] = 2)
011   rotate to math.mult
0000  math.mult (math.val = 4)
0000  math.mult (math.val = 8)
0000  math.mult (math.val = 16)
0000  math.mult (math.val = 32)
011   rotate to math.store
00    math.store (mem[0] = 32), switch to ops ring
up to this point the program is the same as before

01111 rotate to ops.intio
0000  ops.intio - print mem[0] as number
0111  rotate to ops.exit
00    ops.exit

Kode baru lebih pendek karena kode lama memiliki beberapa sakelar arah redundan di bagian kedua program, bukan karena asumsi baru.

old: (1111) 00011000001111000010000010000011000000000000000001100 01111110000011100
new: (11)   00011000001111000010000010000011000000000000000001100   011110000011100

Cara menjaga Whirl tetap benar saat mengubah sesuatu sebelum garis Insident / Whirl:

  • Pastikan bahkan ada jumlah 0s sebelum kode Whirl utama
  • memastikan tidak ada dua berturut-turut 0s
  • tambahkan / hapus cukup 1sampai Whirl bekerja lagi; menambahkan n 1s sama dengan menghapus 12-n 1s dan sebaliknya

Saya tanpa sadar melanggar aturan pertama saat menambahkan Ropy. Ketika ada jumlah ganjil 0kode utama mulai dijalankan dengan arah yang salah dari ops ring yang memecah instruksi keluar. Jadi sekarang ada 0jalur 3 yang mengkompensasi 0jalur 1.

Lainnya

CoffeeScript : console.log a&&39||180(dari sini )

INTERCAL : pindah ke jalur 37
Brainfuck , Penderitaan : pindah ke turunan brainfuck lain di jalur 10

xEec : pindah ke 1L_a ( h#115# o#)

CSL : pindah ke baris 80
Trefunge : pindah ke baris 120
Gaot ++ , Stones : ditempatkan pada baris yang terpisah


4
Bagus, itu banyak byte untuk bermain golf.
Potato44

16

16. Pyth (159 byte)

#v\;2^0\;7||"<+0+0+0+<*!2'!1'L#'1r'4;n4
#v0#_q@
#>3N.15o|1
#|\w*
#8  ^<1b0 <
#|
#M`
print ((0 and'13')or(None and 9 or 1/2 and 1 or 5))
#"07|5//00;16 "jd5ki2

Catatan: ada ESCbyte ( 0x1B) setelah odi baris ketiga dan setelah jdi baris terakhir.

Ini pengalaman yang cukup menyenangkan. Japt dan Pyth keduanya bahasa golf, tetapi Japt adalah infix dan Pyth adalah awalan, dan Pyth otomatis meminta input dan gagal jika argumen tidak ada.

Sebelum jawaban Haystack saya menggunakan solusi yang hampir berfungsi #, yang mendapatkan kode char di Japt dan loop-sampai-kesalahan di Pyth. Pyth kebetulan sangat berguna dalam polyglots, karena char komentar umum #pada dasarnya berfungsi sebagai peredam kesalahan.

Ketika saya sampai di rumah saya berhasil menemukan sepotong kode ini yang berfungsi baik menggunakan //, yang berfungsi sebagai komentar di Japt dan dua divisi di Pyth. Maka itu hanya masalah mendapatkan Befunges untuk rute dengan benar.

Ini sangat tidak mungkin optimal, tetapi cukup baik untuk saat ini. Saya mencoba untuk menguji semuanya, tetapi saya sangat menghargai seseorang yang memeriksa apakah hasilnya cocok.

Mencetak 1 dalam Python 3 , 2 dalam V , 3 di Minkolang , 4 di> <> , 5 di Python 2 , 6 di Self-Modifying Brainfuck , 7 di Japt , 8 di Retina , 9 di Perl , 10 di Befunge (-93 ) , 11 di Befunge-98 , 12 di Fission , 13 di Ruby , 14 di Turtléd , 15 di Haystack , dan

16 dalam Pyth .

Penjelasan

Apa yang Pyth lihat di sini adalah:

#v\;2^0\;7||"string
multiline
string"07|5//00;16 "string

Ini diterjemahkan menjadi pseudocode berikut:

while no errors occur:
    evaluate ";"
    print 2
    print 0 to the power ";"
    print 7
    print "string\nmultiline\nstring" or 0 or 7
    print 5 or 0 divided by 0 divided by (missing)
print 16
do nothing with "string"

Loop pertama keluar untuk mencoba mengevaluasi ;yang bukan ekspresi yang valid. Kemudian Pyth hanya mencetak 16.


Memperluas dengan cara apa? Saya masih membutuhkan 5 byte atau lebih yang tersedia untuk jawaban saya;)
Alfie Goodacre

@AlfieGoodacre Dengan menambahkan rincian lainnya ke pos. Saya hanya ingin tetap waras dan memposting kode saya sebelum ada yang mencuri tempat saya. : D
PurkkaKoodari
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.