PHP7 + JavaScript, 62 61 58 byte
Ini sebenarnya lebih menantang dari yang saya harapkan! Saya cukup terkejut dengan berapa lama kode saya.
eval(['alert((_=prompt())*_)','echo$argv[1]**.5'][+![]]);
Bagaimana cara kerjanya?
Ini berfungsi dengan memilih kode yang akan dijalankan, dari array.
Deteksi PHP dan JavaScript dibuat dengan +![]
.
Dalam PHP, []
(array kosong) adalah nilai falsy, sedangkan dalam JavaScript adalah nilai kebenaran (objek (kecuali null
) selalu benar, bahkan new Boolean(false)
benar!).
Tapi, saya harus mendapatkannya ke nilai numerik, jadi, saya hanya menggunakan a not
( !
) dan mengubahnya menjadi integer (dengan +
).
Sekarang, PHP menghasilkan nilainya 1
, sedangkan JavaScript menghasilkan 0
.
Menempatkan kode di dalam array, pada indeks itu, akan memungkinkan kita untuk memilih kode yang tepat untuk bahasa yang diinginkan.
Ini dapat digunakan sebagai [JS,PHP][+![]]
, untuk mendapatkan kode bahasa yang tepat.
Pada polyglots sebelumnya, saya telah menggunakan '\0'=="\0"
, yang ada true
di JavaScript (karena di \0
-parsing sebagai NULL-byte) dan false
di PHP (yang '\0'
tidak akan di-parsing sebagai NULL-byte, membandingkan string literal \0
dengan NULL-byte).
Saya senang saya berhasil mengurangi cek ini +!'0'
.
Saya bahkan lebih senang tentang @rckd , yang mengurangi ke versi saat ini!
Dari sana, itu hanya eval
kode yang diperlukan.
PHP
PHP akan mengeksekusi echo$argv[1]**.5
(setara dengan echo sqrt($argv[1]);
, akar kuadrat angka), menerima nilai dari argumen ke-2 dan menampilkannya dalam output standar.
JavaScript
JavaScript dijalankan alert((_=prompt())*_)
, yang menampilkan angka kuadrat dalam alert
.
Terima kasih kepada @rckd karena telah menghemat 1 byte, dan @ user59178 telah menghemat 3 byte!