PHP7 + JavaScript, 62 61 58 byte
Điều này thực sự khó khăn hơn tôi mong đợi! Tôi khá ngạc nhiên về mã của tôi dài bao nhiêu.
eval(['alert((_=prompt())*_)','echo$argv[1]**.5'][+![]]);
Làm thế nào nó hoạt động?
Điều này hoạt động bằng cách chọn mã để chạy, từ mảng.
Phát hiện PHP và JavaScript được thực hiện với +![]
.
Trong PHP, []
(mảng trống) là một giá trị giả, trong khi trong JavaScript, nó là một giá trị trung thực (các đối tượng (ngoại trừ null
) luôn luôn trung thực, thậm chí new Boolean(false)
là trung thực!).
Nhưng, tôi cần lấy nó thành một giá trị số, vì vậy, tôi chỉ cần sử dụng một not
( !
) và chuyển đổi nó thành số nguyên (với +
).
Bây giờ, PHP mang lại giá trị 1
, trong khi JavaScript mang lại 0
.
Đặt mã bên trong một mảng, tại các chỉ mục đó, sẽ cho phép chúng tôi chọn đúng mã cho ngôn ngữ mong muốn.
Điều này có thể được sử dụng như [JS,PHP][+![]]
, để có được mã của ngôn ngữ phù hợp.
Trên polyglots trước, tôi đã sử dụng '\0'=="\0"
, đó là true
trong JavaScript (kể từ khi \0
được phân tách như NULL-byte) và false
trong PHP (các '\0'
sẽ không được phân tích như NULL-byte, so sánh chuỗi chữ \0
với NULL-byte).
Tôi rất vui vì tôi đã quản lý để giảm kiểm tra này xuống +!'0'
.
Tôi thậm chí còn hạnh phúc hơn về @rckd , đã giảm nó xuống phiên bản hiện tại!
Từ đó trở đi, nó chỉ đơn giản eval
là mã yêu cầu.
PHP
PHP sẽ thực thi echo$argv[1]**.5
(tương đương với echo sqrt($argv[1]);
căn bậc hai số), nhận giá trị từ đối số thứ 2 và hiển thị nó trong đầu ra tiêu chuẩn.
JavaScript
JavaScript thực thi alert((_=prompt())*_)
, hiển thị số bình phương trong một alert
.
Cảm ơn bạn @rckd vì đã lưu 1 byte và @ user59178 vì đã lưu 3 byte!