<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 65641; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 31516; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d?\.?\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
2.7.1
untuk2.7.n
. (Sebenarnya, sweerpotato melakukan hal itu dengan versi-versi utama.)Jawaban:
30 bahasa, 248 byte, 248/30 ^ 3 = 0,009185
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
: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:
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
yang menambah sel ke 1 lalu mencetaknya sebagai angka.
2. CoffeeScript (termasuk juru bahasa)
CoffeeScript melihat:
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:
1/5
adalah rasional dan tidak sama dengan0.2
, jadi 3 dicetak. Prosesnya"""
adalah kesalahan sintaksis.Catatan yang
print
tampaknya menampilkan baris sebelumnya dan ruang tambahan di Common Lisp. Namun, untungnya,write
bekerja 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"""
, yaitu1"2"3"4
.5. Befunge-93 | Penerjemah
Befunge adalah bahasa 2D, dan instruksi yang relevan adalah
di baris pertama, dan
5
di25
baris.#
lewati instruksi berikutnya,15g
dapatkan char pada posisi(1, 5)
dalam kode (5
in the25
line),,
output char dan@
stop.6. Python 2 | ideone
Python melihat:
(4^2+7)/2 = (xor(4,2)+7)/2 = (6+7)/2 = 13/2 = 6
, yangprint
diedit.7. Rail | Cobalah online!
Rail adalah bahasa 2D, dan eksekusi dimulai dari
$
fungsi utama, menuju tenggara. Dengan demikian, bagian kode yang relevan adalahdengan
o
danJ
berasal dari jalur yang digunakan oleh TRANSCRIPT. Setelah menghasilkan 7, kereta memukulJ
instruksi 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
etaoinsh
dan versi huruf besar mereka, yang berarti kode dimulai dengann...e
mendorong nomor basis 7 berdasarkan pada apa yang ada dalam pembatas, untukSaI
apa624
, atau 312 dalam desimal.o
kemudian output sebagai char, ternyata setelah modulo 256, memberikan char8
(titik kode 56).e
kemudian 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 = True
mengatur.Prelude adalah bahasa di mana setiap baris dieksekusi secara terpisah. Banyak karakter dieksekusi, tetapi yang penting adalah
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
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,n
mengeluarkannya 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
di mana
a
peningkatan variabelA
,e
adalah fungsi menenun kejahatan yang mengocok bitA
, danw
outputA
. Karenanya kita menghasilkan1
dua kali, memberi11
.Tetapi bagaimana dengan sisa instruksi, dan terutama
w
pada 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
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:
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 membaginil
dengan 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:
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
STL
masing-masing untuk ruang, tab, dan garis, awal program adalah:Baris pertama mendorong 16 (
+10000
basis 2), yang sebelumnyaTLST
mencetaknya 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
Karena pembatasan ETA, kami menggunakan
k
untuk mengurangi variabel B daripadaa
menambahnya.kk
mengurangi B ke -2 danmm
kotak B dua kali menjadi 16, yang bertambah menjadi 17 dengana
. Ini kemudian di-output dengano
.#
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
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
#
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,9
mengonversi angka 1 menjadi1*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 sebelumnyaJika kami menghapus karakter yang tidak dikenal, bagian kode yang relevan adalah
,
adalah input, tetapi karena kita pipa dari/dev/null
tidak ada, mendorong 0 ke stack. A+
dengann >= 5
spasi sebelumnya mendorongn-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
L
memunculkan 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 char2
, dan..
mengeluarkannya dua kali.23. Julia | Cobalah online!
Julia melihat:
Apa yang dicetak adalah
4^2+7 = pow(4,2)+7 = 16+7 = 23
, dan kesalahan program keluar mencoba untuk membaginothing
oleh 2. Perhatikan bahwa Julia tampaknya tidak keberatan dengan fakta bahwa sisa kode akan menyebabkan kesalahan sintaksis pula.24. Lily | Penerjemah
Lily melihat:
7/6*24 = 1*24 = 24
dicetak.25. GolfScript | Cobalah online!
GolfScript melihat:
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, dalam1/5
adalah pelampung yang adalah sama dengan0.2
, sehingga 26 dikeluarkan sebagai gantinya.27. Thue | Cobalah online!
Thue adalah bahasa yang didasarkan pada penulisan ulang string. Bagian yang relevan pertama adalah
yang mendefinisikan substitusi
f -> 27
kemudian menunjukkan akhir dari substitusi dengan::=
. Satu-satunya yangf
masukif
kemudian diganti dengan27
, 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:yang mencetak
7/6*24 = 28
.29. Picolisp | ideone
Picolisp melihat:
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:
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 olehX
("memeriksa") di baris ketiga.sumber
pre
tag alih-alih menggunakan blok kode gaya penurunan harga.15 bahasa,
686665 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
\t
bawah ini: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 a2
. 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:
Suara pertama melakukan banyak hal, tetapi tidak ada yang penting, karena tidak ada
!
untuk mencetak hasilnya. Suara kedua mendorong a1
, lalu a5
, lalu a7
. Kami mengambil perbedaan dari dua yang terakhir untuk didapatkan-2
, dan kemudian mengurangkannya dari1
untuk mendapatkan3
.!
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:I
mencoba membaca input tetapi tidak bisa, jadi itu mendorong-1
.a
mendorong nomor baris saat ini ditambah 1, yaitu2
.e
adalah divmod , yang menggantikan yang dengan0
dan1
(atau-1
, saya tidak benar-benar tahu, tetapi tidak masalah). Selanjutnyae
menggantikan keduanya dengan0
.Sekarang bagian yang menarik.
NTHne
adalah basis-7 angka literal.N
dane
hanya pembatas, dan tiga digitTHN
. Yaitu54
(di manaT
digit1
,H
adalah0
dann
sekarang5
).a
mendorong2
sekali lagi.S
kurangi itu, menghasilkan52
danO
mengeluarkannya 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:Untungnya, Axo juga memiliki implisit
0
di bagian bawah tumpukan, karena#
muncul bagian atas tumpukan (untuk memeriksa apakah instruksi selanjutnya harus dilewati atau tidak). Semua surat itu adalah no-ops. Kemudian5
mendorong5
,{
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
t
di tempat\t
, sehingga kolom berbaris dengan benar:Sekarang, huruf, spasi, dan tab adalah dinding di Labyrinth, sehingga kode yang dapat diakses sebenarnya terlihat seperti ini:
Penunjuk instruksi akan secara otomatis mengikuti jalur itu.
#
mendorong kedalaman tumpukan utama (0
) dan15
mengubahnya menjadi15
.}
memindahkannya ke tumpukan tambahan, dan kita tidak akan menggunakannya lagi. Itu dengan mudah membuat bagian atas tumpukan nol, sehingga IP tidak belok kiri ke5
.7
mengubah nol menjadi a7
,'
adalah no-op. Ini`
adalah negasi unary, jadi kami mengerti-7
. Sekarang-
kurangi-7
dari yang implisit di0
bawah membuatnya7
. Kali ini, IP memang berbelok ke kanan`
, yang merupakan negasi unary, jadi kami dapatkan7
lagi. IP menyentuh jalan buntu. Itu-
hal yang sama seperti sebelumnya, jadi kami dapatkan7
sekali lagi. Karena bagian atas tumpukan sekarang positif, IP berbelok ke kanan. Ada lagi-
yang memberi-7
lagi. Maka~
bitwise TIDAK, yang memberi6
dan!
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:
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
5
dan6
cukup bagus. :)Baris teratas pada dasarnya dapat diabaikan.
#
biasanya akan beralih ke IP yang berbeda, tetapi tepi memori saat ini adalah0
, 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.7
setel tepi itu ke7
.'
bergerak kembali ke tempat kami berasal.-
kurangi tepi memori yang baru saja kita atur7
dari 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 ini7
malah memberi6
.!@
, 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 dicetak8
. Nah, ada yang"31"
nanti, tapi Foo berakhir dengan kesalahan di akhir baris pertama. Saya tidak begitu yakin mengapa itu terjadi, tetapi itu mengharuskan3
(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:
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 setelah9
.-
mengurangi sel itu, tapi itu tidak relevan.<
memindahkan kepala kaset ke atas9
dan.
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). Itu9
bisa diabaikan.a
mendorong10
,e
mendorong14
,"8"
mendorong kode karakter8
,@
memutar tiga elemen tumpukan teratas (menarik ke atas10
), sehinggan
mencetak10
dan;
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:
Juga,
n
memengaruhi beberapa kondisi yang tidak kita pedulikan, jadi mari kita abaikan juga. Sekaranga
menambah register (yang dimulai pada0
), dane
merupakan operasi "menenun" sihir jahat yang memungkinkan bit dengan cara tertentu.aeeeaeea
kebetulan menghasilkan nilai49
yang merupakan kode karakter1
.ww
mencetaknya 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
:Itu dua perintah:
Yang pertama mendorong nomor itu
12
. Secara khusus,SS
mulai angka literal. Yang berikutnyaS
adalah tanda bit (positif). Maka semuanyaL
adalah representasi biner dari angka tersebut. Ada satu ton nol terkemuka, yang kita butuhkan untuk Starry, tetapi mereka tidak mempengaruhi jumlahnya. KemudianTTSS
s berada12
dalam biner. Fakta menyenangkan: jika saya menambahkan bahasa ke-16, saya dapat menyimpan byte di sini, karena Starry dapat menggunakan keempatnyaS
dalam reparasi biner16
. Saya ragu saya akan ...The
TLST
hanya mencetak bagian atas tumpukan sebagai angka. (TL
menandai perintah sebagai perintah I / O, danST
sedang mencetak angka.)Cetakan fisi
13
Cobalah online.
Fission hanya melihat bagian kode ini:
L
mulai mengontrol aliran dengan atom yang bergerak ke kiri."
matikan mode cetak, sehingga31
hanya mencetak13
. 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 bawah7
alih - alih menarik10
, dan kemudian14
dicetak bukan10
.Cetakan GolfScript
15
Cobalah online.
Yang ini paling sederhana:
#
komentar dari baris pertama. Kemudian15
mendorong dirinya sendiri dan}
merupakan "komentar super", yang mengabaikan seluruh program. Jadi15
dicetak di akhir program.sumber
Python 1.x, 2.x dan 3.x, 32 byte / 3 ^ 3 = 1.1851 ...
Mencetak angka pertama dari versi, yang ada
1
di Python 1.x,2
di Python 2.x dan3
di Python 3.x.Pada saat kita mendapatkan Python 9.x skor saya akan menjadi sangat bagus
0.04389
!: ~)!
sumber
1
karena itu adalah karakter pertama dari string "10.whthing"?3 bahasa, 2 byte / 27 = 0,074
Yah, itu mengalahkan setengah kiriman setidaknya: P
1. GolfScript
GolfScript mengabaikan
P
, hanya menghasilkan 1. Cobalah secara online .2. Par
P
adalah 2-to-the-power-of, jadi1P = 2^1 = 2
. Cobalah online .3. Serius
P
memberikan 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
\x12
yang berfungsi di Bubblegum dan gs2 , tetapi tantangannya membutuhkan minimal tiga bahasa.\x13
akan bekerja jika ada bahasa yang menghasilkan 1.Menyerah pada jawaban 1 byte, saya pindah ke dua byte.
3u
adalah 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: /
sumber
6 Bahasa - 44 byte / 6 ^ 3 = 0,204 ...
Terima kasih kepada SnoringFrog karena telah menghemat 10 byte!
Bekerja di:
Catatan: Sebelum mencobanya secara online, pastikan untuk mengganti S dengan spasi dan T dengan tab, atau mengonversi hexdump berikut ke ASCII
Saya akan mencoba menggunakan lebih banyak bahasa pemrograman :)
Befunge (cetakan
1
):Cobalah online
Pyth (cetakan
2
):Cobalah online
Brainfuck (cetakan
3
):Cobalah online
Hexagony (cetakan
4
):Cobalah online
Versi yang lebih mudah dibaca:
Spasi putih (cetakan
5
):Cobalah online
Karena karakter lain diabaikan tetapi spasi dan tab putih, kita dibiarkan dengan yang berikut:
AniRad versi 0.2 (mencetak
6
):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.
sumber
SSSSSSSSSSTTSTSTLTLSS
Anda miliki sekarang, Anda dapat melakukannyaSSSTSTLTLST
. Ini mendorong literal 5 pada tumpukan, lalu cetak sebagai bilangan bulat67 bahasa,3237 byte, skor 0,148...37/7 3 ≈ 0,107872 ...Brainfuck-ng
+
menambah sel saat ini,!
dicetak sebagai bilangan bulat,@
keluar.#
dan"
adalah NOP.Python 2
Baris pertama adalah komentar. Menggunakan divisi integer, hitung
4 - -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 dasarnyaprint(4)
.> <>
#
memantulkan IP,5
mendorong 5,n
mencetak angka dan;
berhenti.Dibalik
#
melompati+
,!
secara logis meniadakan bagian atas tumpukan,"@\"
mendorong tali@\
,6
mendorong 6,.
mencetak angka dan@
berhenti.Pyth
#
memulai infinite loop, menghilangkan segala kesalahan.7
mencetak 7, kemudian ikuti+!"string")
yang pada dasarnya menyebabkan kesalahan karena tidak memiliki dua operan untuk+
, menghentikan program.sumber
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.
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: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:
Inilah yang dilihat oleh kompiler C / C ++ (Saya telah menghapus literal Unicode, karena mereka tidak diperluas oleh kompiler dan karenanya tidak melakukan apa-apa):
Di sini, komentar baris tunggal mengesampingkan pembatas komentar multi-baris di awal, jadi semua
#define
s 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:Trik C / C ++ polyglot standar (the
#ifdef __cplusplus
) digunakan untuk mendefinisikan tokeno
sebagai salah satu"2"
atau"3"
, tergantung pada apakah itu kompiler C ++ atau C yang mengkompilasi kode. Selanjutnya, kami mendefinisikan fungsip
yang mengambilint
argumen dan panggilan tunggal (diabaikan)printf
, menggunakano
token kami yang baru didefinisikan . Seperti biasa, nilai kembali ditinggalkan, karena kita tidak dalam mode ketat. Selanjutnya, kita mendefinisikan astruct
dengan anggota tunggal, penunjuk fungsi yang tanda tangannya cocokp
, dan membangun sebuah instance bernamaout
. Dalam metode utama (kita tinggalkanint
seperti biasa), alamatp
ditugaskan keout.print
(panggilan begituout.print
panggilanp
), dan itu disebut.Jika C ++ tidak termasuk dalam bahasa, kami dapat menghapus semua kode preprosesor, dan mendefinisikan
p
sebagaiint p(int a){puts("2");}
. Sayangnya, C ++ mengharuskan#include
untuk melakukan I / O. Jika C tidak dimasukkan, kita bisa menghapus definisip
dan#ifdef
makro preprosesor, dan secara langsung menentukan fungsi anggota distruct
alih - alih membutuhkan pointer fungsi. Sayangnya, C tidak mendukung fungsi anggota.sumber
4 bahasa, 28 byte / 64 = 0,4375
1. Python 2
0
adalah falsy dan/
pembagian integer, jadi2. Perl (juga Python 3)
0
itu palsu dan/
divisi float, jadi3. Ruby
0
adalah benar dan^
bitor xor, jadi4. Lua
0
adalah kebenaran dan^
eksponensial, jadiPerhatikan bahwa Lua dan Ruby tidak dapat menambahkan booleans seolah-olah mereka adalah bilangan bulat, karenanya pengelompokan mereka bersama. Sayangnya
0and
tidak berfungsi di Lua, jadi kami tidak dapat menyimpan byte di sana.Versi 17 byte sebelumnya yang mencetak 1 (Lua), 2 (Ruby), 3 (Python / Perl):
-3 byte terima kasih kepada @xnor untuk versi ini, membuatnya jauh lebih rapi :)
sumber
2^(0 or 1)
bekerjaBFSRS> <> funge93thon123, 73/343 ≈ 0,212827 ...
Brainfuck, Serius ,> <>, Befunge-93, Python 1, Python 2, Python 3
Berisi unsintables, hexdump (reversibel dengan
xxd -ps -r
):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:
Serius :
><>
:Befunge-93:
Python 1 (terima kasih ikan lumpur):
Python 2 :
Python 3 :
sumber
3
ke4
)14 bahasa, 73 byte, skor = (73/14 ^ 3) = 0,02660349854
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:Ini setara dengan (dalam JavaScript)
Yang menghasilkan 2.
3. Elemen; Cobalah online!
Kode yang relevan:
Ini menangkap
3
dan 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:#
mendefinisikan ulangY
menjadi TOS, dalam hal ini0
,.2
mendorong 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:
Kode yang sangat relevan:
Atau, sama:
nthne o
.n...e
adalah basis-7 literal, danthn
merupakan basis-7 untuk 54.o
menghasilkan karakter ini. Pengajuan kesalahan keluar, tapi saya tidak tahu mengapa.7. Python 3
Apa yang dilihatnya:
15/2
menghasilkan 7,5, seperti/
divisi float.int(...)
membuat nomor menjadi int, yang kemudian dicetak. Program keluar saat kesalahan+3
ditemui .8. Julia
Julia melihat:
Alih-alih memotong 15/2, Julia mengumpulkannya, menghasilkan 8. Ia mencetak ini, kemudian kesalahan saat bertemu +3.
9. Fisi; Cobalah online!
Kode yang relevan:
Saya mendapatkan ide ini dari bagian Fisi Martin (lebih seperti mencurinya).
L
memulai hal yang menghadap ke kiri, menangkap9
, dan berakhir dengan<
.10. Ruang putih; Coba di sini!
Kode yang relevan, menerjemahkan spasi ke
S
dan tab keT
:Ini mendorong 10 ke stack dan mengeluarkannya sebagai angka (
T\nST
).11. Python 2
Python 2 melihat ini:
(int(15/2))+3
dievaluasi menjadi 11, dan itu dicetak.12. Gol> <>; Coba di sini!
Kode yang relevan:
Ini menggunakan trik yang digunakan dalam jawaban Martin yang
@
memutar arah yang berbeda di> <> dan Gol> <>.#
mirror,c
push 12,d
push 13,0
push 0, dan@
membawac
ke atas tumpukan, kemudian disingkirkan dan dicetak dengan;n
.13.> <>; Cobalah online!
Kode yang relevan:
Sekali lagi menggunakan yang
@
memutar arah yang berbeda di> <> dan Gol> <>.#
mirror,c
push 12,d
push 13,0
push 0, dan@
membawad
ke atas tumpukan, kemudian disingkirkan dan dicetak dengan;n
.14. Naskah Golf; Cobalah online!
Apa yang dilihatnya:
Itu mendorong
14
,print
itu, dan kesalahan.Dicuriterinspirasi oleh jawaban Sp3000 .sumber
Subskin , Brainfuck dan Fob 27 bytes / 3 ^ 3 = 1
Subskin
Kami mengatur pointer instruksi (tidak masalah di sini) ke
0
dan register output ke31
. Jika isi register keluaran adalah>= 0
, kami menampilkan nilai yang terkandung sebagai achar
. Semua kode lain diabaikan.Brainfuck
Dimasukkan ke
3
dalam register, turunkan nilainya sekali dengan-
dan akhirnya keluaran dengan.
.Fob
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
$
, melempar3
, 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
$
.sumber
7 Bahasa, 55/7 ^ 3 ≈ 0,16035
Berjalan di PowerShell v1, v2, v3, v4, dan v5, Foo, dan Pyth
Digit 1-5 menggunakan logika yang mirip dengan jawaban sweerpotato . The
$PSVersionTable
variabel khusus diperkenalkan pada PowerShell v2, dan berisi daftar lengkap membangun, revisi, dll Berikut ini adalah contoh output variabel:Dalam kode ini, pertama-tama kita menyimpannya
$p
sehingga panjang kode lebih pendek. Kemudian, kami memeriksa keberadaannya dengan memanfaatkan variabel sebagai indeks ke dalam array dua item:$NULL
,!
yang$TRUE
, atau1
yang sesuai dengan elemen kedua dalam array, yang menghasilkan1
.!
variabel hasil dalam$FALSE
atau0
, 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
sumber
$p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]
? Itu berfungsi pada Powershell saya, tetapi mungkin tidak pada semua versi sebelumnya.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:
Tidak Disatukan:
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\n
hanya "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"\n
sehingga 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!)
sumber
4 Bahasa (Befunge-93, Microscript II, Microscript, dan Foo), skor 7/64 = 0,109
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
sumber
Python 1 | 2 | 3, 27 byte / 27 = 1
@ 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 atauFalse
dari Python 2.3 dan seterusnya, dan(1/2>0) == (0.5>0)
kembaliTrue
untuk 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(Dari What's New in Python 2.0 )
sumber
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.
Python 3, cetakan
1
Caranya adalah sebagai berikut:
Ini akan dicetak
1
Ruby, cetakan
2
Kode yang ditafsirkan untuk Ruby adalah:
Jadi ini tercetak
2
Perl, cetakan
3
Kode yang ditafsirkan untuk Perl adalah:
Pertama-tama,
__DATA__
token memberitahu kompiler Perl bahwa kompilasi telah selesai. Semuanya setelah itu diabaikan.Dan cetakan
3
C, cetak
4
Kode yang ditafsirkan sangat berbeda dari yang lain:
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
.sumber
5 Bahasa, 18 byte / 5 ^ 3 = 0,144
Berjalan di Brainbool , Mathematica , Foo , > <> dan Befunge-93 .
Brainbool
Brainbool seperti Brainfuck, tetapi hanya beroperasi pada bit, dan input dan outputnya hanya terdiri dari
0
dan1
.Mathematica
Dalam Mathematica, semuanya adalah ekspresi dan memiliki nilai.
Print@2
mencetak2
dan 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.> <>
Dibalik
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 > <> .
sumber
6 Bahasa, 38/6 ^ 3 = 0.17592̅5̅9̅
Ruang putih , Brainfuck, Ruby, Labyrinth , Foo, Serius
Legenda:
£
: tab•
: ruang§
: 0x7fIni 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)
Foo
Cobalah online.
Satu-satunya hal yang mempengaruhi output adalah "5", yang mencetak 5.
Serius
Cobalah online.
sumber
5 bahasa, Chaîne , Minkolang , Foo , Brainf ** k-ng , dan Vitsy , 21/5 ^ 3 = 0,168
Brainf ** k-ng
Chaîne
Foo
Minkolang
Vitsy
Saya mungkin bisa menambahkan> <> atau sesuatu.
sumber
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:
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<...>
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.
sumber
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.
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):
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):
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.3
adalah elemen paling atas di akhir program, jadi ini adalah output.sumber
5 bahasa, 18 byte / 5 ^ 3 = 0,144
Ouroboros , Pip , QBasic, Foo , dan Pyth
1. Ouroboros
Setiap baris program mewakili seekor ular yang memakan ekornya.
Ular 1
Push
5
,'
adalah no-op, push52
(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 (?
), dorong3
,'
adalah no-op.@
memutar1
ke atas tumpukan dann
mengeluarkannya sebagai angka, meninggalkan yang3
di 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 pada5
, nomor baris. Di baris kedua,1
adalah nomor baris dan?3
merupakan jalan pintas untukPRINT 3
.(Tampaknya memiliki nomor baris yang rusak bukan masalah, meskipun akan mudah untuk memperbaikinya.)
4. Foo
Hampir semuanya adalah no-ops.
"4"
cetakan4
. 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
5
adalah output. Kemudian program bertemu'"4"
, yang mencoba membaca dari file bernama4
. Selama tidak ada file seperti itu, saya pikir ini harus menghentikan program dengan kesalahan. (Versi online mengatakanname '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.sumber
4 bahasa, 24 byte, 24/4 ^ 3 = 0,375
1. PHP
Eksekusi PHP
print(1);
yang sama dengan 12. Lua
Lua mengeksekusi
print(1//0.5);
yang sama dengan 23. 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)sumber
Brainfuck-ng, Foo,> <>, 9 byte / 3 ^ 3 = 0,333 ...
Brainfuck-ng
Satu-satunya karakter yang dikenali adalah
+
dan!
:Cetakan
1
Foo
Mencetak semuanya dalam tanda kutip.
Cetakan
2
> <>
#
Mencerminkan titik ke kiri,3
mendorong 3 ke tumpukan,n
mengeluarkannya sebagai bilangan bulat,;
menghentikan program.sumber
3 Bahasa,
8283/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:
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 sini1
.2. Ruang putih
Whitespace adalah bahasa yang mengabaikan semua karakter non-whitespace. Di sini saya telah mengonversinya menjadi bentuk yang mudah dibaca. Baris pertama mendorong
2
ke tumpukan, dan dua baris kedua mencetak bagian atas tumpukan sebagai angka, di sini2
.Perhatikan bahwa dalam kode gabungan, saya telah mengganti tab dengan empat spasi karena keterbatasan teknis.
3. Beatnik
Beatnik adalah bahasa di mana setiap kata dikonversi ke skor Scrabble-nya, kemudian skor tersebut ditafsirkan sebagai perintah. Baris pertama mendorong
17
ke tumpukan. Baris kedua duplikat atas tumpukan dua kali dan baris ketiga menambahkan atas ke elemen stack bersama-sama dua kali, tiga kali lipat efektif17
dalam51
. Baris terakhir mencetak karakter di atas tumpukan, di sini3
.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.
sumber
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
sumber
3 bahasa, 15 byte, skor 0,555 ...
Akan menambahkan lebih banyak bahasa nanti.
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 hanya2
bagian yang dieksekusi.3. Python 2/3 REPL
Komentar dengan Python dimulai
#
, jadi hanya2//1+1
bagian 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.sumber
4 bahasa, 97 byte, 0,37890625
Rubi
Ini menetapkan
s
untuk"1"
, membandingkan menggunakan=~
melawan-3
dalam konteks kekosongan, mencoba untuk membagi2
oleh/2;'''/.to_s.ord
kemudian mulai string baru yang berisi=;print 4; __DATA__ =1;
, hits komentar, makaprint
ss
yang masih1
.Python
Set
s
ke"1"
sesuai di atas, lalu set lagi ke~-3
yang mana2
. Kami menjalankan pembagian integer dari2//2
, maka ada docstring mengandung/.to_s.ord;"=;print 4; __DATA__ =1; ";#
, diikuti oleh komentar, akhirnyaprint
ings
, yang masih2
.JavaScript
Set
s
untuk"1"
kemudian set lagi ke~-3
sesuai di atas, lalu ada2
di telepon diikuti oleh komentar. Kemudian kita atur variabel__DATA__
ke1
. 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;"/
,print
s4
dan sisa string ditutup di belakang__DATA__
pengidentifikasi.sumber
QBasic, QBIC dan> <>, 18 byte / 3 ^ 3 bahasa = 0,66666 poin
Kerusakan:
1. QBasic ( Dapatkan IDE )
2. QBIC ( Dapatkan penerjemah )
3.> <> ( Coba online )
sumber
JavaScript, HTML, dan PHP, 72 byte / 3 ^ 3 = 2.67
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 HTML1
dengan3
.sumber