PHP7 + JavaScript, 62 61 58 bytes
Isso foi realmente mais desafiador do que eu esperava! Estou bastante surpreso com a duração do meu código.
eval(['alert((_=prompt())*_)','echo$argv[1]**.5'][+![]]);
Como funciona?
Isso funciona selecionando o código a ser executado, a partir da matriz.
A detecção de PHP e JavaScript é feita com +![]
.
No PHP, []
(matriz vazia) é um valor falso, enquanto no JavaScript é um valor verdadeiro (objetos (exceto null
) são sempre verdadeiros, até mesmo new Boolean(false)
é verdade!).
Mas, eu preciso obtê-lo com um valor numérico; portanto, basta usar a not
( !
) e convertê-lo em inteiro (com o +
).
Agora, o PHP gera o valor 1
, enquanto o JavaScript produz 0
.
A colocação do código dentro de uma matriz, nesses índices, permitirá selecionar o código correto para o idioma desejado.
Isso pode ser usado como [JS,PHP][+![]]
, para obter o código do idioma correto.
Em poliglotas anteriores, eu usei '\0'=="\0"
, que é true
em JavaScript (desde \0
é analisado como a NULL-byte) e false
em PHP (a '\0'
não ser analisado como a NULL-byte, comparando a string literal \0
com o NULL-byte).
Estou feliz por ter conseguido reduzir essa verificação para +!'0'
.
Estou ainda mais feliz com o @rckd , que o reduziu à versão atual!
A partir daí, é simplesmente eval
o código necessário.
PHP
O PHP executará echo$argv[1]**.5
(equivalente a echo sqrt($argv[1]);
raiz quadrada do número), recebendo o valor do segundo argumento e exibindo-o na saída padrão.
Javascript
O JavaScript é executado alert((_=prompt())*_)
, o que exibe o número ao quadrado em um alert
.
Obrigado a @rckd por salvar 1 byte e a @ user59178 por salvar 3 bytes!