Printer Integer Serbaguna


93

Tulis sepotong kode yang dapat dieksekusi dalam setidaknya tiga bahasa yang berbeda. Kode harus menampilkan bilangan bulat 1di nomor satu 2bahasa , di nomor dua 3bahasa , di nomor tiga bahasa dll.

Aturan:

  • Keluaran harus hanya bilangan bulat, tetapi mengikuti baris baru OK.
  • Kode tidak dapat menerima input apa pun
  • Versi besar yang berbeda dari bahasa yang sama dianggap unik. Jadi, kode Anda dapat dieksekusi dalam Python 2 dan Python 3, namun Python 2.5 dan Python 2.7 tidak dianggap unik.
  • Anda dapat menggunakan bahasa baru jika dan hanya jika memiliki artikel esolang / wiki, juru bahasa dan dokumentasi yang tersedia, dan telah digunakan oleh setidaknya dua pengguna di PPCG sebelum menggunakannya dalam tantangan ini. Itu juga harus mematuhi 4 aturan ini .

Skor kiriman Anda adalah jumlah byte dalam kode Anda dibagi dengan jumlah bahasa yang dapat dijalankan dalam potong dadu. Jadi, solusi 54 byte yang dapat dieksekusi dalam 3 bahasa akan memiliki skor 2:

54 / 3^3 = 2  

Skor yang lebih rendah lebih baik.


Papan peringkat


6
@muddyfish Anda mungkin bisa mengambil versi minor dalam kode, yang kemudian akan memberikan solusi gratis untuk semua 2.7.1untuk 2.7.n. (Sebenarnya, sweerpotato melakukan hal itu dengan versi-versi utama.)
Martin Ender

14
Saya pikir mungkin solusi terpendek berdasarkan bahasa tidak masuk akal di sini ...: P
FryAmTheEggman

3
@Mego Tidak juga saya, itu sebabnya saya meninggalkan komentar sarkastik tentang masalah sehingga orang lain mengetahuinya: P
FryAmTheEggman

12
Saya hanya ingin mengucapkan selamat kepada Anda tentang seberapa seimbang skor Anda. Ketika tantangan kode mencampur dua jumlah menjadi satu skor, keseimbangan hampir selalu tidak ada sehingga jawaban terbaik hanya akan mengoptimalkan salah satu skor tanpa harus mempertimbangkan yang lain sama sekali. Berat kubik dari jumlah bahasa sempurna di sini ... sementara selalu mungkin untuk menambahkan bahasa lain, selalu merupakan tantangan yang sangat bagus (tetapi dapat dilakukan) untuk melakukannya dalam jumlah byte yang tersedia. :)
Martin Ender

20
Dalam tantangan PPCG ini, kami telah membangun polyglot secara kolaboratif. Sekarang memiliki skor yang lebih baik pada tantangan ini daripada entri terkemuka yang diajukan untuk tantangan ini, tetapi tidak masuk akal untuk menyalin upaya kelompok yang terus-menerus diperbaiki, jadi saya hanya menyebutkan di komentar di sini.

Jawaban:


90

30 bahasa, 248 byte, 248/30 ^ 3 = 0,009185

#|#?15g,@           kkmNmSaIeoe99+{\#/-;n@0ea
#[9!@>.>.eeaww#-1@*"12" L
#{  
###
#`{
25
print(4^2 +7)/2


"""
Jo is here.
$'main'MoO OOM
 7
>Jo, 30
>X Jo
f::=~27
::=]##}#(prin 29)
print (7/6*24)###;alert 2#-[>+<-----]>-.|#(write(if(= 1/5 .2)26 3))"""

Sunting: Beatnik dihapus karena pengujian primitif di Beatnik mungkin tidak dimungkinkan.

Kode memiliki tab di dalamnya (yang menjadi hancur oleh Stack Exchange) dan baris tambahan, jadi inilah xxd:

