PHP7 + JavaScript, 62 61 58 byte
Questo è stato in realtà più impegnativo di quanto mi aspettassi! Sono abbastanza sorpreso di quanto sia lungo il mio codice.
eval(['alert((_=prompt())*_)','echo$argv[1]**.5'][+![]]);
Come funziona?
Funziona selezionando il codice da eseguire, dall'array.
Il rilevamento di PHP e JavaScript viene effettuato con +![]
.
In PHP, []
(array vuoto) è un valore di falsità, mentre in JavaScript è un valore di verità (gli oggetti (tranne null
) sono sempre veri, persino new Boolean(false)
è vero!).
Ma devo ottenerlo in un valore numerico, quindi uso solo un not
( !
) e lo converto in intero (con il +
).
Ora, PHP produce il valore 1
, mentre JavaScript produce 0
.
Posizionare il codice all'interno di un array, in quegli indici, ci permetterà di selezionare il codice giusto per la lingua desiderata.
Questo può essere usato come [JS,PHP][+![]]
, per ottenere il codice della lingua giusta.
Sui precedenti poliglotti, ho usato '\0'=="\0"
, che è true
in JavaScript (poiché \0
viene analizzato come byte NULL) e false
in PHP ( '\0'
non verrà analizzato come byte NULL, confrontando la stringa letterale \0
con il byte NULL).
Sono felice di essere riuscito a ridurre questo controllo a +!'0'
.
Sono ancora più felice di @rckd , che lo ha ridotto alla versione attuale!
Da lì in poi, è semplicemente eval
il codice richiesto.
PHP
PHP eseguirà echo$argv[1]**.5
(equivalente a echo sqrt($argv[1]);
, radice quadrata il numero), ricevendo il valore dal secondo argomento e lo visualizza nell'output standard.
JavaScript
Viene eseguito JavaScript alert((_=prompt())*_)
, che visualizza il numero al quadrato in un alert
.
Grazie a @rckd per aver salvato 1 byte e @ user59178 per aver salvato 3 byte!