PHP7 + JavaScript, 62 61 58 Bytes
Das war tatsächlich schwieriger als ich erwartet hatte! Ich bin ziemlich überrascht, wie lang mein Code ist.
eval(['alert((_=prompt())*_)','echo$argv[1]**.5'][+![]]);
Wie funktioniert es?
Dies funktioniert, indem Sie den auszuführenden Code aus dem Array auswählen.
Die Erkennung von PHP und JavaScript erfolgt mit +![]
.
In PHP ist []
(leeres Array) ein falscher Wert, während es in JavaScript ein wahrer Wert ist (Objekte (außer null
) sind immer wahr, sogar new Boolean(false)
wahr!).
Aber ich muss es auf einen numerischen Wert bringen, also verwende ich einfach ein not
( !
) und konvertiere es in eine Ganzzahl (mit dem +
).
Jetzt liefert PHP den Wert 1
, während JavaScript liefert 0
.
Durch Platzieren des Codes in einem Array an diesen Indizes können wir den richtigen Code für die gewünschte Sprache auswählen.
Dies kann verwendet werden [JS,PHP][+![]]
, um den Code der richtigen Sprache zu erhalten.
Bei früheren Polyglotten habe ich verwendet '\0'=="\0"
, was true
in JavaScript (da \0
als NULL-Byte analysiert wird) und false
in PHP (die '\0'
nicht als NULL-Byte analysiert werden, um die Zeichenkette zu vergleichen \0
mit dem NULL-Byte).
Ich bin froh, dass ich es geschafft habe, diesen Scheck auf zu reduzieren +!'0'
.
Umso mehr freue ich mich über @rckd , das es auf die aktuelle Version reduziert hat!
Von da an ist es einfach eval
der Code, der benötigt wird.
PHP
PHP wird ausgeführt echo$argv[1]**.5
(entspricht der echo sqrt($argv[1]);
Quadratwurzel der Zahl), erhält den Wert aus dem 2. Argument und zeigt ihn in der Standardausgabe an.
JavaScript
Es wird JavaScript ausgeführt alert((_=prompt())*_)
, das die quadrierte Zahl in einem anzeigt alert
.
Vielen Dank an @rckd für das Speichern von 1 Byte und @ user59178 für das Speichern von 3 Byte!