00000000: 237c 233f 3135 672c 4020 2020 0920 2020  #|#?15g,@   .   
00000010: 206b 6b6d 4e6d 5361 4965 6f65 3939 2b7b   kkmNmSaIeoe99+{
00000020: 5c23 2f2d 3b6e 4030 6561 0a23 5b39 2140  \#/-;n@0ea.#[9!@
00000030: 3e2e 3e2e 6565 6177 7723 2d31 402a 2231  >.>.eeaww#-1@*"1
00000040: 3222 094c 0a23 7b20 090a 2323 230a 2360  2".L.#{ ..###.#`
00000050: 7b0a 3235 0a70 7269 6e74 2834 5e32 202b  {.25.print(4^2 +
00000060: 3729 2f32 0a0a 0a22 2222 0a4a 6f20 6973  7)/2...""".Jo is
00000070: 2068 6572 652e 0a24 276d 6169 6e27 4d6f   here..$'main'Mo
00000080: 4f20 4f4f 4d0a 2037 0a3e 4a6f 2c20 3330  O OOM. 7.>Jo, 30
00000090: 0a3e 5820 4a6f 0a66 3a3a 3d7e 3237 0a3a  .>X Jo.f::=~27.:
000000a0: 3a3d 5d23 237d 2328 7072 696e 2032 3929  :=]##}#(prin 29)
000000b0: 0a70 7269 6e74 2028 372f 362a 3234 2923  .print (7/6*24)#
000000c0: 2323 3b61 6c65 7274 2032 232d 5b3e 2b3c  ##;alert 2#-[>+<
000000d0: 2d2d 2d2d 2d5d 3e2d 2e7c 2328 7772 6974  -----]>-.|#(writ
000000e0: 6528 6966 283d 2031 2f35 202e 3229 3236  e(if(= 1/5 .2)26
000000f0: 2033 2929 2222 220a                       3))""".

Atau, Anda dapat menyalin dan menempelkan kode dari ini "Coba online!" tautan .

Ini sangat buruk golf, tetapi saya ingin mengemukakan gagasan bahwa, setelah Anda memiliki bahasa yang cukup, jumlah byte tidak terlalu penting. Setelah mengatakan bahwa ada beberapa bahasa saya masih bisa dengan mudah menambahkan (misalnya Objeck) tetapi saat ini terlalu lama untuk berguna. Saya kehabisan bahasa yang baik, jadi saya mungkin berhenti di sini untuk saat ini.

Jalankan semua program dengan </dev/null 2>/dev/null(mis. Input kosong, STDERR surpress).

Penjelasannya cukup panjang, jadi inilah ringkasan eksekutif:

No.  Lang.              Non-esolang?     2D esolang?      BF/BF-deriv?
--------------------------------------------------------------------------
1    COW                                                       ✓
2    CoffeeScript            ✓
3    Common Lisp             ✓
4    Retina
5    Befunge-93                               ✓
6    Python 2                ✓
7    Rail                                     ✓
8    ETA
9    Prelude
10   Gol><>                                   ✓
11   evil
12   Foo                                                       ✓
13   Ruby                    ✓
14   ><>                                      ✓
15   Brian & Chuck                                             ✓
16   Whitespace
17   3var
18   Axo                                      ✓
19   Labyrinth                                ✓
20   Starry
21   Fission                                  ✓
22   Brainfuck                                                 ✓
23   Julia                   ✓
24   Lily                    ✓
25   GolfScript
26   Chicken Scheme          ✓
27   Thue
28   Perl 6                  ✓
29   Picolisp                ✓
30   TRANSCRIPT

1. SAPI

COW adalah turunan Brainfuck dengan perintah tambahan, salah satunya adalah output numerik. Apa pun yang tidak valid diabaikan, jadi program yang dijalankan hanyalah

MoO OOM

yang menambah sel ke 1 lalu mencetaknya sebagai angka.

2. CoffeeScript (termasuk juru bahasa)

CoffeeScript melihat:

# comments
###
multiline comment
###;alert 2# comment

yang hanya memberi peringatan 2.

(Ya, mungkin akan lebih baik jika bahasa lain mengambil slot ini, tapi saya terlalu malas untuk melakukan perombakan pada saat ini: P)

3. Common Lisp | ideone

Common Lisp (clisp) melihat:

#|
multiline comment
|#(write(if(= 1/5 .2)26 3))"""

1/5adalah rasional dan tidak sama dengan 0.2, jadi 3 dicetak. Prosesnya """adalah kesalahan sintaksis.

Catatan yang printtampaknya menampilkan baris sebelumnya dan ruang tambahan di Common Lisp. Namun, untungnya, writebekerja di Common Lisp dan Chicken Scheme.

4. Retina | Cobalah online!

Batasan yang diperkenalkan : Setiap baris kedua mulai dari yang pertama harus merupakan regex yang valid.

Setiap pasangan garis membentuk tahap penggantian, menggantikan contoh kecocokan dari regex baris pertama dengan baris kedua. Di tengah, kami memiliki pasangan

"" "

yang menggantikan string kosong awal dengan """. Baris kosong terakhir, bukan bagian dari pasangan mana pun, diperlakukan sebagai tahap pertandingan, menghitung jumlah pertandingan regex. Ada empat contoh string kosong di """, yaitu 1"2"3"4.

5. Befunge-93 | Penerjemah

Befunge adalah bahasa 2D, dan instruksi yang relevan adalah

# # 15g,@

di baris pertama, dan 5di 25baris. #lewati instruksi berikutnya, 15gdapatkan char pada posisi (1, 5)dalam kode ( 5in the 25line), ,output char dan @stop.

6. Python 2 | ideone

Python melihat:

# comments
25
print(4^2 +7)/2


"""
multiline string
"""

(4^2+7)/2 = (xor(4,2)+7)/2 = (6+7)/2 = 13/2 = 6, yang printdiedit.

7. Rail | Cobalah online!

Rail adalah bahasa 2D, dan eksekusi dimulai dari $fungsi utama, menuju tenggara. Dengan demikian, bagian kode yang relevan adalah

$'main'
 7
  o
   J

dengan odan Jberasal dari jalur yang digunakan oleh TRANSCRIPT. Setelah menghasilkan 7, kereta memukul Jinstruksi yang tidak dikenal , yang crash program.

8. ETA | Cobalah online!

Batasan yang diperkenalkan: Karakter sebelum program ETA tidak boleh masuk etaoinsh.

ETA hanya mengenali huruf etaoinshdan versi huruf besar mereka, yang berarti kode dimulai dengan

NSaIeoe

n...emendorong nomor basis 7 berdasarkan pada apa yang ada dalam pembatas, untuk SaIapa 624, atau 312 dalam desimal. okemudian output sebagai char, ternyata setelah modulo 256, memberikan char 8(titik kode 56). ekemudian mencoba untuk membagi dengan tumpukan kosong, yang gagal.

9. Pendahuluan | Cobalah online!

Batasan yang diperkenalkan: Tidak lebih dari satu ()di kolom mana pun, ()cocok membaca kolom pada satu waktu, tidak ada loop tak terbatas yang disebabkan oleh ().

Ini membutuhkan juru bahasa Python untuk NUMERIC_OUTPUT = Truemengatur.

Prelude adalah bahasa di mana setiap baris dieksekusi secara terpisah. Banyak karakter dieksekusi, tetapi yang penting adalah

9!

pada baris kedua, yang menghasilkan 9. ()dalam Prelude menunjukkan sebuah loop, tetapi berkat keunggulan #s (yang muncul dari tumpukan), bagian atas tumpukan selalu 0 pada saat loop dipukul, sehingga tidak satupun dari mereka dijalankan. Pembatasan kode sumber Prelude tentang ()memperkenalkan beberapa ruang asing.

10. Gol> <> | Penerjemah

Bagian ini (dan> <>) bekerja seperti jawaban Martin . Kode yang relevan adalah

#                                      ;n@0ea

Gol> <> adalah bahasa 2D dan #mencerminkan IP, membuatnya bergerak ke kiri. Itu membungkus, mendorong 10, 14 dan 0 ke tumpukan. @kemudian memutar tumpukan, membawa 10 ke atas, nmengeluarkannya dan ;menghentikan program.

11. jahat | Cobalah online!

Bagian ini juga mirip dengan jawaban Martin.

kejahatan mengabaikan segalanya kecuali huruf kecil. Mengabaikan beberapa karakter lagi, bagian yang relevan adalah

aeeeaeeaww

di mana apeningkatan variabel A, eadalah fungsi menenun kejahatan yang mengocok bit A, dan woutput A. Karenanya kita menghasilkan 1dua kali, memberi 11.

Tetapi bagaimana dengan sisa instruksi, dan terutama wpada baris terakhir? Katakan saja bahwa kadang-kadang lebih mudah untuk hanya mengacaukan kode dan berdoa itu masih berfungsi dalam segala hal yang, di sini, entah bagaimana ...

12. Foo | Cobalah online!

Foo menampilkan apa pun di antara tanda kutip ganda, jadi bagian yang relevan adalah

"12"

di baris kedua. Namun, karena kita perlu tanda kutip ganda nanti kita menggunakan metode yang mirip dengan jawaban Martin untuk membuat kesalahan Foo, yaitu sebelumnya #-1@. Tidak jelas mengapa itu bekerja dalam bahasa yang digunakan prajurit dalam menghadapi tumpukan kosong dan pembagian dengan nol kesalahan, tapi saya senang itu terjadi.

13. Ruby | ideone

Seperti Python, Ruby melihat:

# comments
25
print(4^2 +7)/2


"""
multiline string
"""

Namun, perlu dicatat bahwa string multiline sebenarnya tiga senar yang terpisah ( "", "...", "") concatenated bersama-sama. Garis cetak menampilkan (4^2+7) = xor(4,2)+7 = 6+7 = 13, sebelum gagal mencoba membagi nildengan 2.

14. > <> | Cobalah online!

Bagian ini sama dengan bagian Gol> <>, kecuali @membawa 14 ke atas sebagai gantinya, yang akan dikeluarkan.

15. Brian & Chuck | Cobalah online!

Brian & Chuck adalah turunan BF dengan dua kaset, di mana pointer instruksi satu tape adalah pointer memori tape lainnya. Dengan tidak adanya ```, dua baris pertama dari kode sumber digunakan untuk menginisialisasi kaset.

Karakter yang relevan di dua baris pertama adalah:

   ?15
#     >.>.

Dalam ?rekaman Brian melewati kontrol ke Chuck dalam sel yang menunjuk (tidak #) adalah nol. Chuck kemudian mengeksekusi >.>., mengeluarkan dua karakter setelah tanda tanya.

16. Ruang Putih | Penerjemah

Menggunakan STLmasing-masing untuk ruang, tab, dan garis, awal program adalah:

SSSTSSSSL
TL
STL
L
L

Baris pertama mendorong 16 ( +10000basis 2), yang sebelumnya TLSTmencetaknya sebagai angka. Tiga baris baru berikutnya menghentikan program.

Namun, perhatikan bahwa program ini khusus untuk penerjemah. Sisa kesalahan sintaksis kode pada sebagian besar penafsir, sehingga diperlukan juru bahasa yang lebih lunak, seperti yang ditautkan di atas.

17. 3var | Cobalah online!

Dari baris pertama, banyak instruksi dijalankan, tetapi yang relevan adalah

kkmmao#/

Karena pembatasan ETA, kami menggunakan kuntuk mengurangi variabel B daripada amenambahnya. kkmengurangi B ke -2 dan mmkotak B dua kali menjadi 16, yang bertambah menjadi 17 dengan a. Ini kemudian di-output dengan o.

#kemudian digunakan untuk mengatur ulang B ke 0, dan /menyebabkan program untuk kesalahan melalui pembagian oleh 0.

18. Axo | Cobalah online!

Batasan diperkenalkan: Tidak ada instruksi sebelum program Axo yang mengubah arah IP

Sekali lagi, banyak instruksi dieksekusi di baris pertama, tetapi yang relevan

# # 15 ,@            9 9  + {   \

Axo adalah bahasa 2D seperti Befunge, dan #juga jembatan yang melewatkan instruksi berikutnya, tetapi hanya jika bagian atas tumpukan adalah nol. 15,dorong ke tumpukan, tetapi tumpukan dikosongkan dengan @. 99+kemudian mendorong 18, {output dan \berhenti.

19. Labirin | Cobalah online!

Labyrinth adalah bahasa 2D lain, dan instruksi yang dijalankan adalah

#|#
 [9!@

#mendorong panjang tumpukan, yaitu 0 pertama kali. |adalah bitwise ATAU, tidak mengubah apa pun karena tumpukan hanya memiliki 0 pada saat ini, dan yang kedua #sekarang mendorong 1 karena nol tunggal. Kami berbelok ke kanan karena angka 1, 9mengonversi angka 1 menjadi 1*10+9 = 19, !mencetaknya, dan @berhenti.

Program ini bergantung pada fakta bahwa [saat ini tidak ada instruksi yang diakui, dan karenanya diperlakukan sebagai tembok.

20. Starry | Cobalah online!

Batasan yang diperkenalkan: Semua +s harus memiliki setidaknya satu ruang sebelumnya

Jika kami menghapus karakter yang tidak dikenal, bagian kode yang relevan adalah

,       +.. +

,adalah input, tetapi karena kita pipa dari /dev/nulltidak ada, mendorong 0 ke stack. A +dengan n >= 5spasi sebelumnya mendorong n-5, sehingga instruksi berikutnya mendorong 2. ..lalu menampilkan dua digit ini dalam urutan terbalik.

Selanjutnya kita memiliki +dengan satu ruang sebelumnya, yang duplikat. Namun, tumpukannya kosong, jadi kami galat.

21. Fisi | Cobalah online!

Satu-satunya bagian yang relevan untuk Fission adalah

*"12"L

Lmemunculkan atom bergerak ke kiri, "21"mencetak 21 dan *berhenti.

22. Brainfuck | Cobalah online!

Pembatasan yang diperkenalkan: Tidak .sebelum yang pertama[

Ini membutuhkan penerjemah yang memberikan 0 pada EOF dan memiliki sel 8-bit. Kode yang relevan adalah

,+-[>.>.-+.>,>]-[>+<-----]>-..

Inital -adalah untuk mengimbangi +, dan yang pertama [...]tidak dieksekusi karena sel adalah 0. Berikut ini -[>+<-----]>-mengatur sel ke kode char 2, dan ..mengeluarkannya dua kali.

23. Julia | Cobalah online!

Julia melihat:

# comments
25
print(4^2 +7)/2

Apa yang dicetak adalah 4^2+7 = pow(4,2)+7 = 16+7 = 23, dan kesalahan program keluar mencoba untuk membagi nothingoleh 2. Perhatikan bahwa Julia tampaknya tidak keberatan dengan fakta bahwa sisa kode akan menyebabkan kesalahan sintaksis pula.

24. Lily | Penerjemah

Lily melihat:

# comment
#[
multiline comment
]## comment
print (7/6*24)# comment

7/6*24 = 1*24 = 24 dicetak.

25. GolfScript | Cobalah online!

GolfScript melihat:

# comments
25
print(

GolfScript berbasis stack, jadi 25 didorong ke stack, lalu muncul dan dicetak bersama print. (kemudian mencoba untuk mengurangi string kosong implisit pada tumpukan, yang gagal dan kesalahan program.

26. Skema Ayam | ideone

Chicken Scheme memiliki #| ... |#sintaks komentar multiline yang sama dengan Common Lisp. Namun, dalam

(write(if(= 1/5 .2)26 3))

1/5adalah pelampung yang adalah sama dengan 0.2, sehingga 26 dikeluarkan sebagai gantinya.

27. Thue | Cobalah online!

Thue adalah bahasa yang didasarkan pada penulisan ulang string. Bagian yang relevan pertama adalah

f::=~27
::=

yang mendefinisikan substitusi f -> 27kemudian menunjukkan akhir dari substitusi dengan ::=. Satu-satunya yang fmasuk ifkemudian diganti dengan 27, yang dikeluarkan.

28. Perl 6 | ideone

Perl 6 memiliki sintaks komentar baru, yaitu #`(some bracket)yang merupakan komentar multiline hingga braket yang cocok. Jadi, Perl 6 melihat:

# comments
#`{
multiline comment
}# comment
print (7/6*24)# comment

yang mencetak 7/6*24 = 28.

29. Picolisp | ideone

Picolisp melihat:

# comment
#{
multiline comment
}#(prin 29)

yang mencetak 29. Baris sesudahnya kemudian menyebabkan kesalahan sintaks.

30. TRANSCRIPT | Cobalah online!

TRANSCRIPT adalah esolang tematik yang dimodelkan setelah petualangan teks. Baris yang tidak dikenal diabaikan (yang memungkinkan Anda untuk menambahkan teks cerita / rasa tambahan di antara instruksi kode yang sebenarnya), sehingga baris yang relevan adalah:

Jo is here.
>Jo, 30
>X Jo

Baris pertama mendeklarasikan variabel string Jo, menggunakan nama dua huruf karena nama satu huruf tampaknya gagal. Baris kedua mengatur string ini ke "30", yang dikeluarkan oleh X("memeriksa") di baris ketiga.


12
Daaaaaaaaaang ...
AdmBorkBork

9
Saya menduga ini mungkin merupakan skor non-nol terendah pada pertanyaan apa pun di sini.
Morgan Thrapp

Ini luar biasa. Saya kagum.
Nic Hartley

2
* positif, ada beberapa skor negatif untuk jawaban singkat dengan bonus.
CalculatorFeline

Pro-tip dari masa depan: tab Anda tidak akan berantakan jika Anda mengelilingi kode Anda dalam pretag alih-alih menggunakan blok kode gaya penurunan harga.
Jakob

148

15 bahasa, 68 66 65 byte / 15 ^ 3 = 0,019 ...

Retina , Starry , Prelude , ETA , Axo , Labyrinth , Hexagony , Foo , Brian & Chuck , Gol> <> , evil , Spasi , Fission , > <> dan GolfScript .

Setelah menulis ulang besar-besaran, saya berhasil memuat empat bahasa lagi. Kode ini berisi beberapa tab untuk Whitespace. Karena Stack Exchange mengonversinya menjadi spasi, saya telah mewakili mereka dengan di \tbawah ini:

#I5aeeNTH{\?      \t\t + +3;n@"8"ea9
15}7'`--~!@<"31"LSOe.\t
 \teaww`

Saya pikir saya sudah selesai menambahkan bahasa (walaupun menambahkan hanya satu mungkin menghemat beberapa byte dalam apa yang sudah saya miliki). Saya bertanya-tanya apakah itu golfable ... 65 byte untuk 15 bahasa cukup melompat dari 32 byte untuk 11 bahasa, dan saya sekarang punya setidaknya satu karakter yang tidak berguna di sana untuk membuat Foo bekerja ..

Cetakan retina 1

Cobalah online.

Untungnya, baris pertama adalah regex yang valid. Namun regex itu jelas tidak cocok dengan input kosong, jadi tahap pertama (terdiri dari dua baris pertama) tidak melakukan apa-apa.

Baris ketiga adalah sendiri, jadi itu diperlakukan sebagai tahap Pertandingan yang, secara default, menghitung jumlah pertandingan. Namun, `ini adalah pemisah yang memberi tahu Retina bahwa bagian di depannya adalah string konfigurasi (tidak diketahui opsi mana pun yang diberikan di sana) dan bagian setelahnya adalah regex. Jadi regex kosong dan Retina menemukan tepat satu kecocokan.

Cetakan berbintang 2

Cobalah online.

Starry mengabaikan segalanya kecuali spasi dan +*,'`.. Setiap perintah adalah salah satu karakter tersebut bersama dengan spasi sejak karakter terakhir. Jadi mari kita hapus semua kode asing:

       + +'`. `

Tujuh spasi diikuti oleh +dorongan a 2. Satu spasi diikuti oleh +duplikatnya.'adalah lompatan bersyarat. Ini muncul bagian atas tumpukan, yang benar (positif), sehingga melompat ke label yang sesuai (di mana label ditunjukkan oleh `dan "sesuai" berarti "dengan jumlah ruang utama yang sama"), yang merupakan yang pertama `. .tanpa spasi di depannya kemudian cetak bagian atas tumpukan sebagai angka.

Cetakan awal 3

Cobalah online.

Ini mengasumsikan interpreter Python yang menggunakan output numerik. Mari kita hapus semua larangan:

# 5        ?         + +3    8   9
15 7  -- !   31

Suara pertama melakukan banyak hal, tetapi tidak ada yang penting, karena tidak ada !untuk mencetak hasilnya. Suara kedua mendorong a 1, lalu a 5, lalu a 7. Kami mengambil perbedaan dari dua yang terakhir untuk didapatkan -2, dan kemudian mengurangkannya dari 1untuk mendapatkan 3. !mencetaknya. Suara ketiga hanya tanpa operasi.

Cetakan ETA 4

Cobalah online.

ETA mengabaikan segalanya kecuali karakter ETAOINSH(dalam hal apa pun). Jadi kode seperti yang terlihat oleh ETA adalah:

IaeeNTHneaSOeea

Imencoba membaca input tetapi tidak bisa, jadi itu mendorong -1. amendorong nomor baris saat ini ditambah 1, yaitu 2. eadalah divmod , yang menggantikan yang dengan 0dan 1(atau -1, saya tidak benar-benar tahu, tetapi tidak masalah). Selanjutnyae menggantikan keduanya dengan 0.

Sekarang bagian yang menarik. NTHneadalah basis-7 angka literal. Ndan ehanya pembatas, dan tiga digit THN. Yaitu 54(di mana Tdigit 1, Hadalah 0dan nsekarang 5). amendorong 2sekali lagi. Skurangi itu, menghasilkan 52dan Omengeluarkannya sebagai karakter ( 4). Sekarange coba divmod lagi, tetapi stack berisi dua nol, sehingga program berakhir dengan kesalahan (tetapi tidak mencemari STDOUT saat melakukannya).

Sumbu cetak 5

Cobalah online.

Bahasa ini cukup banyak bertanggung jawab untuk menulis ulang. Saya tidak dapat memiliki }di baris pertama karena akan memblokir input di Axo (lihat riwayat revisi untuk apa yang saya bicarakan). Untuk Axo, hanya bagian kode ini yang relevan:

#I5aeeNTH{\

Untungnya, Axo juga memiliki implisit 0di bagian bawah tumpukan, karena #muncul bagian atas tumpukan (untuk memeriksa apakah instruksi selanjutnya harus dilewati atau tidak). Semua surat itu adalah no-ops. Kemudian 5mendorong 5, {mencetaknya, \mengakhiri program. Cukup sederhana, sungguh.

Cetakan labirin 6

Cobalah online.

Saya memotong kode sedikit, karena setengah yang tepat tidak pernah tercapai, dan saya juga menggunakan tdi tempat \t, sehingga kolom berbaris dengan benar:

#I5aeeNTH{\
15}7'`--~!@
 teaww`

Sekarang, huruf, spasi, dan tab adalah dinding di Labyrinth, sehingga kode yang dapat diakses sebenarnya terlihat seperti ini:

# 5      {\
15}7'`--~!@
      `

Penunjuk instruksi akan secara otomatis mengikuti jalur itu. #mendorong kedalaman tumpukan utama ( 0) dan 15mengubahnya menjadi 15. }memindahkannya ke tumpukan tambahan, dan kita tidak akan menggunakannya lagi. Itu dengan mudah membuat bagian atas tumpukan nol, sehingga IP tidak belok kiri ke 5. 7mengubah nol menjadi a 7, 'adalah no-op. Ini `adalah negasi unary, jadi kami mengerti -7. Sekarang -kurangi -7dari yang implisit di 0bawah membuatnya 7. Kali ini, IP memang berbelok ke kanan `, yang merupakan negasi unary, jadi kami dapatkan 7lagi. IP menyentuh jalan buntu. Itu- hal yang sama seperti sebelumnya, jadi kami dapatkan7sekali lagi. Karena bagian atas tumpukan sekarang positif, IP berbelok ke kanan. Ada lagi -yang memberi -7lagi. Maka ~bitwise TIDAK, yang memberi 6dan !mencetaknya. Itu saat yang tepat untuk melakukannya, karena sekarang tumpukan kosong lagi sehingga IP tidak akan berbelok ke kiri ke {tetapi sebaliknya terus lurus ke depan ke @yang mengakhiri program.

Cetakan segi enam 7

Cobalah online.

Kode yang tidak dilipat terlihat seperti ini:

     # I 5 a e
    e N T H { \
   ? + + 3 ; n @
  " 8 " e a 9 1 5
 } 7 ' - - ~ ! @ <
  " 3 1 " L S O e
   . e a w w . .
    . . . . . .
     . . . . .

Biasanya, itu akan menjadi program Hexagony yang menakutkan, tetapi karakter yang sebenarnya digunakan tidak terlalu banyak. Sebenarnya mereka hampir sama dengan yang digunakan oleh Labyrinth dan saya pikir cara saya membedakan antara 5dan 6cukup bagus. :)

Baris teratas pada dasarnya dapat diabaikan. #biasanya akan beralih ke IP yang berbeda, tetapi tepi memori saat ini adalah 0, jadi tidak. Surat-surat hanya menetapkan nilai memori tetap, tetapi kami tidak akan menggunakannya. Setelah akhir baris pertama, aliran kontrol berlanjut di baris tengah (mulai dari }, ke kanan). The }bergerak ke tepi memori lain. 7setel tepi itu ke 7. 'bergerak kembali ke tempat kami berasal. -kurangi tepi memori yang baru saja kita atur 7dari tepi memori yang tidak digunakan ( 0), jadi kita dapatkan -7. Selanjutnya -melakukan hal yang sama lagi, jadi ini adalah no-op. Sejauh ini, sangat mirip dengan Labyrinth (terlepas dari tata letak memori). Tapi sekarang~ bukan bitwise BUKAN tetapi negasi unary dalam Hexagony. Jadi ini 7malah memberi 6. !@, seperti dalam Labyrinth mencetak nilai dan mengakhiri program.

Cetakan Foo 8

Cobalah online.

Seperti yang kita semua tahu sejak The Programming Language Quiz hal pencetakan cukup sepele di Foo, bahkan jika sebagian besar kode adalah serakan acak karakter. Tidak ada karakter yang mempengaruhi output kecuali "8"yang dicetak 8. Nah, ada yang "31"nanti, tapi Foo berakhir dengan kesalahan di akhir baris pertama. Saya tidak begitu yakin mengapa itu terjadi, tetapi itu mengharuskan 3(atau digit lainnya) di baris atas, yang tidak digunakan di tempat lain.

Cetakan Brian & Chuck 9

Cobalah online.

Mari kita lakukan hal ini lagi di mana kita menghapus baris ketiga (tidak pernah diuraikan) dan mengganti semua karakter yang tidak relevan (yaitu no-ops, atau sel yang tidak dibaca) dengan spasi:

         { ?         + +         9
  }   --   <        .

Sama seperti pengingat, setiap baris adalah seperti Brainfuck yang rekamannya adalah kode sumber dari program lain. Aliran kontrol dimulai pada baris pertama (disebut Brian).

The {bergerak pita kepala semua jalan ke kiri (di mana sudah ada), dan ?tangan mengendalikan mengalir ke Chuck (baris kedua). Di sana, }gerakkan kepala kaset ke kanan hingga menemukan sel nol. Itu tidak terjadi sampai akhir program, sehingga kepala kaset berakhir satu sel setelah 9. -mengurangi sel itu, tapi itu tidak relevan. <memindahkan kepala kaset ke atas 9dan .mencetaknya. Chuck kehabisan program dan berakhir.

Gol> <> cetakan 10

Diuji di sini.

#adalah mirror, sehingga IP langsung melompat ke akhir baris pertama (dan ke kiri). Itu 9bisa diabaikan. amendorong 10, emendorong 14, "8"mendorong kode karakter 8, @memutar tiga elemen tumpukan teratas (menarik ke atas 10), sehingga nmencetak 10dan ;mengakhiri program.

Terima kasih kepada Sp3000 karena menyarankan untuk menggunakan @alih-alih !(yang menyimpan byte).

cetakan jahat 11

Terima kasih kepada Sp3000 karena mengirimi saya beberapa daftar perintah paksa untuk menghasilkan angka satu digit.

Cobalah online.

jahat mengabaikan segalanya kecuali huruf kecil sehingga kode terlihat seperti ini:

aeeneaeeaww

Juga, nmemengaruhi beberapa kondisi yang tidak kita pedulikan, jadi mari kita abaikan juga. Sekarang amenambah register (yang dimulai pada 0), dan emerupakan operasi "menenun" sihir jahat yang memungkinkan bit dengan cara tertentu. aeeeaeeakebetulan menghasilkan nilai 49yang merupakan kode karakter 1. wwmencetaknya dua kali.

Cetakan spasi putih 12

Cobalah online.

Oke, kita tahu Whitespace hanya membaca spasi, tab dan linefeed, jadi mari kita menulis kode seperti yang terlihat oleh Whitespace dengan STL:

SSSSSSTTSSLTLST

Itu dua perintah:

SSSSSSTTSSL
TLST

Yang pertama mendorong nomor itu 12. Secara khusus, SSmulai angka literal. Yang berikutnya Sadalah tanda bit (positif). Maka semuanya Ladalah representasi biner dari angka tersebut. Ada satu ton nol terkemuka, yang kita butuhkan untuk Starry, tetapi mereka tidak mempengaruhi jumlahnya. Kemudian TTSSs berada 12dalam biner. Fakta menyenangkan: jika saya menambahkan bahasa ke-16, saya dapat menyimpan byte di sini, karena Starry dapat menggunakan keempatnya Sdalam reparasi biner 16. Saya ragu saya akan ...

The TLSThanya mencetak bagian atas tumpukan sebagai angka. ( TLmenandai perintah sebagai perintah I / O, dan STsedang mencetak angka.)

Cetakan fisi 13

Cobalah online.

Fission hanya melihat bagian kode ini:

           <"31"L

Lmulai mengontrol aliran dengan atom yang bergerak ke kiri. "matikan mode cetak, sehingga 31hanya mencetak 13. Kemudian atom ditangkap dalam irisan <, yang mengakhiri program.

> <> cetakan 14

Diuji di sini.

Membedakan antara> <> dan Gol> <> tidak semudah yang saya kira, karena Gol> <> hampir selalu melakukan hal yang sama dengan> <> untuk perintah yang ada di keduanya, dan perintah yang hanya ada di Gol> < > menyebabkan> <> macet. Namun, @putar sebaliknya>>, sehingga mendorong ke bawah 7alih - alih menarik 10, dan kemudian 14dicetak bukan 10.

Cetakan GolfScript 15

Cobalah online.

Yang ini paling sederhana: #komentar dari baris pertama. Kemudian 15mendorong dirinya sendiri dan }merupakan "komentar super", yang mengabaikan seluruh program. Jadi 15dicetak di akhir program.


34
Ini sangat mengesankan!
sweerpotato

1
@YassinHajaj Terima kasih, diperbaiki.
Martin Ender

2
Niiice. Pekerjaan bagus untuk 15 bahasa!
ev3commander

1
@SnoringFrog Nah, ini dia.
Martin Ender

1
@Eumel Terima kasih, tetapi bounty ini khusus untuk bahasa "normal" yang tercantum dalam deskripsinya, jadi bounty harus masuk ke jawaban seperti itu (seperti solusi Sp3000 yang sangat bagus). Saya pikir saya mendapat cukup perwakilan dari ini. ;)
Martin Ender

42

Python 1.x, 2.x dan 3.x, 32 byte / 3 ^ 3 = 1.1851 ...

import sys
print(sys.version[0])

Mencetak angka pertama dari versi, yang ada 1di Python 1.x, 2di Python 2.x dan 3di Python 3.x.

Pada saat kita mendapatkan Python 9.x skor saya akan menjadi sangat bagus 0.04389!

: ~)!


10
Dari obrolan: Ya, ini murah dan valid =) Ini adalah bagian dari alasan mengapa hanya versi utama yang dianggap cukup unik. Saya tidak tahu berapa banyak versi Python ada, tetapi Anda mungkin bisa mendapatkan skor Anda sangat rendah menggunakan sesuatu seperti ini ... Ini salah satu dari sedikit solusi di mana saya benar-benar mengerti apa yang terjadi, jadi +1 dari saya; - )
Stewie Griffin

6
Dalam python 10.x (ketika ada) bukankah itu akan mencetak 1karena itu adalah karakter pertama dari string "10.whthing"?
ev3commander

1
@ ev3commander Namun, kiriman ini tidak ditentukan untuk menghasilkan output yang benar di python10.
Tyzoid

Tetap! Bekerja pada versi bukti masa depan, tetapi Python 1.x tidak semudah yang lain: ~)!
sweerpotato

1
Yang perlu saya lakukan adalah membuat bahasa yang memiliki tiga versi utama. Di ketiga versi utama tersebut, saat menjalankan file kosong mengembalikan nomor versi utama. Hasilnya adalah 0/3 ^ 3 = 0 Sempurna.
Braden Steffaniak

32

3 bahasa, 2 byte / 27 = 0,074

1P

Yah, itu mengalahkan setengah kiriman setidaknya: P

1. GolfScript

GolfScript mengabaikan P, hanya menghasilkan 1. Cobalah secara online .

2. Par

Padalah 2-to-the-power-of, jadi 1P = 2^1 = 2. Cobalah online .

3. Serius

Pmemberikan nth prime, nol diindeks. Kami mendapat 3 karena itulah prime kedua. Cobalah online .


Catatan

Tujuan awal saya adalah menemukan jawaban yang valid dalam 1 byte. Percobaan pertama saya adalah \x12yang berfungsi di Bubblegum dan gs2 , tetapi tantangannya membutuhkan minimal tiga bahasa. \x13akan bekerja jika ada bahasa yang menghasilkan 1.

Menyerah pada jawaban 1 byte, saya pindah ke dua byte. 3uadalah panggilan dekat, menghasilkan 1 di Japt , 3 di GolfScript dan 4 di Seriously, tetapi sulit untuk menemukan bahasa yang dihasilkan 2 untuk mengisi celah.

Semua ini membuat saya terlalu lama: /


20

6 Bahasa - 44 byte / 6 ^ 3 = 0,204 ...

Terima kasih kepada SnoringFrog karena telah menghemat 10 byte!

Bekerja di:

  • Dibalik
  • Pyth
  • Brainfuck
  • Segi enam
  • Ruang putih
  • AniRad v0.2

2# "1",@"-[----->+<]>.*@@@!4<SSTST
T
ST
 >6=

Catatan: Sebelum mencobanya secara online, pastikan untuk mengganti S dengan spasi dan T dengan tab, atau mengonversi hexdump berikut ke ASCII

32 23 20 22 31 22 2c 40 22 2d 5b 2d 2d 2d 2d 2d 3e 2b 3c 5d 3e 2e 2a 40 40 40 21 34 3c 20 20 09 20 09 0d 0a 09 0d 0a 20 09 0d 0a 20 3e 36 3d

Saya akan mencoba menggunakan lebih banyak bahasa pemrograman :)

Befunge (cetakan 1 ):

Cobalah online

2# "1",@"-[----->+<]>.*@@@!4<
2                             # This puts 2 onto the stack
 #                            # Skips the next op (the space)
   "1"                        # Sets the ASCII value of 1 onto the stack
      ,                       # Pop the last item (1)
       @                      # Terminate program

Pyth (cetakan 2 ):

Cobalah online

2# "1",@"-[----->+<]>.*@@@!4<
2                             # Prints 2
 #                            # Infinite while loop until an error occurs
   "1"                        # String
      ,@                      # This gives the error and terminates the program

Brainfuck (cetakan 3 ):

Cobalah online

2# "1",@"-[----->+<]>.*@@@!4<
2# "1",@"                     # Since these are not brainfuck ops, these will be ignored
         -[----->+<]>         # Puts "3" on the stack
                     .        # Prints the last item (3)     

Hexagony (cetakan 4 ):

Cobalah online

2# "1",@"-[----->+<]>.*@@@!4<   

Versi yang lebih mudah dibaca:

   2 # " 1       # The steps:
  " , @ " -      # 1 (2) - Hexagony starts at the top-left of the hexagon
 [ - - - - -     #       - This immediately puts 2 onto the stack
> + < ] > . *    # 2 (#) - Since the stack is 2, this makes the 2nd pointer the 
 @ @ @ ! 4 <     #       - new current pointer
  > 6 = . .      # 3 (*) - The position of the 2nd pointer is in the left-most
   . . . .       #       - position. This sets the stack to the product
                         - of the two neighbours which is zero
                 # 4 (<) - Changes the pointer direction to west
                 # 5 (4) - Sets the stack to 4
                 # 6 (!) - Outputs the decimal 4
                 # 7 (@) - Terminates the program

Spasi putih (cetakan 5 ):

Cobalah online

Karena karakter lain diabaikan tetapi spasi dan tab putih, kita dibiarkan dengan yang berikut:

SSTST                 # This pushes 5 onto the stack
T                     # 
ST                    # This prints the decimal

AniRad versi 0.2 (mencetak6 ):

Entah bagaimana ini bekerja untuk versi 0.2, tetapi memberikan kesalahan untuk versi 0.4. Saya tidak tahu mengapa. Anda dapat menemukan versi 0.2 di sini . Untuk menjalankan ini, Anda dapat menyalin dan menempelkan kode juru bahasa untuk repl.it dan menjalankannya. Setelah itu, Anda hanya perlu menempelkan program ke STDIN dan menjalankannya.

2# "1",@"-[----->+<]>.*@@@!4<      # (#)  Starts at the hashtag (starting point)
                                   #      Direction is down
                                   # (>)  When the pointer gets to the '>', it changes
 >6=                               #      its direction
                                   # (6) Puts 6 onto the stack 
                                   # (=) Pushes the result and terminates

1
Lebih banyak bahasa jelas merupakan cara saya pikir ... penyebut kubik benar-benar murah hati, sehingga tidak terlalu sulit untuk mengalahkan skor saya setelah Anda memiliki 5 atau 6 bahasa.
Martin Ender

@ MartinBüttner, Ya, meskipun saya tidak bisa melihat cara menambahkan bahasa baru
Adnan

2
@ Martin ya, ini murah hati. Maksud dari penyebut kubik adalah untuk mendorong lebih banyak bahasa. Saya pikir 6 bahasa dalam 50 byte harus bernilai sama dengan 5 bahasa dalam 30 byte. :-) pasti akan semakin sulit semakin banyak bahasa yang Anda gunakan.
Stewie Griffin

Kode spasi putih Anda dapat dikurangi sedikit (dan saya tidak berpikir itu akan mempengaruhi salah satu bahasa Anda yang lain. (Menggunakan L untuk linefeed), daripada yang SSSSSSSSSSTTSTSTLTLSSAnda miliki sekarang, Anda dapat melakukannya SSSTSTLTLST. Ini mendorong literal 5 pada tumpukan, lalu cetak sebagai bilangan bulat
SnoringFrog

@SnoringFrog Terima kasih! Saya telah mengeditnya
Adnan

14

6 7 bahasa, 32 37 byte, skor 0,148 ... 37/7 3 ≈ 0,107872 ...

#7+!"@\"6.@;n5
print(4--int(-3/2)#"
)

Brainfuck-ng

+menambah sel saat ini, !dicetak sebagai bilangan bulat, @keluar. #dan "adalah NOP.

Python 2

Baris pertama adalah komentar. Menggunakan divisi integer, hitung4 - -int(-3 / 2) = 4 - -int(-2) = 4 - -(-2) = 4 - 2 = 2 dan mencetak hasilnya.

Python 3

Sama seperti sebelumnya, tetapi dengan divisi float. 4 - -int(-3 / 2) = 4 - -int(-1.5) = 4 - -(-1) = 4 - 1 = 3.

Lua

--memulai komentar, dan #pada baris pertama adalah komentar, jadi pada dasarnya print(4).

> <>

#memantulkan IP, 5mendorong 5, nmencetak angka dan ;berhenti.

Dibalik

#melompati +, !secara logis meniadakan bagian atas tumpukan, "@\"mendorong tali @\, 6mendorong 6, .mencetak angka dan @berhenti.

Pyth

#memulai infinite loop, menghilangkan segala kesalahan. 7mencetak 7, kemudian ikuti +!"string")yang pada dasarnya menyebabkan kesalahan karena tidak memiliki dua operan untuk +, menghentikan program.


13

JavaC ++ C, 363/27 = 13,4 ....

Java mencetak 1, C ++ mencetak 2, C mencetak 3. Tidak memecahkan catatan apa pun di sini (karena Java), tapi saya sangat suka cara pintar dan kasar dalam membuat poliglot dalam bahasa-bahasa ini yang saya temukan.

//\u000a/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*\u002a/
import static java.lang.System.out;
public class P{//*/
/*\u002a/public static void//*/
main(/*\u002a/String[] args//*/
){//\u000a/*
out.print=p;
//\u002a/
out.print(1);}
/*\u002a/}//*/

Ini berantakan. Berikut ini rincian cara kerjanya. Literal Unicode ( \u000a, atau dikenal sebagai linefeed, dan \u002a, atau dikenal sebagai *) diperluas oleh kompiler Java ke dalam karakter aktualnya. Jadi, inilah yang dilihat kompiler Java:

//
/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/**/
import static java.lang.System.out;
public class P{//*/
/**/public static void//*/
main(/**/String[] args//*/
){//
/*
out.print=p;
//*/
out.print(1);}
/**/}//*/

Semua hal itu pada awalnya diabaikan karena semuanya dibungkus dengan komentar multi-baris ( /* ... */). Kemudian, kita melihat bahwa mencampur komentar baris tunggal dan banyak baris memungkinkan kita untuk mengontrol bagian mana yang dikomentari dalam setiap bahasa. Pada metode utama, kita memulai komentar multi-baris, dan kemudian miliki //*/. Biasanya, ini akan menjadi komentar single-line, tetapi karena kita berada dalam komentar multi-line, yang //tidak melakukan apa-apa, memungkinkan*/ untuk menutupnya.

Ini adalah kode Java yang setara, dengan komentar yang dihapus:

import static java.lang.System.out;
public class P{
public static void
main(String[] args
){
out.print(1);}
}

Inilah yang dilihat oleh kompiler C / C ++ (Saya telah menghapus literal Unicode, karena mereka tidak diperluas oleh kompiler dan karenanya tidak melakukan apa-apa):

///*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*/
import static java.lang.System.out;
public class P{//*/
/*/public static void//*/
main(/*/String[] args//*/
){//\/*
out.print=p;
///
out.print(1);}
/*/}//*/

Di sini, komentar baris tunggal mengesampingkan pembatas komentar multi-baris di awal, jadi semua #defines dan#include sudah diproses sebelumnya. Selanjutnya, komentar multi-baris digunakan untuk mengomentari kode boiletplate untuk Java. Ini adalah kode yang setara, dengan komentar yang dihapus:

#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
main(
){
out.print=p;
out.print(1);}

Trik C / C ++ polyglot standar (the #ifdef __cplusplus) digunakan untuk mendefinisikan token osebagai salah satu "2"atau "3", tergantung pada apakah itu kompiler C ++ atau C yang mengkompilasi kode. Selanjutnya, kami mendefinisikan fungsi pyang mengambil intargumen dan panggilan tunggal (diabaikan) printf, menggunakan otoken kami yang baru didefinisikan . Seperti biasa, nilai kembali ditinggalkan, karena kita tidak dalam mode ketat. Selanjutnya, kita mendefinisikan a structdengan anggota tunggal, penunjuk fungsi yang tanda tangannya cocok p, dan membangun sebuah instance bernama out. Dalam metode utama (kita tinggalkan intseperti biasa), alamat pditugaskan ke out.print(panggilan begituout.print panggilan p), dan itu disebut.

Jika C ++ tidak termasuk dalam bahasa, kami dapat menghapus semua kode preprosesor, dan mendefinisikan psebagai int p(int a){puts("2");}. Sayangnya, C ++ mengharuskan #includeuntuk melakukan I / O. Jika C tidak dimasukkan, kita bisa menghapus definisi pdan #ifdefmakro preprosesor, dan secara langsung menentukan fungsi anggota di structalih - alih membutuhkan pointer fungsi. Sayangnya, C tidak mendukung fungsi anggota.


12

4 bahasa, 28 byte / 64 = 0,4375

print((0 and 3^1or 1/2>0)+1)

1. Python 2

0adalah falsy dan /pembagian integer, jadi

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0 > 0) + 1 = False + 1 = 1

2. Perl (juga Python 3)

0itu palsu dan /divisi float, jadi

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0.5 > 0) + 1 = 1 + 1 = 2

3. Ruby

0adalah benar dan ^bitor xor, jadi

(0 and 3^1 or 1/2 > 0) + 1 = xor(3,1) + 1 = 2 + 1 = 3

4. Lua

0adalah kebenaran dan ^eksponensial, jadi

(0 and 3^1 or 1/2 > 0) + 1 = pow(3,1) + 1 = 3 + 1 = 4

Perhatikan bahwa Lua dan Ruby tidak dapat menambahkan booleans seolah-olah mereka adalah bilangan bulat, karenanya pengelompokan mereka bersama. Sayangnya 0andtidak berfungsi di Lua, jadi kami tidak dapat menyimpan byte di sana.


Versi 17 byte sebelumnya yang mencetak 1 (Lua), 2 (Ruby), 3 (Python / Perl):

print(2^(0 or 1))

-3 byte terima kasih kepada @xnor untuk versi ini, membuatnya jauh lebih rapi :)


Akan 2^(0 or 1)bekerja
xnor

@xnor Ah ya, terima kasih :)
Sp3000

8

BFSRS> <> funge93thon123, 73/343 ≈ 0,212827 ...

Brainfuck, Serius ,> <>, Befunge-93, Python 1, Python 2, Python 3

# 4['.]@kX21z-[>+<-----]>--.<;n3
import sys;print(3+int(sys.version[0]))

Berisi unsintables, hexdump (reversibel dengan xxd -ps -r):

2320345b272e5d406b5832317a7f2d5b3e2b3c2d2d2d2d2d5d3e2d2d2e3c
3b6e330a696d706f7274207379733b7072696e7428332b696e7428737973
2e76657273696f6e5b305d2929

Saya akan menambahkan lebih banyak bahasa (dan mungkin byte) dari waktu ke waktu. Bahasa di header dicantumkan sesuai dengan apa yang mereka cetak. Diasumsikan sel pembungkus 8-bit dan kaset yang tidak akan mengeluh tentang kiri posisi awal (pembungkus atau tak terbatas) untuk Brainfuck.

Brainfuck:

[.]   initial value of first cell is 0, so loop is skipped
-[>+<-----]>--  push 49 (ASCII ordinal of 1)
.     print "1"
<     move to blank cell
[0]   skip loop because cell is 0
      everything else is ignored

Serius :

# 4['.]@  does some stuff we don't care about
kX        pop entire stack, push as list, discard (essentially the same as é, but is ASCII so we can use Python)
2         push 2
1z        pop 1 item from stack and print (used instead of . so Brainfuck doesn't print here; same as ü in this scenario, but is ASCII so we can use Python)
0x7f      terminate program
          everything else is ignored

><>:

#    mirror, reverse direction
3n;  push 3, print "3", end (reversed because IP is scanning RTL at this point)
     everything else is ignored

Befunge-93:

#     jump over the space
4['.] push 4, print 4 (brackets and ' do nothing)
@     end program
      everything else is ignored

Python 1 (terima kasih ikan lumpur):

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+1=5

Python 2 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+2=6

Python 3 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+3=7

Python 1 juga berfungsi. Lihat codegolf.stackexchange.com/a/65652/32686 . Tidak menambahkan karakter apa pun (tapi ubah 3ke 4)
Blue

8

14 bahasa, 73 byte, skor = (73/14 ^ 3) = 0,02660349854

#Y2(3`5n~thneo e        ;n@0d c
#   -[>+<"9"L-----]>+.
14  
print(int(15/2))+3

Saya dapat menambahkan beberapa lang lagi, tetapi saya pikir saya akan menambahkan apa yang saya miliki di sini.

1. Brainbool ;Cobalah online!

Kode yang relevan:

    [>+<         ]>+.

               + 

Ini benar-benar adil +.+, yang menghasilkan 1.

2. Jolf ; Coba di sini!

The (Char berhenti menafsirkan kode sumber, sehingga kode relavent adalah:

#Y2

Ini setara dengan (dalam JavaScript)

var Y = []; toHex(Y); alert(2);

Yang menghasilkan 2.

3. Elemen; Cobalah online!

Kode yang relevan:

    3`

Ini menangkap 3dan mencetaknya.

4. Brainfuck ; Cobalah online!

Kode yang relevan adalah:

-[>+<    -----]>+.

  -    -      + 

Yang merupakan cara standar untuk menghasilkan kode char 4 dan mengeluarkannya, dan beberapa hal lain setelahnya.

5. Reng; Coba di sini!

~ menghentikan program, jadi kode yang relevan di sini adalah:

#Y2(3`5n~

#mendefinisikan ulang Ymenjadi TOS, dalam hal ini 0,. 2mendorong 2; (memutar tumpukan N kali, muncul N dari tumpukan; 3`mendorong -3; dan akhirnya,5n cetakan5 .

6. ETA; Cobalah online!

ETA hanya membaca huruf E, T, A, O, I, N, S, H, jadi kode yang hanya dieksekusi adalah ini:

       n thneo e         n     


  int int          

Kode yang sangat relevan:

       n thneo

Atau, sama: nthne o. n...eadalah basis-7 literal, dan thnmerupakan basis-7 untuk 54.o menghasilkan karakter ini. Pengajuan kesalahan keluar, tapi saya tidak tahu mengapa.

7. Python 3

Apa yang dilihatnya:

# comment
# comment
14
print(int(15/2))+3

15/2menghasilkan 7,5, seperti /divisi float. int(...)membuat nomor menjadi int, yang kemudian dicetak. Program keluar saat kesalahan+3 ditemui .

8. Julia

Julia melihat:

# comment
# comment
14
print(int(15/2))+3

Alih-alih memotong 15/2, Julia mengumpulkannya, menghasilkan 8. Ia mencetak ini, kemudian kesalahan saat bertemu +3.

9. Fisi; Cobalah online!

Kode yang relevan:

        <"9"L         

Saya mendapatkan ide ini dari bagian Fisi Martin (lebih seperti mencurinya). Lmemulai hal yang menghadap ke kiri, menangkap 9, dan berakhir dengan <.

10. Ruang putih; Coba di sini!

Kode yang relevan, menerjemahkan spasi ke Sdan tab ke T:

SSSTSTS
T
ST

Ini mendorong 10 ke stack dan mengeluarkannya sebagai angka ( T\nST).

11. Python 2

Python 2 melihat ini:

# comment
# comment
14
print(int(15/2))+3

(int(15/2))+3 dievaluasi menjadi 11, dan itu dicetak.

12. Gol> <>; Coba di sini!

Kode yang relevan:

#                      ;n@0d c

Ini menggunakan trik yang digunakan dalam jawaban Martin yang @memutar arah yang berbeda di> <> dan Gol> <>. #mirror, cpush 12, dpush 13, 0push 0, dan @membawa cke atas tumpukan, kemudian disingkirkan dan dicetak dengan;n .

13.> <>; Cobalah online!

Kode yang relevan:

#                      ;n@0d c

Sekali lagi menggunakan yang @memutar arah yang berbeda di> <> dan Gol> <>. #mirror, cpush 12, dpush 13, 0push 0, dan @membawa dke atas tumpukan, kemudian disingkirkan dan dicetak dengan;n .

14. Naskah Golf; Cobalah online!

Apa yang dilihatnya:

# comment
# comment
    14
print(-int(-15/2))+3

Itu mendorong 14, printitu, dan kesalahan. Dicuri terinspirasi oleh jawaban Sp3000 .


7

Subskin , Brainfuck dan Fob 27 bytes / 3 ^ 3 = 1

0#>&$3#<>$-[----->+<]>-.
31

Subskin

0
31

Kami mengatur pointer instruksi (tidak masalah di sini) ke 0dan register output ke 31. Jika isi register keluaran adalah >= 0, kami menampilkan nilai yang terkandung sebagai achar . Semua kode lain diabaikan.

Brainfuck

-[----->+<]>-.

Dimasukkan ke 3dalam register, turunkan nilainya sekali dengan -dan akhirnya keluaran dengan. .

Fob

#>&$3#<>$

Ini sedikit lebih rumit, karena Brainfuck juga membaca <dan >instruksi di Fob. Kita memasuki mode eksekusi dengan #dan menambah pointer Brainfuck dengan yang membuatnya lebih mudah bagi kita nanti. Kami belum melakukan apa-apa, jadi tidak ada yang dieksekusi.

Kami memasuki mode akumulator dengan $, melempar 3, masuk ke mode eksekusi lagi, mendorong konten akumulator ke stack dengan <dan akhirnya kami mengeluarkan konten dengan> .

Untuk mencegah Brainfuck mengacaukan program, kami masuk ke mode akumulasi lagi dengan $.


7

7 Bahasa, 55/7 ^ 3 ≈ 0,16035

Berjalan di PowerShell v1, v2, v3, v4, dan v5, Foo, dan Pyth

#7.q"6""
$p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]

Digit 1-5 menggunakan logika yang mirip dengan jawaban sweerpotato . The $PSVersionTablevariabel khusus diperkenalkan pada PowerShell v2, dan berisi daftar lengkap membangun, revisi, dll Berikut ini adalah contoh output variabel:

PS C:\Tools\Scripts> $PSVersionTable

Name                           Value                                                                                                                           
----                           -----                               
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.17400
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

Dalam kode ini, pertama-tama kita menyimpannya $psehingga panjang kode lebih pendek. Kemudian, kami memeriksa keberadaannya dengan memanfaatkan variabel sebagai indeks ke dalam array dua item:

  • Jika variabel tidak ada, PowerShell akan secara dinamis membuat dan menetapkannya $NULL, !yang $TRUE, atau 1yang sesuai dengan elemen kedua dalam array, yang menghasilkan1 .
  • Jika variabel itu ada (seperti halnya dalam v2 +), maka !variabel hasil dalam $FALSEatau 0, yang diindeks ke elemen pertama, yang menampilkan nomor versi.

Menggunakan Foo for 6, kami memanfaatkan itu #adalah komentar di PowerShell, jadi itu diabaikan ketika menjalankannya di lingkungan PS. Namun, Foo akan dengan senang hati mengeluarkan nomornya6 dan kemudian melanjutkan sisa programnya, yang tidak menghasilkan apa-apa.

Menggunakan Pyth untuk 7, kita kembali 7, lalu segera berhenti dengan .q, sehingga perulangan while-true tak terbatas yang dimulai dengan #tidak masalah. Karena kita memiliki sesuatu yang tersisa yang dicetak secara implisit. Terima kasih kepada @ FryAmTheEggman untuk penambahan ini.

Sunting - Memotong segelintir byte berkat Mauris Edit - penjelasan Pyth yang dijelaskan berkat Sp3000


Bagaimana dengan $p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]? Itu berfungsi pada Powershell saya, tetapi mungkin tidak pada semua versi sebelumnya.
Lynn

7

7 bahasa, 287/7 ^ 3 = 0,836

Mungkin skor terendah yang masuk, toh saya suka 3 versi C polyglot ini.

Menambahkan solusi Python yang membosankan untuk setidaknya memenuhi syarat untuk karunia bahasa "3 unik".

Menambahkan Java dengan menyalahgunakan trigraph C untuk intepresi komentar yang berbeda.

Bekerja di:

  • Python 1

  • Python 2

  • Python 3

  • C89

  • C99

  • C ++

  • Jawa

versi golf:

/*
*??/
/
#include <stdio.h>
#ifndef __cplusplus
#define true 8/*
import sys
print(sys.version[0])
'''
#*??/
/
#endif
int main(){int a=(true>1)?-6:3;printf("%d",(true//*
+a
//**??/
/+2));}
#define a \
'''
/**\u002f
public class p{public static void main(){System.out.println("7");}}
/**/

Tidak Disatukan:

/*
*??/
/

#include <stdio.h>

#ifndef __cplusplus
#define true 8/*

import sys
print(sys.version[0])
'''
#*??/
/
#endif 

int main()
{
    int a = (true > 1) ? -6 : 3;
    printf ("%d", (true//*
    +a
    //**??/
/
    +2));
}
#define a \
'''

/**\u002f
public class p
{
    public static void main()
    {
        System.out.println("7");
    }
}
/**/

Ok, ini mungkin agak aneh dan saya berharap kemampuan bahasa Inggris saya cukup baik untuk menjelaskannya secara biasa.

Pertama-tama saya akan menjelaskan berbagai jenis komentar yang saya gunakan untuk merangkum masing-masing struktur bahasa.

Jadi mari kita ambil blok pertama:

/*
*??/
/

Untuk Java, ini hanyalah awal dari komentar multi-baris. Tapi ... di C99 / 89 / ++ ini dievaluasi menjadi

/*
*/

Karena ??/ini adalah trigraph untuk \sementara dalam \karakter C adalah jenis yang konsisten dan bahkan mengkonsumsi jeda baris dalam fungsi perintahnya. Ini menyebabkan hasil dari \nhanya "ditampilkan" alih-alih beeing line. itu berarti, mengingat array byte ini mewakili blok pertama: [ /] [ *] [ \n] [ *] [ ?] ?[ /] [ \n] [ /] akan setelah evaluasi trigraph: [ /] [ *] [ \n] [ *] [ \] [ \n] [ /] [ ] Di mana fungsi yang konsisten dari \pemicu dan "mengkonsumsi" \nsehingga yang tersisa dan akhirnya di C dievaluasi byte adalah: [ /] [ *] [ \n] [ *] [ /]

Tetapi tentang semua java ini tidak tahu apa-apa dan memperlakukan semua yang mengikuti sebagai komentar sampai trik ini dikembalikan.

(bersambung!)


7

4 Bahasa (Befunge-93, Microscript II, Microscript, dan Foo), skor 7/64 = 0,109

"4"1.@2

Befunge: Tekan 4, tekan 1, cetak 1, dan berakhir.

Microscript II: Menghasilkan string "4", membuangnya, ambil akar kuadrat dari satu, buang itu, dan akhirnya atur x ke 2. Ini kemudian dicetak secara implisit.

Microscript: Dorong 52 ke tumpukan (yang tidak akan pernah benar-benar digunakan untuk sisa program), menambah register (awalnya nol) per satu, lalu menambah register dengan dua. Ini kemudian dicetak secara implisit.

Foo: Cetak string "4", lalu tekan 2


6

Python 1 | 2 | 3, 27 byte / 27 = 1

print(len("\xabc")+(1/2>0))

@ sweerpotato penggunaan nomor versi membuat saya bertanya-tanya apakah mungkin untuk membedakan Python dengan lebih sedikit. Inilah yang terbaik yang saya temukan.

Penjelasan

Untuk membedakan Python 3 dari versi sebelumnya, kami menggunakan trik pembagian integer standar vs trik floating point. (1/2>0) == (0>0)mengembalikan 0 pra-Python 2.3 atau Falsedari Python 2.3 dan seterusnya, dan (1/2>0) == (0.5>0)kembali Trueuntuk Python 3.

Untuk membedakan Python 1 dari yang lain, kita ambil panjang string "\xabc", yang panjangnya satu di Python 1 dan panjang dua dari Python 2 dan seterusnya. Mengapa? Karena

The \ x melarikan diri dalam string literal sekarang mengambil tepat 2 digit hex. Sebelumnya ia akan mengkonsumsi semua digit hex mengikuti 'x' dan mengambil 8 bit hasil terendah, jadi \ x123456 setara dengan \ x56.

(Dari What's New in Python 2.0 )


6

Python 3, Ruby, Perl, C, C ++, Objective-C 202 byte / 6 ^ 3 = 0,935 ...

Ini sebenarnya cukup menyenangkan, dan banyak bermain dengan boolean.

Anda dapat semua versi kode di situs berikut , dengan menyalin dan menempelkan kode ke penerjemah.

#include <stdio.h> /*
print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1
"""""
*/
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}/*
"""
#*/

Python 3, cetakan 1

Caranya adalah sebagai berikut:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Ini akan dicetak 1

Ruby, cetakan 2

Kode yang ditafsirkan untuk Ruby adalah:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Jadi ini tercetak 2

Perl, cetakan 3

Kode yang ditafsirkan untuk Perl adalah:

print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1

Pertama-tama, __DATA__token memberitahu kompiler Perl bahwa kompilasi telah selesai. Semuanya setelah itu diabaikan.

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Dan cetakan 3

C, cetak 4

Kode yang ditafsirkan sangat berbeda dari yang lain:

#include <stdio.h>
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}

