PHP7 + JavaScript, 62 61 58 bajtów
To było naprawdę trudniejsze niż się spodziewałem! Jestem dość zaskoczony, jak długi jest mój kod.
eval(['alert((_=prompt())*_)','echo$argv[1]**.5'][+![]]);
Jak to działa?
Działa to poprzez wybranie z tablicy kodu do uruchomienia.
Wykrywanie PHP i JavaScript odbywa się za pomocą +![]
.
W PHP []
(pusta tablica) jest wartością fałszywą, podczas gdy w JavaScript jest wartością prawdziwą (obiekty (oprócz null
) są zawsze prawdziwe, a nawet new Boolean(false)
prawdziwe!).
Ale muszę uzyskać wartość liczbową, więc po prostu używam not
( !
) i przekonwertowałem ją na liczbę całkowitą (z +
).
Teraz PHP daje wartość 1
, podczas gdy JavaScript daje 0
.
Umieszczenie kodu w tablicy, przy tych indeksach, pozwoli nam wybrać odpowiedni kod dla pożądanego języka.
Można tego użyć jako [JS,PHP][+![]]
, aby uzyskać kod odpowiedniego języka.
W poprzednich poliglotach użyłem '\0'=="\0"
, który jest true
w JavaScript (ponieważ \0
jest analizowany jako bajt NULL) i false
w PHP ( '\0'
nie będzie analizowany jako bajt NULL, porównując literał ciąg \0
z bajtem NULL).
Cieszę się, że udało mi się zredukować tę kontrolę do +!'0'
.
Jeszcze bardziej cieszę się z @rckd , który zredukował go do obecnej wersji!
Od tego momentu eval
jest to po prostu wymagany kod.
PHP
PHP wykona echo$argv[1]**.5
(ekwiwalent echo sqrt($argv[1]);
, pierwiastek kwadratowy z liczby), otrzymując wartość z drugiego argumentu i wyświetli ją na standardowym wyjściu.
JavaScript
Wykonuje się JavaScript alert((_=prompt())*_)
, który wyświetla kwadrat w liczbie alert
.
Dziękujemy @rckd za zapisanie 1 bajtu i @ user59178 za zapisanie 3 bajtów!