PHP7 + JavaScript, 62 61 58 bayt
Bu aslında beklediğimden daha zor oldu! Kodumun ne kadar olduğuna şaşırdım.
eval(['alert((_=prompt())*_)','echo$argv[1]**.5'][+![]]);
O nasıl çalışır?
Bu, diziden çalıştırılacak kodu seçerek çalışır.
PHP ve JavaScript algılama ile yapılır +![]
.
PHP'de []
(boş dizi) sahte bir değerdir, JavaScript'te ise bir truthy değeridir (nesneler (hariç null
) her zaman truthy, hatta new Boolean(false)
truthy!).
Ancak, onu sayısal bir değere almam gerekiyor, bu yüzden, sadece not
(( !
) işaretini kullanıp tam sayıya (ile +
) dönüştürüyorum .
Şimdi, PHP değeri 1
verirken, JavaScript verimi verir 0
.
Kodu bir dizinin içine, bu dizinlere yerleştirmek, istenen dil için doğru kodu seçmemize izin verir.
Bu [JS,PHP][+![]]
, doğru dilin kodunu almak için kullanılabilir .
Önceki Polyglots, ben kullandım '\0'=="\0"
olan true
(çünkü JavaScript \0
ve BOŞ bayt olarak ayrıştırılır) false
(PHP'de '\0'
literal dize karşılaştırarak, BOŞ-byte olarak ayrıştırılır olmayacak \0
BOŞ bayt ile).
Bu çeki düşürmeyi başardığım için mutluyum +!'0'
. @Rckd ile
ilgili daha mutluyum , bu da onu geçerli sürüme indirdi!
O andan itibaren, sadece eval
gerekli kod.
PHP
PHP , 2. argümandan değeri alarak (sayıya kareköke echo$argv[1]**.5
eşdeğer) yürütür echo sqrt($argv[1]);
ve standart çıktıda görüntüler.
JavaScript
alert((_=prompt())*_)
Bir içindeki kare sayısını gösteren JavaScript çalıştırılır alert
.
1 byte tasarruf için @rckd ve 3 byte tasarruf için @ user59178 için teşekkür ederiz !