Ini hanya akan mencetak char 4.

C ++, cetak 5

Sama dengan kode C.

Ini akan mencetak char 5.

Objective-C, cetakan 6

Sama dengan kode C.

Ini akan mencetak char 6.


5

5 Bahasa, 18 byte / 5 ^ 3 = 0,144

Berjalan di Brainbool , Mathematica , Foo , > <> dan Befunge-93 .

4!<n;+Print@2"3".5

Brainbool

Brainbool seperti Brainfuck, tetapi hanya beroperasi pada bit, dan input dan outputnya hanya terdiri dari 0dan 1.

4!<n;+Print@2"3".5
  <                   move the pointer to the left
     +                logic not
                .     print the current cell

Mathematica

Dalam Mathematica, semuanya adalah ekspresi dan memiliki nilai. Print@2mencetak 2dan mengembalikan simbolNull . Setelah itu, kode melakukan beberapa perhitungan simbolis, tetapi tidak mencetak apa pun.

Foo

"3" cetakan 3. Saya tidak tahu apa yang dilakukan bagian lain.

> <>

4!<n;+Print@2"3".5
4                     push 4
 !                    skip the next command
   n                  pop and print it as a number
    ;                 end the program

Dibalik

4!<n;+Print@2"3".5
4                     push 4
 !                    logical not
  <                   makes the program counter travel to the right
 !                    logical not
