Seperti diketahui ,
Chuck Norris dihitung hingga tak terbatas. Dua kali
Chuck Norris dapat menghitung hingga tak terbatas ke belakang.
Juga, meskipun mungkin kurang dikenal, Chuck Norris dapat berbicara sedikit bahasa Spanyol selain bahasa Inggris.
Tantangan
Tulis program (atau fungsi) yang dapat dijalankan dalam dua bahasa yang berbeda. Dalam satu bahasa program harus menampilkan urutan
1, 1, 2, 2, 3, 3, 4, 4, ...
dan dalam bahasa lain itu harus menghasilkan urutan (termasuk nol terkemuka)
1, 2, ..., 9, 01, 11, 21, 31, ..., 89, 99, 001, 101, 201, ...
Aturan
- Program atau fungsi diizinkan, dalam bahasa pemrograman apa pun . Celah standar dilarang.
- Versi berbeda dari bahasa yang sama (seperti Python 2/3) tidak dihitung sebagai bahasa yang berbeda. Bahasa terkait (seperti C / C ++ atau Matlab / Oktaf) memang dianggap berbeda.
- Tidak ada input yang akan diambil.
- Program harus terus mengeluarkan ketentuan urutan sampai dihentikan oleh pengguna. Karena program tidak akan berhenti dengan sendirinya, output tidak dapat diproduksi pada akhirnya. Itu harus diproduksi saat program berjalan, baik secara terus menerus atau dalam batch.
- Output dapat menggunakan STDOUT atau yang setara, atau dapat ditampilkan dalam jendela grafik. Pemisah non-numerik antara istilah urutan diizinkan, selama masing-masing istilah dapat dengan jelas dibedakan dari istilah tetangganya. Ini juga dapat diterima jika layar dihapus di antara istilah.
- Entah urutan dapat dimulai pada
0
bukan1
. Dalam hal itu, dalam urutan "dua kali" yang0
harus diulang, sama seperti nomor lainnya. - Angka nol di depan penting dalam urutan "mundur". Misalnya, istilah kesepuluh adalah
01
; tidak1
juga001
tidak bisa diterima. - Jika kedua bahasa menggunakan pengkodean karakter yang berbeda, program ditentukan oleh byte , bukan karakternya. Artinya, byte harus sama dalam dua bahasa.
- Kode terpendek dalam byte menang.
Jawaban:
05AB1E / Jelly ,
1413 byte-1 byte berkat Adnan (hindari rangkap tiga dengan cetakan non-popping)
Byte mentah (heksadesimal):
Dalam 05AB1E 's kode-halaman :
Cobalah online!
Dalam Jelly 's kode-halaman :
Cobalah online!
Bagaimana?
Program 05AB1E mencetak jumlah ganda dengan setiap entri dipisahkan oleh baris baru:
Program Jelly mencetak hitungan terbalik dengan setiap entri dipisahkan oleh baris baru.
Parser akan memperlakukan literal yang valid antara
[
dan]
sebagai literal terlampir, jika byte ini adalah token yang tidak ditentukan dan dengan demikian menjadi setara dengan token yang memisahkan kode menjadi garis-garis.==>
tidak parse sebagai literal, jadi kodenya efektif:sumber
Ð,,
dengan==
.Python 2 / C (dentang) ,
10910710084958889888784 bytePython: Coba online!
C: Coba online!
L dalam kode Python adalah bagian dari pembatas.
Penjelasan:
Dalam kode C, Ini pertama menetapkan i ke 0. Kemudian, ia memulai komentar (
#
adalah kode yang valid dalam C untuk#include
pernyataan) di mana kode Python berjalan. Di akhir komentar, ia mendefinisikan fungsi yang selamanya menambah variabel dan mencetaknya dua kali, dibatasi ruang. Kemudian dimulai komentar.Dalam kode Python,
i=0;
set i ke nol. Python mengabaikan baris berikutnya karena#
memulai komentar baris tunggal. Kemudian selamanya menambahkannya dan mengubahnya menjadi angka yang panjang dan mencetak representasi string yang terbalik. 'L' dari panjang adalah bagian dari pembatas. Setelah itu, ia memulai string multi-line untuk mengomentari kode C, yang berakhir kemudian.-2 byte terima kasih kepada @LuisMendo. -7 byte terima kasih kepada @ZacharyT. -6 byte lebih banyak berkat @ZacharyT. +11 byte untuk memperbaiki bug berkat @ mbomb007. -7 byte terima kasih kepada @Doorknob. +1 byte untuk memperbaiki bug berkat @Doorknob. -1 byte terima kasih kepada @yoann. -1 byte lebih banyak berkat @yoann. -3 byte terima kasih kepada @Cyoce.
sumber
a(i){printf("%i %i ",i,i);a(i+1)}
while
loop untuk kode C?`i`
sebagai gantinyastr(i)
for(;;)printf("%i %1$i ",i++);
untuk menyimpan satu byte. The1$
adalah argumen posisional yang memberitahuprintf
untuk menampilkan argumen pertama (setelah format string).Jelly / Pyth, 15 byte
Unprintables dirusak oleh perangkat lunak SE, jadi inilah hexdump:
Jalankan dengan
jelly f file
danpyth file
masing - masing.Penjelasan
Pertama adalah bagian Pyth.
.V
menjalankan infinite loop di atas urutan yang meningkat mulai dari inputnya, yang ada di sini1
. Kemudian kita membalikkan (_
)`
indeks loop yang diikat (b
) dan secara implisit mengeluarkannya. Itu;
ada di sana untuk mengakhiri loop, dan"
diperlukan untuk memperlakukan sisa program sebagai string literal sehingga parser tidak tersedak.Bagian Jelly akan dijelaskan dengan terlebih dahulu menerjemahkan sisa program dari halaman kode Jelly:
The
¶
bertindak sebagai pakan garis, efektif mengabaikan bagian pertama dari program ini dengan membuat link yang tidak pernah disebut. Kemudian kita mulai1
dan menjalankan while loop (¿
) yang menggunakanṄṄ$
(mencetak dua kali) sebagai kondisinya, dan menambah (‘
) nilainya sebagai loop body.Kebetulan, mengganti bagian Pyth dengan
1[DR,>]
akan membuat pengiriman Jelly / 05AB1E yang valid dalam 14 byte, tetapi interpeter saat ini berisi bug yang mencegah hal ini.sumber
Perl / JavaScript, 87 byte
Perl
Sebuah mekanisme yang saya gunakan banyak dalam JS / Perl polyglots adalah menyalahgunakan fakta bahwa substitusi dapat menerima hampir semua pembatas, menggunakan
=
cara saya dapat menggunakan substitusi pointless awal (pertama-tama mengganti0;print
denganconsole.log;m
flag/s
in$_
, yang saat iniundef
) , lalu atur$_
ke hasil penggantians
dengans
dalam mode multiline (/m
), yaitu0
. Sekarang$_
adalah0
dan saya memulaiwhile
loop, ini kenaikan kemudian$_
. Selanjutnya saya panggilprint
, menyampaikan ekspresi reguler yang cocok (karena||
pada akhir yang cocok dengan string kosong) dan menggunakan&&
operator untuk kemudian mengirim kebalikan dari$_
digabungkan dengan baris baru ($/
diinisialisasi ke"\n"
). Ini penting hingga tak terbatas mundur.JavaScript
Banyak tugas variabel di sini, yang disembunyikan di dalam
s///
panggilan Perl . Saya mengatur variabels
danm
sebagai0
, aliasconsole.log
untukprint
, menjalankan beberapa pembagian pointless, setel$_
ke0
dan mulaiwhile
penambahan loop$_
, panggilanprint
lewat0
(m/s
, ini memulai panggilan kem
dalam Perl, tetapi diperlakukan sebagai divisi standar di JS) dan string target kami ($_+"\n"+$_
) melalui operator koma, yang mengembalikan item terakhir dalam daftar. Saya menghindari potongan terakhir dari kode Perl (&&reverse.$/
) karena$_+"\n"+$_
akan benar dan jadi saya dapat menggunakan||
untuk menghasilkanRegExp
objek yang berisi akhir dari kode Perl yang tidak pernah dievaluasi.Diuji menggunakan Perl 5 dan Node 6.
sumber
NodeJS / PHP,
131106 byte-25 byte terima kasih kepada @Titus
Menggunakan NodeJS alih-alih browser JS untuk pemformatan output yang lebih baik dan penanganan loop tak terbatas yang lebih baik.
Coba JavaScript online
Coba PHP online
Perhatikan bahwa output TIO terputus setelah 128KB.
sumber
<!--←printf=(_,i)=>process.stdout.write(i),strrev=i=i>>1//--><?←for($i=0;;)printf("%s ",strrev($i++));
. 84 byte (tapi tidak sebagus pendekatan Anda):<!--←for(i=1;;)process.stdout.write(i+" "+i+++" ")//--><?for(;;)echo strrev(++$i),_;
atau<!--←for(i=1;;)process.stdout.write((++i>>1)++" ")//--><?for(;;)echo strrev(++$i),_;
.i>>1
mengulangi angka, tetapi saya harus mengubahwrite(i)
untuk memasukkan spasi, dan karenawrite()
tidak menerima nomor. Dan Anda memiliki kesalahan ketik (strrev=i=i>>1
->strrev=i=>i>>1
) yang menambahkan byte lain. Akhirnya menjadi lebih pendek untuk dilakukanwrite(i+i)
danstrrev=i=>i+" "
.V / Brain-flak Classic ,
27, 26 byteHexdump:
Cobalah online! di V (sedikit dimodifikasi sehingga akan berhenti sehingga Anda dapat melihat hasilnya. Pada TIO, V hanya menghasilkan jika program berakhir)
Cobalah online! di Brain-flak Classic
Ini bukan yang paling menarik dari polyglots, karena kode V tidak berpengaruh pada brain-flak classic, dan sebaliknya, namun sangat menyenangkan untuk menggunakan kedua bahasa saya sendiri pada sebuah tantangan, dan kedua solusi tersebut cukup menarik sendiri.
V Penjelasan:
Penjelasan BFC:
sumber
Retina / Python 2, 61 byte
Retina | Python 2
sumber
str()
dengan ``, tetapi ternyata mengganggu kode Retina. Saya tidak tahu kenapa?str
, jika tidak, Anda akan mendapatkanL
hasilnya. Tapi itu benar - benar bekerja di Retina. Anda pasti telah mengubah lebih dari apa yang Anda katakan Anda lakukan, seperti memindahkan sesuatu ke jalur yang berbeda.R / Oktaf ,
83807871 byte-3 byte terima kasih kepada Luis Mendo
#{ }#
adalah komentar blok Oktaf dan#
kebetulan adalah komentar untuk R. Penerjemah R hanya melihat baris berikutnya sebagai badanwhile
loop, dan penerjemah Oktaf melompat tepat di depan kode OktafBagian R mencetak pasangan angka mulai dari 1, dan bagian Oktaf mencetak angka-angka mundur mulai dari 0.
Saya sepenuhnya berharap untuk dikalahkan (bahkan dengan kombinasi bahasa yang sama); Saya baru saja menulis begitu banyak kode Matlab dan R baru-baru ini sehingga saya pikir saya akan mencobanya.
Cobalah online! - Tautan oktaf
sumber
i=i+1
?+=
tidak berfungsi di R, jadi ya, memang harus seperti itu.end
perlu?while(1)
Anda dapat menyimpan byte tersebut.Ruby / Python2:
6864 bytePerspektif Ruby
init variabel sederhana:
"#{}"
adalah sintaks untuk interpolasi string. Saya menggunakannya untuk mengeksekusi ekspresi sebagai gantinya.p
adalah singkatan untukputs
.loop
menciptakan loop tak terbatas.Berikutnya ada
exec
hal, tetapi tidak pernah dievaluasi, karena infinite loop adalah definisi infinite. Diperlukanexec
untuk tidak menghasilkan kesalahan sintaksis dengan kode Python.Perspektif python
Dari perspektif Python, ada kesamaan
i=0
. Selanjutnya, Python memiliki sintaks yang berbeda untuk interpolasi string, jadi baris ini dibuang begitu saja. Berikutnya ada infinite loop yang mirip dengan yang diposkan orang lain.sumber
Bash / Periksa ,
5028 byteTerima kasih kepada @Doorknob karena telah menyimpan banyak byte dengan beralih dari Python ke Bash
Untuk Bash:
Ini hanya beberapa komentar, yang diabaikan.
Mulai urutan pergi dari 1 hingga tak terbatas, lalu pipa hasilnya
rev
.Untuk Memeriksa:
Ini segera beralih ke mode 2D, ke kanan.
>
mengarahkan hak IP, yang tidak berpengaruh. Ini membungkus ke awal baris dan hits#
lagi, yang beralih dari mode 2D. Kemudian hits>
dalam mode 1D, yang mendorong 0 ke stack. Karena berada dalam mode 1D, IP membungkus ke baris berikutnya.#
mengalihkan IP ke mode 2D lagi danv
mengarahkannya ke bawah.Yang pertama
#
beralih kembali ke mode 1D lagi.p
mengeluarkan TOS sebagai angka (tetapi tidak menghapusnya), dan kemudian<
mencetak baris baru. Ini dilakukan dua kali, dan kemudian angkanya bertambah)
.#
beralih ke mode 2D lagi, sehingga IP menutup ke awal baris, menyentuh#
untuk beralih ke mode 1D, dll.sumber
#
untuk komentar dan dapat melakukan "terbalik nomor" tugas yang sangat mudah:seq 1 inf|rev
.i=1;loop{puts i.to_s.reverse;i+=1}
lebih pendek satu byteCJam /> <>,
2723 byteUntuk CJam:
Cobalah online! - perhatikan bahwa Anda harus menunggu hingga batas 60 detik untuk melihat hasilnya, tetapi berfungsi offline.
Ini mendefinisikan string multi-line literal yang tidak pernah digunakan.
Baris kedua berbunyi seperti ini:
Ke> <>:
Mulai string literal.
Konten string literal. Setiap kode karakter didorong secara individual ke tumpukan.
IP membungkus untuk mencapai
"
lagi, yang mengakhiri mode string.l
mengambil panjang tumpukan,a
mendorong 10, dan,
membagi. Ini memberi kita panjang tumpukan / 10.:
duplikat,n
cetak sebagai angka,a
tekan 10, dano
cetak sebagai kode karakter (baris baru).Hal yang sama. Cetak nomor yang diikuti oleh baris baru. Stack sekarang memiliki panjang 10 lagi (konten literal string asli ada di stack).
IP kemudian membungkus ke sekitar
"
lagi, mengarah ke 10 elemen lagi untuk didorong. Lain kali,l
mengembalikan 20, jadi 2 dicetak, dll.Baris kedua tidak pernah disentuh oleh IP.
sumber
Röda / C (gcc) , 90 byte
Röda: Cobalah online!
C: Coba online!
Penjelasan
Ini menyalahgunakan fakta yang
//
merupakan divisi int di Röda tetapi komentar garis dalam C.Dalam kedua bahasa,
main(){}
menunjukkan program utama, dan keduanya memanggil fungsif
dengan argumen dummy0
.Dalam Röda,
a=1//1
tidak divisi int dan memberikan hasil1
untuka
. C melihata=1
dan melakukan hal yang sama, tetapi semuanya setelah penugasan itu adalah komentar untuk C. Dari sana, kedua bahasa bercabang.Raeda
Kami memiliki loop tanpa batas dengan
while[]
( kondisi kosong adalah benar ). Di dalamnya,` $a`
mengkonversi bilangan bulata
menjadi string (dengan spasi di depan) dan kemudian[::-1]
membalikkannya (dan output dengan spasi di belakang). Kemudian nilaia
bertambah satu.Di luar loop sementara, komentar multiline dimulai
/*
dan berakhir tepat sebelum akhir fungsi.C
Setelah mengabaikan sisa baris, program menuju baris kedua. Kami mulai dengan titik koma karena
a=1
pernyataan itu perlu diakhiri. Setelah itu, kami menemukan loop sederhana untuk mencetak variabel iterasia
,, dua kali pada setiap iterasi.Di luar for for,
/*
hanya ada untuk mengabaikan*/
komentar akhir Röda .sumber
QBIC / QBasic 4.5 , 58 byte
Ini sangat menyalahgunakan fakta bahwa semua huruf kecil dipandang sebagai kode QBasic literal oleh penerjemah QBIC dan karenanya hanya diteruskan ke lapisan QBasic QBIC. Bagaimana kedua bahasa melihat kode ini, berdampingan:
sumber
laserLANG / > <> , 163 byte
Pertama kali bermain golf, jadi ini sedikit lebih besar dari yang mungkin bisa terjadi. Saya ingin menggunakan> <>, tetapi karena beberapa orang sudah menggunakannya untuk membuat urutan kedua, saya memutuskan ingin memberikan pembuatan urutan pertama.
Coba> <> online!
Untuk laserLANG, juru bahasa offline diperlukan untuk mencobanya. Itu dapat ditemukan di sini .
laserLANG
eksekusi dimulai di
!
mana diabaikan sepenuhnya. kemudian mencapai\
dan mulai berjalan melewati beberapa karakter yang benar-benar diabaikan. Akhirnya mencapai yang lain\
dan kesenangan dimulai. Saya pada dasarnya mengambil ide di balik "Halo, Dunia!" lingkaran dan kental sebaik mungkin. Itu sedikit tantangan berurusan dengan fakta bahwa laserLANG hanya akan mengurangi / menambah penghitung memori ketika penghitung program akan kiri / kanan masing-masing. Saya merasa sebagian besar byte dapat disimpan di sini dengan melakukan beberapa trik yang belum saya pikirkan.> <>
Eksekusi dimulai
!
yang menyebabkannya melompati\
. Kemudian berlanjut seolah-olah kode laserLANG tidak ada di sana. Saya tidak menyadari> <> hanya memiliki dukungan untuk divisi float, jadi pemotongan pendek dan sederhana agak membingungkan pada awalnya.sumber
Befunge-98 / > <> , 32 byte
Tulis ini sebelum saya melihat berapa banyak
><>
jawaban di sana. Beberapa latar belakang:\
adalah operator pengubah arah dalam> <>, dalam hal ini mendorongnya ke bawah, sementara di Befunge ia menukar dua item teratas di tumpukan. Kode Befunge terlihat seperti:Cobalah online!
Mencetak angka mundur yang dipisahkan oleh baris baru. Befunge mencetak spasi secara otomatis setelah setiap angka, sehingga setiap digit dipisahkan oleh spasi. Berulang-ulang mendapatkan digit terakhir, mencetaknya dan membaginya dengan 10 sampai angka 0. Kemudian naikkan dan ulangi.
Kode> <> langsung turun ke baris kedua.
Cobalah online!
Dan itu sangat sederhana. Dapatkan panjang tumpukan, cetak dua kali dengan baris baru dan tinggalkan salinan panjangnya pada tumpukan untuk loop berikutnya.
sumber
Ruby / Stacked , 37 byte
Cobalah online!
Ini mencetak
1 1 2 2
... di Ruby dan1 2 3 ... 01 11 21...
di Stacked.Penjelasan
Di Ruby:
Setelah menghapus komentar, ini menjadi:
Satu-satunya baris yang relevan di sini adalah yang terakhir.
p
mengembalikan argumennya, jadip p
cetak argumennya dua kali.$.
mulai dari0
, jadi$.+=1
kenaikan$.
, mengembalikan nilai tambah. Oleh karena itu, ini mencetak setiap angka dari1
dua kali.Di Stacked:
Ini sama dengan token berikut:
Dua yang pertama tidak relevan (pada dasarnya, mentransformasikannya
0
menjadi pengurangan F). Kemudian,0
didorong ke tumpukan. Setelah itu, fungsi[1+:tostr rev out]
didorong ke tumpukan.loop
muncul fungsi ini dan jalankan tanpa batas.Bagian dalam fungsi menambah bagian atas tumpukan (
1+
), menduplikatnya (:
), mengubahnya menjadi string (tostr
), membalikkannya (rev
) dan mengeluarkannya (out
). Proses ini diulang tanpa batas. Karena loop tidak terbatas, segala sesuatu yang muncul setelah token itu pada dasarnya diabaikan oleh penerjemah.sumber
> <> / Jelly , 37 byte (25 dalam codepage Jelly)
Coba> <> online!
Coba Jelly online!
> <> mencetak urutan hingga tak terbatas dua kali, Jelly menghitung mundur.
> <> hanya peduli dengan baris teratas:
Dan terima kasih kepada @ Challenger5 untuk menghemat beberapa byte di sini di linefeed
Jelly mengeksekusi kode-nya dari bawah ke atas. Hanya 2 baris terakhir yang relevan.
sumber
><>
kode ini memiliki poin kode ASCII yang sesuai dengan Codepage Jelly. Saya tidak tahu terlalu banyak tentang bisnis codepage ini, tapi saya pikir ini akan menghasilkan byte yang sama dengan yang digunakan untuk mewakili kode. Karakter pada baris bawah diabaikan oleh><>
jadi tidak masalah jika mereka persis sama antara codepages. Hitungan byte diambil dari><>
tautan TIO.","
hanya mendorong nilai ASCII,
ke stack, jadi Anda dapat menggunakannyaa
sebagai pemisah baris baru.C (gcc) / PHP ,
1028680 byteMenghasilkan urutan ganda dalam C dan urutan terbalik dalam PHP.
Coba di C!
Coba di PHP!
Penjelasan
C
Dalam C,
#
bentuk hal-hal preprosesor. Saya tidak benar-benar tahu banyak tentang C tetapi tidak mengeluh ketika ada garis kosong untuk hal ini. The//
bentuk komentar line. A\
pada akhir baris pada dasarnya "melarikan diri" baris baru dan membuat dua baris diperlakukan sebagai satu. Ini juga berfungsi untuk komentar baris, sehingga baris kedua dilihat sebagai komentar dalam C. Baris ketiga melakukan pekerjaan mengeluarkan angka-angka dengan sederhana untuk loop. Setelah itu, hanya ada komentar.PHP
Di PHP,
#
bentuk komentar garis, sehingga baris pertama diabaikan seluruhnya. Baris kedua mencetak angka-angka yang dibalik dengan for for, dan memisahkannya dengan\nint main(i){for(;;i++)printf("%d %d ",i,i);}//
(kode C yang dibungkus dengan string).sumber