PHP7 + JavaScript, 62 61 58 bytes
¡Esto fue en realidad más desafiante de lo que esperaba! Estoy bastante sorprendido de cuánto dura mi código.
eval(['alert((_=prompt())*_)','echo$argv[1]**.5'][+![]]);
¿Como funciona?
Esto funciona seleccionando el código a ejecutar, desde la matriz.
La detección de PHP y JavaScript se realiza con +![]
.
En PHP, []
(matriz vacía) es un valor falso, mientras que en JavaScript es un valor verdadero (los objetos (excepto null
) siempre son verdaderos, ¡incluso new Boolean(false)
son verdaderos!).
Pero, necesito obtener un valor numérico, así que solo uso a not
( !
) y lo convierto a entero (con el +
).
Ahora, PHP produce el valor 1
, mientras que JavaScript produce 0
.
Colocar el código dentro de una matriz, en esos índices, nos permitirá seleccionar el código correcto para el idioma deseado.
Esto se puede usar como [JS,PHP][+![]]
, para obtener el código del idioma correcto.
En políglotas anteriores, he usado '\0'=="\0"
, que está true
en JavaScript (ya que \0
se analiza como el byte NULL) y false
en PHP ( '\0'
no se analizará como el byte NULL, comparando la cadena literal \0
con el byte NULL).
Estoy feliz de haber logrado reducir este cheque a +!'0'
.
¡Estoy aún más feliz con @rckd , que lo redujo a la versión actual!
A partir de ahí, simplemente eval
es el código requerido.
PHP
PHP se ejecutará echo$argv[1]**.5
(equivalente a echo sqrt($argv[1]);
la raíz cuadrada del número), recibirá el valor del segundo argumento y lo mostrará en la salida estándar.
JavaScript
Se ejecuta JavaScript alert((_=prompt())*_)
, que muestra el número al cuadrado en un alert
.
¡Gracias a @rckd por guardar 1 byte y a @ user59178 por guardar 3 bytes!