4                     push 4
                 5    push 5
                .     pop and print it as a number
             "3"      push the string "3"
            2         push 2
           @          end the program

12 Bahasa, 35 byte / 12 ^ 3 = 0,0202546 ...

Menggunakan trik sweerpotato , murah tapi kuat.

Berjalan di Brainbool , Mathematica 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 dan 10.0 , Foo dan > <> .

cn;+"11".Print@Floor@$VersionNumber


5

6 Bahasa, 38/6 ^ 3 = 0.17592̅5̅9̅

Ruang putih , Brainfuck, Ruby, Labyrinth , Foo, Serius

Legenda:

£: tab

: ruang

§: 0x7f

puts•2;#4!@•-[>+<-----]>6.§"5"•£    
£
•£

Ini mengandung karakter yang tidak patut dicetak, jadi inilah hexdump:

7075747320323b23342140202d5b3e2b3c2d2d2d2d2d5d3e362e7f22352220090a090a20090a

Penjelasan:

Ruang putih

Cobalah online. (Catatan: program saya menghilangkan tiga linefeeds penutup untuk mengakhiri program, saya menulis / menguji ini di Whitelips dan yang menghasilkan output yang tepat di sana, tetapi tidak pada Try It Online, sehingga program yang terhubung memiliki dua karakter yang ditambahkan. Sejauh ini seperti yang saya tahu, beberapa penerjemah membiarkan Anda melakukan itu, yang lain terjebak dalam loop tanpa batas tanpa penghentian eksplisit)

