PHP7 + JavaScript, 62 61 58 байт
Это было на самом деле сложнее, чем я ожидал! Я очень удивлен тем, как долго мой код.
eval(['alert((_=prompt())*_)','echo$argv[1]**.5'][+![]]);
Как это работает?
Это работает путем выбора кода для запуска из массива.
Обнаружение PHP и JavaScript производится с помощью +![]
.
В PHP []
(пустой массив) является ложным значением, в то время как в JavaScript это истинное значение (объекты (кроме null
) всегда являются правдивыми, даже new Boolean(false)
правдивыми!).
Но мне нужно получить его в числовое значение, поэтому я просто использую 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]);
квадратному корню из числа), получит значение из второго аргумента и отобразит его в стандартном выводе.
JavaScript
Выполняется JavaScript alert((_=prompt())*_)
, который отображает квадратное число в alert
.
Спасибо @rckd за сохранение 1 байта и @ user59178 за сохранение 3 байта!