Terinspirasi oleh saya bukan bahasa yang Anda cari!
Tantangan
Pilih dua bahasa pemrograman yang berbeda, dan tulis sebuah program yang mencetak baris berikut ke stdout (atau setara):
This program errors out in <the current language> :P
dan kemudian menghasilkan berbagai jenis kesalahan di masing-masing dua bahasa.
Aturan
Beberapa aturan diambil dari tantangan aslinya.
- Dalam output, nama bahasa harus mengikuti:
- Nama yang terdaftar di TIO , secara opsional mengecualikan nomor versi dan / atau nama implementasi (mis. Jika Anda menggunakan
JavaScript (Node.js)
sebagai salah satu bahasa Anda, Anda dapat menggunakanJavaScript
nama bahasa Anda, tetapi tidakJS
atauJavascript
.) - Nama lengkap di situs web resmi (atau GitHub repo) jika bahasa pilihan Anda tidak tersedia di TIO.
- Nama yang terdaftar di TIO , secara opsional mengecualikan nomor versi dan / atau nama implementasi (mis. Jika Anda menggunakan
- Tidak ada program yang harus mengambil input dari pengguna.
- Anda dapat menggunakan komentar dalam bahasa apa pun.
- Dua versi berbeda dari bahasa yang sama dihitung sebagai bahasa yang berbeda.
- Jika ini dilakukan, program harus menampilkan nomor versi utama, dan jika berjalan pada dua versi minor yang berbeda, harus melaporkan versi minornya juga.
- Anda tidak boleh menggunakan fungsi versi prebuilt (ini termasuk variabel yang telah dievaluasi saat runtime).
- Dua flag baris perintah yang berbeda dalam bahasa yang sama juga dihitung sebagai bahasa yang berbeda sesuai konsensus meta ini , selama flag tersebut tidak menyertakan fragmen kode (seperti
-Dblahblah...
dalam C).- Jika ini dilakukan, program juga harus menampilkan flag yang digunakan.
- Dua kesalahan dianggap berbeda kecuali kedua kesalahan dihasilkan oleh semantik yang sama (seperti "pembagian dengan nol", "kesalahan segmentasi", atau "indeks di luar jangkauan").
- Jika runtime suatu bahasa tidak keluar setelah kesalahan, tetapi melaporkan kesalahan dalam beberapa cara kepada pengguna, itu adalah kesalahan yang valid.
- Jika suatu bahasa tidak membedakan pesan kesalahan tetapi memiliki daftar alasan yang diketahui menyebabkan kesalahan, Anda harus menentukan alasannya, bukan pesan kesalahan tersebut.
Contohnya adalah><>
, yang hanya memiliki satu pesan kesalahansomething smells fishy...
, tetapi halaman wiki esolangs memiliki daftar alasan kesalahan.
- Kesalahan sintaksis tidak diizinkan kecuali dihasilkan oleh panggilan
eval()
atau sejenisnya. - Melempar sesuatu secara manual (via
throw
(JS),raise
(Python),die
(Perl) atau yang serupa) diperbolehkan, tetapi semuanya dianggap sebagai satu jenis kesalahan. - Kesalahan dengan perintah yang tidak valid dalam 2D atau pijakan golf juga diizinkan (dan diperlakukan sebagai salah satu jenis kesalahan).
Contohnya
Python dan Ruby
- Python:
This program errors out in Python :P
ke stdout, lalu pengidentifikasi yang tidak terdefinisi - Ruby:
This program errors out in Ruby :P
ke stdout, lalu indeks di luar batas
C89 dan C99
- C89:
This program errors out in C 89 :P
ke stdout, lalu pembagian dengan nol - C99:
This program errors out in C 99 :P
ke stdout, lalu segmentasi kesalahan
Perhatikan bahwa nomor versi harus selalu dipisahkan dari nama bahasa dengan spasi.
Python 2.7.9 dan Python 2.7.10
- Python 2.7.9:
This program errors out in Python 2.7.9 :P
ke stdout, lalu sintaks kesalahan pada eval - Python 2.7.10:
This program errors out in Python 2.7.10 :P
ke stdout, lalu kunci kesalahan pada dict
Perl dan Perl -n
- Perl:
This program errors out in Perl :P
ke stdout, lalu format waktu tidak valid - Perl
-n
:This program errors out in Perl -n :P
ke stdout, lalu coba buka file yang tidak ada
Kondisi menang
Ini adalah kode-golf , jadi kode terpendek dalam byte menang. Tetapi Anda selalu didorong untuk mengirim jawaban yang menyenangkan atau menarik meskipun itu tidak terlalu pendek.
This program errors out in ...
mengandung tab / spasi campuran, bukan spasi saja?Jawaban:
Python 2 / Python 3 , 60 byte
NameError: name 'a' is not defined
unsupported operand type(s) for *: 'NoneType' and 'int'
Python 2:
/
adalah divisi integer, 3/2 mendapat 1; int (3/2 * 2) adalah 2.print((...)*1)
, di sini*1
berarti mengulangi string sekali.Python 3:
(print(...))*1
.print
pengembalian fungsiNone
; Perkalian tidak berfungsiNone x int
, jadi ini melaporkan "operan yang tidak didukung".sumber
C dan C ++,
114101 byte-13 byte berkat l4m2 !
Kesalahan segmentasi dalam C ++, pengecualian floating point dalam C.
auto
adalah gagal untukint
di C sehingga(int).5
menjadi0
, jadi mencoba untuk membagi dengan itu pada dasarnya adalah pembagian dengan nol.Di C ++
1/d
adalah 2, menambahkannya ke alamatd
dan mencoba mengubah nilai alamat itu melemparkan segfault.Cobalah di C ++!
Coba di C!
sumber
"++"+n
, di manan
adalah0
untuk C ++ dan2
Cd?"++":""
9 char,"++"+4*d
8 char. Tapi dapatkan C / C ++ mundur. Mendesah.int main(){auto d=.5;printf("This program errors out in C%s :P",d?"++":"");2[&d]+=1/d;}
(105) meskipun saya tidak tahu mengapaint
dapat dihilangkanL"⬫"+!d
alih-alihd?"++":""
JavaScript + HTML / HTML + JavaScript, 160 byte
Tidak yakin apakah ini menghitung dua bahasa, tetapi itu lucu.
sumber
<!-- ... -->
sebagai penanda komentar satu baris (saya tahu bahwa ini ada dalam spesifikasi untuk alasan kompatibilitas mundur)Java 8 & C99, 172 byte
Berdasarkan jawaban saya untuk 'abc' dan 'cba' tantangan .
Cobalah di Java 8 - menghasilkan ArrayIndexOutOfBoundsException: 1 .
Cobalah di C - menghasilkan pengecualian Floating point: pembagian dengan nol tidak ditentukan .
Penjelasan:
Seperti yang Anda lihat dalam kode Java-highlighted di atas, baris pertama adalah komentar karena
//
, dan kode-C adalah komentar karena/* ... */
, menghasilkan:Jadi ia mencetak ke STDOUT, dan kemudian mencoba mengakses argumen program-kedua (ketika tidak ada yang diberikan), sehingga menghasilkan ArrayIndexOutOfBoundsException .
Tidak yakin bagaimana mengaktifkan dengan benar penyorotan C, karena
lang-c
menghasilkan penyorotan yang sama dengan Java .. Tetapi//\
akan mengomentari baris berikutnya, yang merupakan kode Java, menghasilkan:Jadi, prins untuk STDOUT, dan kemudian memberikan pembagian dengan kesalahan nol.
sumber
//
ditambahkan ke C dengan C99.C99
.a[1]
bukannyaa[0]
?1
dari awal. Bisa menggunakan0
,9
, dll juga. Jika saya memiliki sesuatu untuk diedit tentang posting ini, saya akan mengubahnya0
juga pada saat yang sama.Java 8 & Whitespace ,
439431428408 byteCobalah di Java 8 - menghasilkan ArrayIndexOutOfBoundsException: 0 .
Cobalah di Whitespace - menghasilkan kesalahan pengguna (Tidak dapat melakukan Infix Plus) .
Penjelasan:
Java 8:
Jadi ia mencetak ke STDOUT, dan kemudian mencoba mengakses argumen program-pertama (ketika tidak ada yang diberikan), sehingga menghasilkan ArrayIndexOutOfBoundsException .
Ruang putih:
Huruf
S
(spasi),T
(tab), danN
(baris baru) ditambahkan hanya sebagai penyorotan.[..._some_action]
ditambahkan sebagai penjelasan saja.Coba versi yang disorot ini.
Whitespace adalah bahasa berbasis tumpukan yang mengabaikan segalanya kecuali spasi, tab, dan baris baru. Berikut adalah program yang sama dalam pseudo-code:
Ini akan kesalahan segera setelah selesai mencetak semua nilai dan tumpukan kosong ketika mencoba untuk melakukan Add (
TSSS
), yang membutuhkan dua item pada stack.Saya telah menghasilkan konstanta
111
dengan program Java ini , yang juga saya gunakan untuk tantangan terkait ASCII sebelumnya yang saya buat di Whitespace. Selain itu, saya telah menggunakan beberapa salinan untuk spasi untuk menyimpan byte.Satu hal penting yang perlu diperhatikan adalah trik yang saya gunakan untuk menempatkan program Java dalam jawaban Whitespace. Mari saya mulai dengan menjelaskan bagaimana angka didorong di Whitespace:
S
di awal: Mengaktifkan Manipulasi Stack;S
: Dorong yang berikut sebagai Angka;S
atauT
: Positif atau Negatif masing-masing;Beberapa
S
dan / atauT
, diikuti olehN
: Nomor sebagai biner, di manaT=1
danS=0
.Berikut beberapa contoh:
SSSTN
;SSTTN
;SSSTTSTTTTN
.SSSSN
,SSTSN
,SSSN
,SSTN
,SSSSSSSSSSSSN
, dll (Bila Anda menggunakanSSSN
(atauSSTN
), kita tidak harus menentukan bagian biner, karena itu secara implisit 0 setelah kita menyatakan tandanya.)Jadi
SSSN
sudah cukup untuk mendorong nilai0
(digunakan untuk hurufo
dalam kasus ini). Tetapi, untuk menempatkan program Java dalam program Whitespace golf ini, saya membutuhkan ruang tambahan, jadi dua yang pertamao
didorongSSSN
, tetapi yang ketiga didorongSSSSN
, sehingga kami memiliki cukup ruang untuk kalimat dari program Java.sumber
CBM BASIC dan kode mesin 6502 (C64),
142144 byteHarus menambahkan 2 byte setelah menyadari kesalahan sintaks tidak diizinkan ....
Hexdump
.prg
file:Tampilan CBM BASIC , sebagaimana tercantum dalam editor C64:
Perhatian : Tidak mungkin untuk memasukkan program ini dengan benar di editor BASIC. Bahkan jangan mencoba mengedit program ini di editor BASIC, itu akan macet. Namun, ini adalah program BASIC yang dapat dijalankan;)
Tampilan kode mesin 6502 :
Demo online , ketik
run
dijalankan sebagai BASIC,sys 2049
untuk dijalankan sebagai kode mesin,list
untuk menunjukkannya diartikan sebagai kode BASIC.Berjalan sebagai BASIC menghasilkan
division by zero error in 1
, berjalan sebagai kode mesin acan't continue error
Penjelasan:
Dua byte pertama dari
.prg
file adalah alamat muat di little endian, ini$0801
(desimal2049
) di sini, yang merupakan alamat awal untuk program-program BASIC pada C64.run
memulai program ini dalam juru bahasa BASIC, sementara itusys 2049
adalah perintah untuk menjalankan program kode mesin di alamat2049
.Seperti yang Anda lihat, baris pertama dalam tampilan BASIC adalah komentar (
rem
) yang berisi "sampah" dan bagian dari string keluaran yang diperlukan. Ini adalah program kode mesin dan beberapa byte pengisi. Anda melihat beberapa perintah BASIC "acak" di sana karena program CBM-BASIC berisi perintah "tokenized" sebagai nilai byte tunggal, dan beberapa dari nilai ini sama dengan opcode yang digunakan dalam kode mesin. Kode mesin menggunakan kembali string yang ada di baris kode kedua untuk hasilnya.Dua byte pertama dari baris program dasar adalah pointer ke baris berikutnya, di sini
$0850
. Ini dipilih dengan hati-hati karena50 08
juga merupakan instruksi cabang 6502 melompati 8 byte berikutnya ketika bendera meluap tidak diatur - ini digunakan untuk melompat di suatu tempat di tengah-tengah "komentar" baris ini ketika dieksekusi sebagai kode mesin. Ini50
adalah opcode yang digunakan di sini, jadi baris kedua harus dimulai pada0850
agar triknya berfungsi. Itu sebabnya Anda melihat urutan 520
byte (karakter spasi) untuk diisi. Kode mesin secara aktif melompat ke rutinitas penanganan kesalahan ROM untuk memberikan kesalahan "tidak dapat melanjutkan".Kode BASIC cukup mudah; sebagai argumen kedua untuk "mencetak", dua variabel tidak diinisialisasi (memiliki nilai
0
dalam CBM BASIC) dibagi, memicu kesalahan "pembagian dengan nol".sumber
> <> dan Foo , 42 byte
Coba di> <>!
Cobalah di Foo!
Foo mencetak semuanya
"
, seperti yang didokumentasikan dengan baik, dan mencoba untuk membaginya dengan nol pada akhirnya. Itu mengabaikan'><>'
.><>
mendorong "Foo" ke tumpukan, tetapi segera muncul menggunakanp
. Setelah itu mencetak semuanya ke stack dengan#o<
itu keluar ketika stack kosong dengan satu-satunya pesan kesalahan yang diketahuinya,something smells fishy...
sumber
><>
memiliki daftar alasan kesalahan, jadi saya percaya Anda harus menentukan salah satunya, bukansomething smells fishy...
.p
popFoo
sangat pintar!C dan Python,
126116 byte-10 byte terima kasih kepada @Bubbler!
Dalam cetak Python () adalah Tidak ada, jadi mencoba untuk mendapatkan negatif tidak masuk akal, jadi Python melempar kesalahan.
Dalam C printf () mengembalikan sebuah int, jadi membaginya dengan nol memberikan pengecualian floating point.
Coba di C!
Cobalah dengan Python!
sumber
-print(...)
untuk menaikkanTypeError
dalam Python, dan kemudian Anda bebas untuk membuat Floating Point Error (pembagian dengan nol) di C. Dikombinasikan dengan beberapa baris baru yang berlebihan, di sini adalah 116 byte ( Python , C ).Atase + Bahasa Wolfram (Mathematica) , 82 byte
Coba atur online! Coba Mathematica online!
Ini berporos pada makna operator
=
dalam dua bahasa. Di Attache, ia membandingkan untuk kesetaraan, tetapi di Mathematica, ia melakukan tugas variabel.:=
melakukan penugasan variabel dalam kedua bahasa.Sekarang, di Attache,
Print
mengembalikan array string yang dicetak, dan pengurangan tidak dimungkinkan dengan string dan integer (yaitu,0
). Jadi, kesalahan jenis dilemparkan. Dalam Mathematica,Print
returnNull
, dan Mathematica bisa mengurangi0
itu. Tapi, kami secara manual melempar null itu denganThrow
, memberikannocatch
kesalahan.sumber
Python (2) dan QB64 , 82 byte
Untuk menguji versi Python, Anda bisa mencobanya secara online! Untuk menguji versi QB64, Anda harus mengunduh QB64.
Apa yang Python lihat
Baris pertama hanyalah ekspresi telanjang
1
(no-op) diikuti oleh komentar.Baris kedua diatur
s
ke string"QB64"
, tetapi baris ketiga segera mengubahnya menjadi"Python"
. Baris keempat mencetak pesan yang sesuai.Baris kelima adalah ekspresi telanjang lainnya, tetapi memunculkan a
NameError
karena nama yang tidak ditentukanCLS
.Apa yang dilihat QB64
Baris pertama, bernomor
1#
, mendefinisikan setiap variabel yang namanya dimulai denganS
(case-insensitive) sebagai variabel string. Ini artinya kita tidak harus menggunakans$
, yang akan menjadi kesalahan sintaksis dalam Python.Baris kedua diatur
s
ke string"QB64"
.'
memulai komentar di QB64, jadi baris ketiga tidak melakukan apa-apa. Baris keempat mencetak pesan yang sesuai.Baris kelima mencoba
CLS
(menghapus layar) dengan argumen-1
. Tapi karenaCLS
hanya menerima argumen dari0
,1
atau2
, ini menghasilkan kesalahanIllegal function call
. Kesalahan membuat kotak dialog yang menanyakan pengguna apakah mereka ingin melanjutkan eksekusi atau membatalkan. Secara teknis, ini berarti kesalahannya tidak fatal (dalam hal ini, Anda dapat memilih "lanjutkan eksekusi" dan program berakhir tanpa masalah lebih lanjut); tetapi OP telah secara eksplisit mengizinkan bahasa yang dapat dilanjutkan setelah kesalahan, sehingga perilaku QB64 harus baik-baik saja.sumber
Perl 5 dan JavaScript (Node.js) , 96 byte
Ini memanfaatkan fakta bahwa
(...)
ini adalah daftar di Perl yangprintf
akan menggunakan elemen paling kiri dan fakta bahwa itu adalah operator koma dalam JavaScript, yang akan mengembalikan argumen paling kanan.Menyebabkan pembagian dengan kesalahan nol dalam Perl dan ReferenceError karena
$
tidak didefinisikan dalam JavaScript.Coba Perl secara online!
Coba JavaScript online!
sumber
Oktaf dan MATLAB, 67 byte
Cobalah online!
Catatan: Kode ini mengasumsikan MATLAB diinstal tanpa kotak alat (atau bahwa nama kotak alat apa pun yang dipasang tidak dimulai dengan huruf A hingga M).
Bagaimana itu bekerja:
Kode mendapatkan data versi untuk penerjemah dan kotak peralatan menggunakan
ver
. Runningv(1).Name
mengekstrak nama produk pertama, ini akan mengembalikan salah satuOctave
atauMATLAB
menganggap catatan di atas benar.Program kemudian akan menampilkan string yang diperlukan, lengkap dengan
Octave
atauMATLAB
sesuai kebutuhan.Akhirnya kita lakukan
v(--pi)
.Di Octave,
--
adalah operator pra-pengurangan. Karena itu ia mencoba melakukan pra-pengurangan yang gagal karena variabelpi
tidak ada (pi
sebenarnya berfungsi, bukan variabel).Di MATLAB, operator pra-pengurangan tidak ada. Dengan demikian pernyataan tersebut diartikan
v(-(-pi))
sama dengan keadilanv(pi)
. Namunpi
bukan bilangan bulat, jadi tidak dapat digunakan untuk mengindeks ke dalamv
array, memberikan kesalahan.sumber
C ++ 14 (gcc) / C ++ 17 (gcc) ,
107105 byteCobalah online! (C ++ 14)
Cobalah online! (C ++ 17)
Mengasumsikan bahwa
<cstdio>
menyatakanprintf
di namespace global (selainstd
) dan bahwa set karakter eksekusi dasar menggunakan nilai-nilai ASCII, yang keduanya benar menggunakan g ++ di Linux.Tangkapan dasar di sini adalah bahwa C ++ 17 menghilangkan trigraph dari bahasa.
Dalam C ++ 14,
"??/0"
berisi trigraph dan setara dengan"\0"
. Begitu*"??/0"
juga nol, danc
diatur ke nol. Angka 4 diteruskan sebagai argumen untukprintf
, kemudian pembagian olehc
menyebabkan perilaku yang tidak ditentukan. Di Linux, ini terjadi sebelum*p
muncul di gambar, dan program mendapatkanSIGFPE
.Dalam C ++ 17,
"??/0"
persis panjang 4 string tampaknya. Begitu*"??/0"
juga'?'
atau 63, danc
diatur ke 3. Angka 7 diteruskan sebagai argumenprintf
, dan kali ini pembagian olehc
valid. Karenap
adalah anggota namespace, ia mendapat inisialisasi nol pada awal program dan memiliki nilai pointer nol, sehingga*p
perilaku tidak terdefinisi. Di Linux, karena program mencoba mengubah memori pada alamat nol, program tersebut mendapat aSIGSEGV
.sumber
main
Jenis kembali dapat dihilangkan, jadi -3 byte.Perl 5 dan Perl 6 , 55 byte
Coba Perl 5 secara online! (Pembagian ilegal dengan nol)
Coba Perl 6 secara online! (Tidak ada metode seperti itu)
Awalan
~
adalah pengetatan dalam Perl 6 dan pada dasarnya no-op dalam program di atas. Di Perl 5, bitwise tidak, mengubah -1 ke 0..
adalah sintaks pemanggilan metode dalam Perl 6 dan konatenasi dalam Perl 5.sumber
C (gcc) / Stax , 109 byte
Cobalah online! (C (gcc))
Cobalah online! (Stax) atau Jalankan dan debug! (Stax)
Segfault dalam C. Operasi tidak valid di Stax. Saya suka bagaimana segala sesuatu yang bukan komentar sebenarnya digunakan di Stax.
C
Ini adalah bagaimana C melihatnya. Baris pertama adalah no-op. Baris kedua mencetak pesan dengan
printf
dan kemudian segfault karena=0
.Stax
Program Stax berakhir setiap kali ia mencoba untuk pop atau mengintip dari tumpukan kosong. Ini membuatnya sedikit rumit dan kami harus menyiapkan tumpukan yang tidak kosong.
AA=~1;
melakukan ini sambil tetap memberikan pernyataan yang valid dalam C.Apa yang benar-benar berguna adalah
~
, ia menyiapkan tumpukan input non-kosong sehingga;
dapat dieksekusi tanpa keluar dari program. Namun keduanya1
s di tumpukan utama juga digunakan nanti.Baris kedua dimulai dengan tab dan memulai komentar baris di Stax.
Operasi yang tidak valid sedang mencoba melakukan
/
operasi untuk string sebagai TOS (operan ke-2) dan nomor1
dari (*) sebagai operan ke-1, yang tidak valid.Jika dua operan ditukar, itu akan menjadi operasi yang valid di Stax.
sumber
Jelly dan M , 39 byte
Cobalah di Jelly!
Coba di M!
Kedua bahasa berlaku terbalik
İ
untuk0
yang hasil dalaminf
untuk Jelly danzoo
untuk M. Saya tidak tahu mengapazoo
mewakili infinity di M. Tanyakan Dennis.Perbedaan penting adalah bahwa infinity Jelly sama dengan dirinya sendiri sedangkan infinity M tidak sama. Dengan demikian monad "sama dengan dirinya sendiri"
=`
menghasilkan1
Jelly dan0
M. Dari sini:Kesalahan Jelly adalah
EOFError: EOF when reading a line
.Kesalahan M adalah
TypeError: '>' not supported between instances of 'str' and 'int'
.sumber
Foo / CJam ,
5150 byteIni keluar dengan kesalahan divide-by-zero di Foo, dan
NumberFormatException
di CJam.Untuk CJam:
/
mencoba untuk membagi stringThis program errors out in
pada substringFoo
. Karena string tidak mengandung substring, ini menghasilkan array tunggal yang berisi string asli, yang ditampilkan dengan cara yang persis sama.'x
adalah karakter literal untukx
, yang dicetak dengan cara yang sama seperti string satu karakter. Dengan cara ini, kita bisa mendorong data untuk CJam yang diabaikan oleh Foo (saya belum menemukan cara membuat loop yang tidak dieksekusi di Foo).Li
mencoba melemparkan string kosong ke integer, yang gagal. Semuanya dari tumpukan dicetak.Ke Foo:
/
mencoba untuk membagi sel saat ini dengan elemen tumpukan atas (yang merupakan implisit0
). Untuk beberapa alasan, kesalahan bagi-oleh-0 tidak fatal di Foo, jadi ini hanya mencetak pesan ke STDERR dan terus berjalan.'C'J'a'm
danLi
) diabaikan.sumber
Only Jon Skeet can divide by zero.
meta.stackexchange.com/a/9138Python dan Lua ,
111110102989585 bytesKesalahan: Python 3:
Lua:
Jelas berbeda.
Menyalahgunakan banyak perbedaan:
<var>=<a>,<b>,...
menciptakan tuple dengan Python, tetapi dalam Lua ia membuat daftar argumen, yang hanya diambil anggota pertama.#
memulai komentar dengan Python, tetapi operator panjang di Lua. Alat peraga tambahan ke Python untuk memungkinkan tupel berakhir dengan koma.[[...]]
adalah sintaksis string multiline Lua, yang berarti ia bahkan tidak melihat fungsi cetak Python; ini diperlukan karena Lua menggunakan..
untuk penggabungan string dan tidak+
.a
, variabel yang tidak terdefinisi; Lua setelah ituz=#print(x.."Lua :P")
. Menggunakan hanya#print(x.."Lua :P")
untuk Lua tidak berfungsi, karena hal itu menimbulkan kesalahan sebelum kode dieksekusi.Suntingan:
"".join
dalam Python, -1 bytex
string dalam kedua bahasa dan tempatkanPython
dalam string literal dalam fungsi cetak, -8 byte#[[]]
lebih pendek dari#""
dan--[[]]
, -4 byte#1
sebagai kunci tabel, -3 byteprint(x.."Lua :P")
karya, tampaknya; -1 bytesumber
Java dan C #
242235Menyalahgunakan penanganan escape yang berbeda antara java dan C # (unicode escapes diuraikan sebelum parsing kode di java dan bukan di c #) sebagai semacam preprocessor, itulah tugas dari
\u0027
sulap, sisanya adalah beberapa "toggle-comments"Sunting: Memotong 8 byte berkat penunjuk @KevinCruijssen
Sunting: Aturan derp diperbaiki
sumber
String
divar
(Java 10 mendukung ini). (Atau 5 dengan mengubahString s="...";
keString s="...",x;
dan menghapusString
di depanx=
di Jawa 9 atau sebelum).AutoHotKey / C #,
155133128122 bytePenyorotan sintaks menjelaskan lebih baik daripada yang saya bisa:
C # RuntimeBinderException: 'Tidak dapat meminta tipe yang bukan delegasi'
Kesalahan AutoHotkey : Pengecualian dilemparkan.
Suntingan:
sumber
i+=i[-1]
. System.IndexOutOfRangeException: 'Indeks berada di luar batas array.'dynamic
daripada menggunakanvar
dan melempar Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'Tidak dapat memanggil tipe non-delegasi' dengani()
.PHP 7+ / JavaScript,
9089 byteIni menggunakan 2 bahasa dengan sintaks yang sangat mirip, memungkinkan untuk menulis kode ini pada kedua bahasa.
Pemisahan bahasa dilakukan oleh properti yang tidak ada dalam JavaScript: PHP menganggap
[]
(array kosong) sebagai nilai palsu sementara itu benar dalam JavaScript (karena itu adalah objek dan objek selalu benar , bahkannew Boolean(false)
).Eksekusi:
Akan fokus pada potongan kode berikut:
([]?console.log($X,'JavaScript'):printf($X,PHP))();
.Atribusi string berfungsi sama di kedua bahasa.
Kode ini menggunakan "operator ternary" ( Javascript , PHP ), yang sebagian besar berfungsi dengan cara yang sama dalam kedua bahasa.
Javascript
Javascript akan menjalankan
console.log($X,'JavaScript')
bagian yang mengembalikanundefined
.Kemudian, ketika Anda mencoba mengeksekusi
(...)()
, Anda mendapatkanUncaught TypeError: (intermediate value)(intermediate value)(intermediate value) is not a function
(di Google Chrome).PHP
PHP akan mengeksekusi
printf($X,PHP)
karya itu.Dalam PHP,
printf
fungsi mengembalikan panjang output .PHP memiliki fungsionalitas yang menarik: ia dapat menjalankan fungsi yang namanya disimpan dalam variabel (atau, sejak PHP7, sebagai hasil dari ekspresi), yang mencegah kesalahan sintaksis.
PHP kemudian akan mencoba menjalankan fungsi yang namanya adalah hasil dari ekspresi
[]? ... :printf($X,PHP)
(yang merupakan angka33
).Tetapi fungsi yang menarik itu memiliki peringatan: hanya menerima string (ya!).
Ini menyebabkan a
Fatal error: Function name must be a string
, karena33
aint
.Terima kasih kepada Shieru Asakoto karena telah menyelamatkan saya 1 byte!
sumber
[]
lebih pendek daripada'0'
dan juga dievaluasi secara berbeda dalam JS dan PHP, jadi mungkin -1 byte di sini?[]
kebutuhan untuk digunakan sebagai pengganti'0'
,'\0'
,'\0'=="0"
, dan digunakan bahwa[]
sebelum juga. Tetapi terima kasih telah menemukan pertanyaan ini.Perl 5 dan C, 95 byte
//;
pada dasarnya adalah NOP dalam perl, dan merupakan komentar dalam C.Jadi program C efektif:
Yang mencetak string yang diperlukan, lalu mencoba menjalankan
puts(32)
. Ini adalah perilaku yang secara teknis tidak terdefinisi dalam C, tetapi menyebabkan kesalahan segmentasi pada TIO dan setiap sistem yang saya akses.Program perl memperlakukan seluruh program C sebagai string, menggunakan regex
/T.*n /
untuk mencocokkanThis program errors out in
dan kemudian mencetaknya danperl :P
.die
menyebabkan program macet dengan kesalahanDied at script_name line 2
.Jika Anda tidak suka itu sebagai kesalahan,
1/0
panjangnya sama dan macet denganIllegal division by zero
kesalahan. Saya hanya sukadie
lebih banyak;)Cobalah online! (C)
Cobalah online! (Perl)
sumber
VBScript, JScript, 72 byte
VBScript akan mencetak "kesalahan runtime Microsoft VBScript: Ketik ketidakcocokan: 'y'"
JScript akan mencetak "kesalahan runtime Microsoft JScript: 'y' tidak terdefinisi"
sumber
JavaScript & Python 3,
10591 byteKesalahan oleh
NameError: name 'console' is not defined
dalam Python 3Cobalah online!
... dan oleh
TypeError: console.log(...) is not a function
dalam JavaScript.Cobalah online!
sumber
Java (JDK) / JavaScript (Node.js), 154 byte
Cobalah online! (Jawa)
Cobalah online! (JavaScript)
Output di Jawa:
Output dalam JavaScript (ke stderr):
Ini mengambil keuntungan dari pengetikan JavaScript yang lemah (
1=='1'
) untuk mendeteksi bahasa, dan kata kunci yang sama di Java dan JavaScript (var
,class
), dan konstruktor kesalahan yang serupa (new Error()
) untuk membuat polyglot.sumber
PowerShell v6 dan PowerShell v2, 73 byte
Cobalah online!
Ini akan melempar kesalahan penguraian pada v2 karena
-shl
diperkenalkan di v3. v3 + kemudian akan dapat dengan benar menggeser nilainya sebelum mencoba membaginya dengan 0, dengan mudah melempar kesalahan pembagian-demi-nol. Kedua versi memiliki hashmap $ PSVersionTable yang berisiPSVersion
bidangsumber
C (gcc) di Linux / C (gcc) di Mac (160)
Belum diuji pada Mac; pada dasarnya, John Cook menunjukkan (di blognya ) bahwa POSIX tidak mendefinisikan gamma; Linux menggunakan log fungsi gamma (log (gamma (1)) akan mengembalikan 0 yang akan memicu pengecualian floating point); OSX menggunakan fungsi gamma "benar", (yang secara resmi disebut tgamma per POSIX); ini mengembalikan 1 yang kemudian akan mencapai pernyataan batalkan; Saya mencoba membuatnya melemparkan kesalahan floating point yang berbeda (misalnya sqrt (-1) tapi saya lupa bagaimana membuat kesalahan melempar kesalahan vs hanya mengembalikan nol)
sumber
Perl, Bash (78 byte)
Output dalam Perl:
Output dalam Bash:
(Perhatikan bahwa Bash memang menampilkan
line 4
kesalahan, terlepas dari kenyataan bahwa baris 3 tidak berakhir dengan umpan baris ...)sumber
C dan ECPP, 112 byte
Hangup
,.Illegal instruction
,.sumber
C (gcc) dan Haskell , 135 byte
Cobalah online (С)! Cobalah online (Haskell)!
Hasilnya dicapai dengan menjalin komentar, versi C pada dasarnya adalah ini:
(Kegagalan dicapai dengan menulis sebelum awal string).
Versi Haskell, di sisi lain, mengurangi sebagai berikut:
(Kegagalan dicapai dengan mengambil ekor dari daftar kosong)
sumber