PHP7 + JavaScript, 62 61 58 байт
Це було насправді складніше, ніж я очікував! Я дуже здивований, як довго мій код.
eval(['alert((_=prompt())*_)','echo$argv[1]**.5'][+![]]);
Як це працює?
Це працює, вибравши код для запуску з масиву.
Виявлення PHP та JavaScript проводиться за допомогою +![]
.
У PHP []
(порожній масив) - хибне значення, тоді як у JavaScript це truthy значення (об'єкти (крім null
) завжди є truthy, навіть new Boolean(false)
є truthy!).
Але мені потрібно отримати це числове значення, тому я просто використовую not
( !
) і конвертую його в ціле (з символом +
).
Тепер PHP дає значення 1
, тоді як JavaScript поступається 0
.
Розміщення коду всередині масиву, в цих індексах, дозволить нам вибрати правильний код для потрібної мови.
Це можна використовувати як [JS,PHP][+![]]
, щоб отримати код потрібної мови.
У попередніх поліглотах я використовував '\0'=="\0"
, що знаходиться true
в JavaScript (оскільки \0
аналізується як NULL-байт) і false
PHP (значення '\0'
не буде розбиратися як NULL-байт, порівнюючи буквальний рядок \0
з NULL-байтом).
Я щасливий, що мені вдалося скоротити цю перевірку +!'0'
.
Я ще більше радий @rckd , який зменшив його до поточної версії!
З цього eval
моменту це просто необхідний код.
PHP
PHP виконає echo$argv[1]**.5
(еквівалентно echo sqrt($argv[1]);
номеру з квадратним коренем), отримавши значення з 2-го аргументу та відобразивши його у стандартному висновку.
JavaScript
Виконує JavaScript alert((_=prompt())*_)
, який відображає число у квадраті alert
.
Дякуємо @rckd за збереження 1 байта, а @ user59178 за збереження 3 байтів!