(menghilangkan karakter yang diabaikan)

spacespacespacetabenter: dorong 1 ke tumpukan

tabenterspacetab: menampilkan bagian atas tumpukan

Rubi

Seharusnya tidak perlu dijelaskan. Mencetak 2, memperlakukan sisa baris itu (ergo, program brainfuck) sebagai komentar, memperlakukan sisa file sebagai kosong.

Brainfuck

Cobalah online.

Membutuhkan juru bahasa yang mendukung underflow. Underflows sel pertama ke 255 kemudian menggunakannya untuk penghitung loop untuk menghasilkan 51, yang merupakan kode ascii untuk 3.

Labirin

Cobalah online.

(menghilangkan dua baris terakhir untuk keterbacaan karena mereka tidak pernah tercapai)

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•                            skipped
     2                           push 2 onto stack
      ;                          pop 2 from stack
       #                         push current stack depth (0) to stack
        4                        push 4 to stack
         !                       print top of stack as integer
          @                      program terminates

Foo

Cobalah online.

Satu-satunya hal yang mempengaruhi output adalah "5", yang mencetak 5.

Serius

Cobalah online.

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•2;#4!@ -[>+<-----]>           assorted stack manipulation that doesn't affect this program
                        6          push 6 to the stack
                         .         output top of the stack
                          §        (0x7f) terminate program

