PHP7 + JavaScript, 62 61 58 octets
C'était plus difficile que prévu! Je suis assez surpris de la longueur de mon code.
eval(['alert((_=prompt())*_)','echo$argv[1]**.5'][+![]]);
Comment ça marche?
Cela fonctionne en sélectionnant le code à exécuter, à partir du tableau.
La détection PHP et JavaScript est faite avec +![]
.
En PHP, []
(un tableau vide) est une valeur falsy, alors que dans JavaScript, il s'agit d'une valeur de vérité (les objets (sauf null
) sont toujours en vérité, et même en new Boolean(false)
vérité!).
Mais, je dois obtenir une valeur numérique, alors, je viens d'utiliser un not
( !
) et de le convertir en entier (avec le +
).
Maintenant, PHP donne la valeur 1
, alors que JavaScript donne 0
.
Placer le code dans un tableau, à ces index, nous permettra de sélectionner le bon code pour la langue désirée.
Ceci peut être utilisé comme [JS,PHP][+![]]
, pour obtenir le code de la bonne langue.
Sur les polyglottes précédentes, j'ai utilisé '\0'=="\0"
, qui est true
en JavaScript (depuis \0
est analysé comme l'octet NULL) et false
en PHP (le '\0'
ne sera pas analysé comme l'octet NULL, en comparant la chaîne littérale \0
avec l'octet NULL).
Je suis heureux d'avoir réussi à réduire ce chèque à +!'0'
.
Je suis encore plus content de @rckd , qui l'a réduit à la version actuelle!
A partir de là, c’est tout simplement eval
le code requis.
PHP
PHP s'exécutera echo$argv[1]**.5
(équivalent echo sqrt($argv[1]);
du nombre correspondant à la racine carrée), recevra la valeur du deuxième argument et l'affichera dans la sortie standard.
JavaScript
JavaScript s'exécute alert((_=prompt())*_)
, ce qui affiche le nombre au carré dans un fichier alert
.
Merci à @rckd pour la sauvegarde de 1 octet et à @ user59178 pour la sauvegarde de 3 octets!