5

5 bahasa, Chaîne , Minkolang , Foo , Brainf ** k-ng , dan Vitsy , 21/5 ^ 3 = 0,168

2|<«+!@"3".N+m

5N»

Brainf ** k-ng

2|<«+!@"3".N+m

5N»
  <            go left (should still be ok)
    +!         output 1
      @        halt execution

Chaîne

2|<«+!@"3".N+m

5N»
2              «add 2 to the current string»
 |<            «take off and put on the string (no op)»
   «           «comment»

  »
               «implicit output»

Foo

2|<«+!@"3".N+m

5N»
       "3"     print three

Minkolang

2|<«+!@"3".N+m

5N»
2              C push 2 to the stack [2] C
 |             C mirror C
2              C push 2 to the stack [2,2] C
             m C ignored C
            +  C add top two [4] C
           N   C output C
          .    C terminate program C

Vitsy

2|<«+!@"3".N+m

5N»
2              push 2
 |             mirror
2              push 2
             m pop 2, goto line 2
5              push 5
 N             output 5
  »            ignored

Saya mungkin bisa menambahkan> <> atau sesuatu.


1
Anda tahu, saya tidak pernah menemukan penggunaan cermin yang bagus. xD
Addison Crump

5

Craneflak , Brain-Flak Classic , Rain-Flak , BrainHack , Brain-Flueue , miniflak , miniHack : .1020

(([]()()()<()()()>)()()){}#{}({}())

Cobalah online!

Penjelasan

Hal pertama yang terjadi di sini adalah bahwa ada perbedaan dalam cara komentar dibaca antara BrainHack, CraneFlak, dan penerjemah Rain-Flak. Craneflak tidak memiliki komentar, di Rain-Flak #komentar keluar dari sisa baris dan di BrainHack #{...}komentar di luar.

Jadi inilah yang dibaca setiap bahasa:

Rain-Flak: (([]()()()<()()()>)()()){}         -> 3
BrainHack: (([]()()()<()()()>)()()){}({}())   -> 4
Craneflak: (([]()()()<()()()>)()()){}{}({}()) -> 1

Hal berikutnya adalah perbedaan antara flak otak dan miniflaks. Baik Rain-Flak dan BrainHack mendukung miniflak, di mana semua operasi tambahan dihilangkan. Ini berarti bahwa mereka kehilangan []dan<...>

Rain-Flak: (()()()()()())         -> 6
BrainHack: (()()()()()())({}())   -> 7

Selanjutnya kita memiliki perbedaan antara Brain-Flak dan Brain-Flak Classic. Dalam Klasik []adalah-1 bukan tinggi tumpukan, yang berarti bahwa hasil kami adalah 1 kurang dari di biasa Rain-Flak, sehingga 2.

Terakhir kita memiliki perbedaan antara otak-Flak dan otak-flueue. Dalam brain-flueue, antrian digunakan sebagai pengganti tumpukan. Biasanya brain-flak mendorong 3 lalu 5 dan memunculkan 5, namun dalam brain-flueue pop menghilangkan 3 dan bukan 5.


4

Bima Sakti 1.0.2 , CJam dan STXTRM , 20 byte / 3 ^ 3 = 0,741

Saya membayangkan setidaknya ada satu bahasa lain yang bisa saya tambahkan.

'2"3""1"1<<1>;;"2"3;

Penjelasan


Bimasakti ,1

Di Bima Sakti, string hanya dilambangkan dengan pasangan tanda kutip ganda. Kutipan tunggal membaca input dari baris perintah; jika tidak ada, itu mendorong string kosong. Lebih besar dari dan kurang dari tanda-tanda akan memutar seluruh tumpukan ke kanan dan ke kiri, masing-masing. Akhirnya, tanda titik koma menukar dua elemen tumpukan teratas.

Berikut adalah visualisasi tumpukan (tumpukan yang ditampilkan adalah hasil dari operasi yang terdaftar setelah terjadi):

["", 0]                                             #  default stack

["", 0, ""]                                 #   '   #  read input from command line
["", 0, "", 2]                              #   2   #  push 2 to the stack
["", 0, "", 2, "3"]                         #  "3"  #  push "3" to the stack
["", 0, "", 2, "3", "1"]                    #  "1"  #  push "1" to the stack
["", 0, "", 2, "3", "1", 1]                 #   1   #  push 1 to the stack
[0, "", 2, "3", "1", 1, ""]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0, 1]              #   1   #  push 1 to the stack
[1, "", 2, "3", "1", 1, "", 0]              #   >   #  rotate the stack rightward
[1, "", 2, "3", "1", 1, 0, ""]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0, "", 2]       #  "2"  #  push 2 to the stack
[1, "", 2, "3", "1", 1, "", 0, "", 2, "3"]  #   3   #  push "3" to the stack
[1, "", 2, "3", "1", 1, "", 0, "", "3", 2]  #   ;   #  swap the top two stack elements

CJam ,2

Dalam CJam, string juga dilambangkan dengan pasangan kutipan ganda. Kutipan tunggal mendorong kode karakter dari karakter berikut. Ketika kode karakter adalah output, itu dikeluarkan sebagai karakter yang sesuai. Tanda yang lebih besar dan lebih kecil bertindak seperti yang diharapkan, mengevaluasi urutan dua elemen tumpukan teratas. Akhirnya, tanda titik koma membuang elemen tumpukan atas. Pada penghentian program, isi tumpukan adalah output.

Berikut adalah visualisasi tumpukan (tumpukan yang ditampilkan adalah hasil dari operasi yang terdaftar setelah terjadi):

[]                         #  default stack

['2]               #  '2   #  push the character code of "2" to the stack
['2, "3"]          #  "3"  #  push "3" to the stack
['2, "3", "1"]     #  "1"  #  push "1" to the stack
['2, "3", "1", 1]  #   1   #  push 1 to the stack
['2, "3", "1"]     #   <   #  leave the greater of the top two stack elements on the stack
['2, 0]            #   <   #  leave the greater of the top two stack elements on the stack
['2, 0, 1]         #   1   #  push 1 to the stack
['2, 1]            #   >   #  leave the lesser of the top two stack elements on the stack
['2]               #   ;   #  pop the top stack value
[]                 #   ;   #  pop the top stack value
['2]               #  "2"  #  push the character code of "2" to the stack
['2, "3"]          #   3   #  push "3" to the stack
['2]               #   ;   #  pop the top stack item

STXTRM ,3

Dalam MSM, apa pun yang bukan operator didorong ke stack sebagai karakter. Tanda titik koma menduplikasi elemen tumpukan atas. Program berlanjut hingga tidak ada lagi operator, atau ada elemen tunggal di stack.

Karakter terakhir pada stack adalah 3, yang diduplikasi oleh operator akhir. 3adalah elemen paling atas di akhir program, jadi ini adalah output.


4

5 bahasa, 18 byte / 5 ^ 3 = 0,144

Ouroboros , Pip , QBasic, Foo , dan Pyth

5'"4"()"
1?3'@n()2

1. Ouroboros

Setiap baris program mewakili seekor ular yang memakan ekornya.

Ular 1

Push 5, 'adalah no-op, push 52(kode ASCII "4"). (menyebabkan ular mengeluarkan nomor dan memakan banyak karakter ekornya. Karena ini menghasilkan menelan pointer instruksi (dan seluruh ular), eksekusi terhenti.

Ular 2

Dorong 1, dorong nomor acak ( ?), dorong 3, 'adalah no-op. @memutar 1ke atas tumpukan dan nmengeluarkannya sebagai angka, meninggalkan yang 3di atas tumpukan. Kemudian (makan banyak karakter ini dari ujung ular, menelan penunjuk instruksi dan berhenti.

Anda dapat menjalankan program ini secara online di juru bahasa Stack Snippet di sini .

2. Pip

Sebagian besar program terdiri dari ekspresi yang dievaluasi dan dibuang:

  • 5
  • '" (karakter literal)
  • 4
  • "()"
  • 1?3'@ (ekspresi ternary)
  • n (variabel, = baris baru)
  • () (nol)

Akhirnya, ungkapan terakhir 2,, dicetak.

3. QBasic

Semuanya setelah itu 'adalah komentar. Baris pertama dengan demikian bermuara pada 5, nomor baris. Di baris kedua,1 adalah nomor baris dan ?3merupakan jalan pintas untuk PRINT 3.

(Tampaknya memiliki nomor baris yang rusak bukan masalah, meskipun akan mudah untuk memperbaikinya.)

4. Foo

Hampir semuanya adalah no-ops. "4"cetakan 4. Tanda kurung (x2) adalah loop yang berjalan hingga sel array saat ini adalah nol, yang langsung benar dan loop keluar.@, ketika tidak diikuti oleh angka, mengambil nilai sel array saat ini (diinisialisasi ke 0) dan mendorongnya ke tumpukan.

Saya tidak sepenuhnya yakin bagaimana yang kedua, yang "tidak cocok harus ditangani. Versi online tampaknya menambahkan baris baru ke output, yang memungkinkan aturan tantangan.

5. Pyth

5adalah output. Kemudian program bertemu '"4", yang mencoba membaca dari file bernama 4. Selama tidak ada file seperti itu, saya pikir ini harus menghentikan program dengan kesalahan. (Versi online mengatakan name 'open' is not defined- Saya berasumsi karena membuka file tidak diizinkan secara online.)

Tersesat "di akhir baris 1 memastikan bahwa baris 2 tidak menyebabkan kesalahan sintaksis sebelum eksekusi.



@Dennis Terima kasih! Halaman Esolangs tidak memiliki tautan ke penerjemah itu.
DLosc

Berikut indeks bahasa yang tersedia saat ini. Jika Anda ingin saya menambahkannya, cukup ping saya di chat.
Dennis

4

4 bahasa, 24 byte, 24/4 ^ 3 = 0,375

print(1//0.5--1+1/2*2
);

1. PHP

Eksekusi PHP print(1);yang sama dengan 1

2. Lua

Lua mengeksekusi print(1//0.5);yang sama dengan 2

3. Python 2

Python 2 mengeksekusi print(1//0.5--1+1/2*2);yang sama dengan 3 (pembagian integer)

4. Python 3

Python 3 mengeksekusi print(1//0.5--1+1/2*2);yang sama dengan 4 (divisi float)


Jawaban yang bagus, saya suka jawaban dalam bahasa konvensional :-) harap Anda akan bersenang-senang bermain golf di ppcg :-) silakan coba salah satu tantangan saya sebelumnya jika Anda pikir itu menarik :-) ada yang agak rumit dan ada yang lebih dasar :-)
Stewie Griffin

Anda mungkin tertarik pada hadiah 100 rep terbuka yang dijelaskan dalam tantangan. Outgolf Sp3000 (28 byte, 4 bahasa) hanya menggunakan bahasa konvensional (didefinisikan dalam tautan) dan milik Anda :-) sayangnya python 2 dan 3 tidak dianggap unik dalam tantangan hadiah.
Stewie Griffin

3

Brainfuck-ng, Foo,> <>, 9 byte / 3 ^ 3 = 0,333 ...

#+!"2";n3

Brainfuck-ng

Satu-satunya karakter yang dikenali adalah +dan !:

+ Increment cell by one
! Print as integer

Cetakan 1

Foo

Mencetak semuanya dalam tanda kutip.

"2"

Cetakan 2

> <>

#Mencerminkan titik ke kiri, 3mendorong 3 ke tumpukan, nmengeluarkannya sebagai bilangan bulat, ;menghentikan program.

#      ;n3

2

3 Bahasa, 82 83/3 ^ 3 = 3.074 ...

Bekerja di ??? , Whitespace , dan Beatnik . Atau lebih tepatnya, itu harus bekerja dalam bahasa-bahasa itu tetapi saya tidak akan dapat mengujinya selama beberapa hari. Bagaimanapun, ini kodenya:

K... Jax... Jy... Jy...   ...
My...    My...
... ...     ......................XO!

1. ???

.................................................!

??? pada dasarnya brainfuck tetapi menggunakan tanda baca umum sebagai perintah, bukan karakter tradisional. .menambah sel memori saat ini, yang dilakukan 49 kali. !mengambil sel memori saat ini dan mencetaknya sebagai karakter, di sini 1.

2. Ruang putih

[Space][Space][Space][Tab][Line Feed]
[Tab][Line Feed]
[Space][Tab]

Whitespace adalah bahasa yang mengabaikan semua karakter non-whitespace. Di sini saya telah mengonversinya menjadi bentuk yang mudah dibaca. Baris pertama mendorong 2ke tumpukan, dan dua baris kedua mencetak bagian atas tumpukan sebagai angka, di sini 2.
Perhatikan bahwa dalam kode gabungan, saya telah mengganti tab dengan empat spasi karena keterbatasan teknis.

3. Beatnik

K Jax
Jy Jy
My My
XO

Beatnik adalah bahasa di mana setiap kata dikonversi ke skor Scrabble-nya, kemudian skor tersebut ditafsirkan sebagai perintah. Baris pertama mendorong 17ke tumpukan. Baris kedua duplikat atas tumpukan dua kali dan baris ketiga menambahkan atas ke elemen stack bersama-sama dua kali, tiga kali lipat efektif 17dalam 51. Baris terakhir mencetak karakter di atas tumpukan, di sini 3.
Perhatikan bahwa saya menggunakan Beatnik pada Nilai Wajah, dengan asumsi tidak ada kesalahan dalam spesifikasi Beatnik asli. Perhatikan juga bahwa saya menggunakan sistem penilaian Scrabble Inggris Amerika Utara.

Jika tidak jelas sekarang, masing-masing bahasa ini hanya menerima jenis karakter tertentu (masing-masing tanda baca, spasi, dan huruf) sehingga menulis polyglot ini semudah menulis masing-masing program. Satu-satunya "trik" nyata adalah menggunakan kode Whitespace untuk memisahkan kata-kata dari Beatnik. Selain itu, program individual tidak tumpang tindih.


2
3 ^ 3 = 27 == 82/27 = 3.037037037037037 ...
AdmBorkBork

1
Kode spasi putih Anda mencetak 0, bukan 2. Diuji di sini dan di sini .
Dennis

@ Dennis Terima kasih, saya telah menghilangkan sedikit tanda.
Mike Bufardeci

2

5 bahasa, 175/5 ^ 3 = 1.4

Saya memutuskan untuk mengirim jawaban yang berbeda karena hadiah itu mengubah persyaratan dengan cara yang membuat saya merasa tidak puas dengan jawaban pertama saya (tetapi yang masih memuaskan saya di jalan tantangan umum!)

Jadi, inilah solusi saya yang memenuhi syarat untuk tantangan hadiah:

Ini dikompilasi di

  • C99
  • objC90
  • C ++ 0x
  • Rubi
  • Perl
#if __cplusplus
#define x\
=begin\
=pod
#endif
int a=
#ifndef x
1//**/
+1
#else
3
#endif
;int main(){printf("%d",a);}
#ifdef f
=end
puts 5;
=begin
=cut
print"4";
=end
#endif

2

3 bahasa, 15 byte, skor 0,555 ...

Akan menambahkan lebih banyak bahasa nanti.

2//1+1#😅😨

1. Emotinomicon

Emotinomicon mengabaikan teks yang bukan string. 😅mendorong 1 untuk menumpuk dan 😨mengeluarkan TOS sebagai angka.

2. Javascript

Komentar dalam Javascript dimulai dengan //, jadi hanya 2bagian yang dieksekusi.

3. Python 2/3 REPL

Komentar dengan Python dimulai #, jadi hanya 2//1+1bagian yang dieksekusi. //adalah pembagian integer di Python 3, dan itu sama seperti /di Python 2. 2 dibagi dengan 1 adalah 2, ditambah 1 adalah 3.


2

4 bahasa, 97 byte, 0,37890625

s="1";s=~-3;2//2;'''/.to_s.ord;"=;print 4;
__DATA__
=1;
";#'''#";print=s=>console.log(3)
print(s)

Rubi

Ini menetapkan suntuk "1", membandingkan menggunakan =~melawan -3dalam konteks kekosongan, mencoba untuk membagi 2oleh /2;'''/.to_s.ordkemudian mulai string baru yang berisi =;print 4; __DATA__ =1;, hits komentar, maka prints syang masih 1.

Python

Set ske "1"sesuai di atas, lalu set lagi ke ~-3yang mana 2. Kami menjalankan pembagian integer dari 2//2, maka ada docstring mengandung /.to_s.ord;"=;print 4; __DATA__ =1; ";#, diikuti oleh komentar, akhirnya printing s, yang masih 2.

JavaScript

Set suntuk "1"kemudian set lagi ke ~-3sesuai di atas, lalu ada 2di telepon diikuti oleh komentar. Kemudian kita atur variabel __DATA__ke 1. Ada string pendek yang berisi ;#'''#diikuti oleh definisi fungsiprint yang mengubah kode output menjadi 3, yang disebut pada baris berikutnya.

Perl

Menjalankan subtitusi yang setara dengan s/"1";s/~-3;2\/\/2;'''\/.to_s.ord;"/, prints 4dan sisa string ditutup di belakang __DATA__pengidentifikasi.


2

QBasic, QBIC dan> <>, 18 byte / 3 ^ 3 bahasa = 0,66666 poin

1:?v+1'-5`
''`>3n;

Kerusakan:

1. QBasic ( Dapatkan IDE )

1:          Line number 1
  ?         Print
   v+1      undefined var v = 0 + 1 = 1
'-5`        The rest of theis code is a QBasic comment
''`>3n;     As is this

2. QBIC ( Dapatkan penerjemah )

1     inserts a 1 in the code - mostly harmless
:     Reads from the cmd line. Nothing there, creates an empty variable a
?     Print
v+1   v is initialised to 6, +1 = 7
'     Code Literal: everything till the ` is passed to QBasic without processing
 -5`  7-5 = 2

''`>3n; Code literal with the first literal being a ': comment in QBasic

3.> <> ( Coba online )

1:  Push a 1 on the stack, duplicate stack
?   Pop top off the stack and skip next instruction if that's a 0
v   Move downwards - rest of the line is ignored

>   move to the right
3   Push 3 onto the stack
n   Print the top of the stack as a number
;   End the program

1
Saya pikir Anda ingin memangkas jumlah bahasa dalam skor Anda (mis. 18 / (3 ^ 3))
pecandu matematika

1

JavaScript, HTML, dan PHP, 72 byte / 3 ^ 3 = 2.67

1<!top?2:2//><!--<?='--'.'><script>document.body.innerHTML=3</script>'?>

Dalam HTML, ini akan mencetak 1 terkemuka, abaikan <!window?2:2//> tag, dan sisanya adalah komentar HTML.

Dalam JavaScript, ia mengevaluasi 1<!window?2:2 dan menghasilkan 2 (ini harus dijalankan di konsol) dan sisanya adalah komentar.

Dalam PHP, berikut ini adalah output dari server: 1<!top?2:2//><!----><script>document.body.innerHTML=3</script>yang menggantikan HTML 1dengan 3.


1
Selamat datang di PPCG.SE! Pos pertama yang bagus! Dua hal: kami biasanya tidak menyukai jawaban berbasis REPL (program Javascript). Selain itu, kode PHP tampaknya tidak berjalan ketika saya memasukkannya ke dalam juru bahasa online , bagaimana sebenarnya cara kerja PHP?
GamrCorps

Terima kasih! Yah, secara teknis PHP + HTML (mis. Jika ini adalah kode sumber untuk code.php, mengunjungi situs / code.php di browser menampilkan 3.
cuniculus

Coba di sini: mowbl.com/se.php .
cuniculus
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.