Girişin karesini bir dilde çıkaran çok dilli bir giriş ve diğerinin girişinin karekökünü yapmanız gerekir . Bayt cinsinden en kısa cevap kazanır!
En az 3 ondalık basamağa kadar bir hassasiyetiniz olmalıdır ve girdi daima pozitif bir kayma olacaktır.
Girişin karesini bir dilde çıkaran çok dilli bir giriş ve diğerinin girişinin karekökünü yapmanız gerekir . Bayt cinsinden en kısa cevap kazanır!
En az 3 ondalık basamağa kadar bir hassasiyetiniz olmalıdır ve girdi daima pozitif bir kayma olacaktır.
Yanıtlar:
U
Jolf'ta karekök, MATL'de kar.
Çevrimiçi deneyin! (Matl)
Jolf kodunu dene. Sadece Firefox'ta çalışır.
Her ikisi de 1 bayttır, çünkü MATL ve Jolf, ASCII / genişletilmiş ASCII kod sayfaları kullanır, bu nedenle tüm komutlar 1 bayttır.
#include<math.h>
float f(float n){auto p=.5;return pow(n,2-p*3);}
Orijinal cevap:
#include<math.h>
float f(float n){return pow(n,sizeof('-')-1?2:.5);}
Her iki sürüm için de C üretir n^2ve C ++ üretir sqrt(n).
auto"yığında tahsis" anlamına gelir. Anahtar kelime oldukça kullanışsız çünkü bu zaten bir varsayılandır, bu yüzden C ++ başka bir şey ifade etmeyi reddetti. Bununla birlikte, C'de, türü hakkında herhangi bir görüş ifade etmemektedir p(bu bir saklama sınıfıdır, bir tür değildir), bu nedenle intvarsayılan olarak sayılır (bu varsayılan intdavranış davranışı önerilmemektedir ve bu nedenle büyük olasılıkla mevcuttur. C'nin seleflerinden bazıları hiç veri türüne sahip değildi, ancak derleyiciler hala anlıyorlar). Ve tabii ki, (int)0.50'dır
n^2.
lambda n:n**(1/2or 2)
Python 2.x üretir n^2, Python 3.x üretir sqrt(n).
@Dennis sayesinde 2 bayt kaydedildi!
or?
/tamsayı bölme ( 1/2==0) işlevini kullanır . Py3'te kayan nokta bölünmesi yapar ( 1/2==0.5). Falsey 0.
*.
2sable kareyi hesaplar. Çevrimiçi deneyin!
Jelly karekökünü hesaplar. Çevrimiçi deneyin!
* Read the input twice and compute the product of both copies.
This pushes the square of the input.
. Unrecognized token (ignored).
. Numeric literal; yield 0.5.
* Raise the input to the power 0.5.
This yields the square root.
#/*
lambda n:n**.5;'''*/
float a(i){return i*i;}//'''
Python: Çevrimiçi deneyin!
Poliglot'a yorumlar kullanarak çalışır. Gerisi oldukça açıklayıcı.
C kullanarak ilk kez!
stdio.hBu davaya dahil edilmene gerek var mı?
Jöle'deki karekökü Ohm cinsinden kareyi çıkarır.
Ohm ve Jelly farklı tek bayt kod sayfaları kullanır, böylece program her kodlamada farklı görünecektir.
Programın xxd hexdump:
00000000: fd7f 0a ...
Jelly'in kod sayfasını kullanarak, şöyle görünür:
’
½
Jelly, en alt çizgiyi ana link olarak alır ve özellikle belirtilmedikçe diğer linkleri yok sayar. Yani burada sadece karekök ( ½) yapar ve örtük olarak çıkarır.
Ohm'un kod sayfasını (CP437) kullanarak, şöyle görünür:
²⌂◙
²kare işlevidir ⌂ve ◙her ikisi de tanımsızdır, bu nedenle program yalnızca örtülü okuma girişini kareler ve örtük olarak çıktılar.
½baytta almak için kullanırsanız , ²harita neye yarar ? Hala görmezden gelinen bir şey mi? Ve Ohm için tersi? O zaman 2 bayt gibi görünüyor.
²kod noktası 5’te olduğunu varsayalım . Jelly’deki kod noktası 5 %, hiçbir şey yapmaz ve bu yüzden ilk satırın ne olduğu önemli değildir. Jelly’de ½27’de olduğunu ve Ohm’da kod noktası 27’nin olduğunu Jve hiçbir şey yapmadığını düşünün, bu nedenle ikinci satırın ne olduğu önemli değil. Bu nedenle, bir dosyanız varsa 00000101<newline>00011011, 3 bayt. Sanırım tek sorun, yeni satır kod sayfalarında farklı bir konumdaysa.
float f(float n){return n//*
/sqrt(n)//*/1*n
;}
-lmBayrak gerektirir (+3)
C89 üretir n^2, C99 üretir sqrt(n). C89'da test etmek için, çevrimiçi deneyin!
C89’u bu sqrtsürümün yerine getirmesi daha az kod almalı, ancak sqrtişlevi ints ile örtük olarak bildirmekte ısrar ediyor , bu yüzden yönetebildiğim en iyisi bu.
@(x)x^(2-3*any(version>60)/2)
Bu, Octave'daki kareyi ve MATLAB'daki kare kökü çıkarır.
Açıklama:
Sözdizimi elbette MATLAB ve Octave'de aynıdır (en azından bu küçük kod parçası için).
Bu anonim bir işlev oluşturur:
@(x) % Take x as input
x^( ) % Raise x to the power of ...
version % Returns the version number
% 4.2.0 in Octave,
% '9.2.0.538062 (R2017a)' in MATLAB
version>60 % 'R' is larger than 60. All others are smaller
3*any(version>60)/2 % Checks if there is an 'R' and multiplies it by 1.5 if it is.
2-3*any(version>60) % 2-1.5*(is there an 'R')
sqr(x)
Temelde karekök, Delphi'de karekök.
İfadeyi incelemek ve böylece herhangi bir çıktı gereksinimini karşılamak için bir hata ayıklayıcı kullanabilirsiniz!
x? Bir değere kaydedildiğini varsayamazsınız. Ancak, aslında onu kaldırabilir (x)ve bir işlev döndüren olarak etiketleyebilirsiniz.
Aşağıdaki baytlar programı oluşturur:
FD B9 74
05AB1E, kare kökü, Ateş topu karelerini hesaplar.
Açıklama (05AB1E - ý¹t):
ý Pushes an empty string to the stack (not entirely sure why)
¹ Push first input
t Square root
Açıklama (Ateş topu - ²╣t):
² Square input
╣ Unassigned
t Unassigned
Bazen, eksik bir dilin olması için yardımcı olur;)
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 1verirken, 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 \0ve 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 \0BOŞ 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 evalgerekli kod.
PHP
PHP , 2. argümandan değeri alarak (sayıya kareköke echo$argv[1]**.5eş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 !
echo$argv[1]**.5yerine 3 bayt kaydedebilirsinizecho sqrt($argv[1])
nqƓ½
nq # Ignored by Jelly, push n**2 in 05AB1E then quit.
Ɠ½ # Ignored by 05AB1E due to quit, push sqroot of input in Jelly.
Başkası iyi bir noktaya değindi, sanırım UTF-8 karakterleri aynı işlemi kod sayfalarında paylaşmıyorlar çünkü her biri kodlamak için teknik olarak 2 bayt. Ancak, buna hex dökümü açısından bakıldığında:
6e 71 93 0a
05AB1E’nin CP1252’inde bu kodlamada:
nq“\n
Yani yine de kare çıkarıp çıkacak, gerisini görmezden gelecek. Bu bayt Jelly'in kod sayfasını kullanarak kodlandığında:
nqƓ½
Asıl amaçlanan kod hangisidir, yürütüldüğünde, girişin alınması ve sqrt alınması istenen sonucu verir.
Ɠve ½kodlanacak iki bayt gerektirir. Bununla birlikte, bayt dizisi 6e 71 93 0a( nqƓ½Jelly nq“\niçin, CP-1252 için) her iki dilde de çalışmalıdır.
½her iki kod sayfasında da tek bir sayı olarak sayılmasına izin vermiyor, çünkü sanırım farklı işlemler bunlar? Tüm kod sayfası olayında hala belirsizim.
6e 71 93 0ayani 4 bayt iddia hakkında "teorik" yok. Sadece 4 bayt talep et. Öyle olur ki, 05AB1E'nin standart kodlamasında istediğinizi yapan bir şey okurken, Jelly'in standart kodlamasında istediğinizi yapan başka bir şey okur. Bir kenara, sadece 2 kodlamanın aynı karakteri kodlayabilmesi, aynı karakterin ikisinde de aynı olacağı anlamına gelmez. Sadece zaten paylaşılmış bir arama tablosu ile sayısal bir şifre gibi kodlamalar düşünün ve umarım size iyi bir başlangıç zihinsel model verecek.
ld_*GX^!
CJam'deki kareyi hesaplar ( Çevrimiçi deneyin! ) Ve MATL'deki kare kökü ( Çevrimiçi deneyin! ).
ld e# Read input line and interpret as a double
_ e# Duplicate
* e# Multiply. Pops the input number twice, pushes its square
G e# Push 16
X e# Push 1
^ e# Bitwise XOR. Pops 16 and 1, and pushes 17
! e# Negate. Pops 17, pushes 0
e# Implicitly display. This prints the squared input with decimals,
e# immediately followed by the 0 coming from the negate operation
e# Even if the square of the input number is an integer, say 5,
e# it is displayed as 5.0, so including an extra 0 always gives a
e# correct result
l % Push 1. This is a number or equivalently a 1×1 array
d % Consecutive differences. Pops 1, pushes [] (empty array)
_ % Negate (element-wise). This leaves [] as is
* % Implicitly input a number and push it. Multiply (element-wise):
% pops [] and the input number, pushes []
G % Push input number again
X^ % Square root. Pops number, pushes its square root
! % Transpose. For a number (1×1 array) this does nothing
% Implicitly display. The stack contains [] and the result; but
% [] is not displayed at all
( """ )
fsqrt
\ """);lambda n:n*n
Çevrimiçi deneyin: Python 2 (kare) | İleri (sqrt)
Bu Python'daki isimsiz bir işlevi ve Forth'daki yerleşik bir işlevi değerlendirir fsqrt. Python lambda önüne fkoyarak daha 2 byte için adlandırılmış bir işleve sahip olabilir f=.
Forth programı, Forth'da bilimsel gösterimle yazılması gereken değişken bir anlama sahip. 3 ondalık basamağa kesilen Pi ( 3.141) şöyle yazılır:
3141e-3
f=a=>eval(`try{eval("a**2")}catch(e){Math.sqrt(a)}`)
ES7'deki girişin karesini ve ES6'daki kare kökünü döndürür. ES6'yı destekleyen ancak ES7'yi desteklemeyen eski bir tarayıcınız yoksa, test etmek oldukça zor.
f=a=>eval(`try{eval("a**2")}catch(e){Math.sqrt(a)}`)
console.log(f(4));
ECHO"$argv[1]"**2;#];rdmq
PHP'deki kareyi ve CJam'daki karekökü hesaplar. -rPHP kullanarak çalıştırılması gerekiyor .
İlk komut satırı argümanını ( $argv[1]) güç 2'ye yükseltir ve çıkarır . Burada $argv[1], üsteli yapmadan önce bir sayıya basılan bir dizgede satır içi değişken olarak belirtilir. Bunun nedeni v, CJam’de geçerli bir talimat değildir ve ayrıştırma sırasında hata yapmasına neden olur, ancak bir dizeye koymak herhangi bir soruna neden olmaz.
# bir yorum başlatır, bundan sonra her şey göz ardı edilir.
Kodun ilk kısmı, ECHO"$argv[1]"**2;#bir sürü değeri zorlar ve hepsi tamamen yararsız olan bir dizi işlem yapar. Tek önemli şey, herhangi bir hataya yol açmamalarıdır, çünkü hemen sonra, ];tüm yığını bir diziye sarar ve sonra onu atar.
Ondan sonra input ( rd) ' dan bir double okur ve karekökünü ( mq) alır ve örtük olarak çıkarır.
;float f(float x){return sqrt(x);}char*
F="_this^2";
Bir OFP komut dosyasında, satırın başındaki bir noktalı virgül, bu satırı yorum yapar, C ise ek noktalı virgülle ilgilenmez.
C:
OFP betik dili:
init.sqsGörev klasöründeki gibi kaydedin, sonra arayın hint format["%1", 2 call F].
2D dilleri!
/&:*.@
>in:o#p;
/&:*.@
/ divide top two (no-op)
& read decimal input
: duplicate
* square
. output
@ terminate
/ mirror up, then right
>in:o#p;
i read line of input
n cast to number
:o# square root
p print
; terminate
Dostum, Jelly link yapısı ile gerçekten eğleniyorum.
:*n;
½
> <> 'Daki kareyi ve Jelly' deki karekökü hesaplar .
-vbence, bu vakayı ele alan bir meta sorgulamada [en çok oy alan cevap [( codegolf.meta.stackexchange.com/a/11431/44874 ) ile uyumludur. ><>Tercüman buna ihtiyacı -vve bu mümkün olan en basit çağırma bunun olduğunu.
0//1or exec("function=lambda a:(lambda b:a);x=0")
y=2//2/2
f=(function(x)(x**y))//1 or(lambda x:x**y)
JS'de kare kökü, Python'da kare.
Firefox'ta çalışır (FF 52'de test edilmiştir) ve (function(x) x)(42) === 42geçerli bir sözdizimi gerektirir . Ayrıca **operatör için ES7 gerektirir .
x=>x**yBunun yerine kullanmak mümkün mü ? Yoksa Python buna boğulacak mı?
functionbir anahtar kelime değil, geçerli bir tanımlayıcı var. Bu yüzden sadece ona bir noop işlevi atadım ( execifadenin içinde ).
Güncelleme: Yenilgiyi kabul etmeliyim. Digital Trauma'nın bas / sh cevabı bundan çok daha zarif.
bc -l<<<"sqrt($1^(($(kill -l|wc -l)*3-3)/7+1))"
bash üretir n^2, sh üretir sqrt(n).
bcsadece sqrthesaplanabilmesi için gereklidir . Davranıştaki fark bash ve sh arasındadır.
Tamam, teknik olarak ben kullanıyorum "sh" hala bash, ama "POSIX" modunda bash ( bash için takma ad olan sistemler /bin/shyerine çağırırsanız olur). Sisteminizde durum buysa, şunlarla test edebilirsiniz:/bin/bash/bin/sh
/bin/bash prog.sh 4
/bin/sh prog.sh 4
Bu, burada açıklanan farklılıklardan birine dayanmaktadır: https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html
kill -l(olası sinyalleri listeler; hiçbir şeyi değiştirmez) bashve sh. Burada bulabileceğiniz birçok farklılıktan biri: gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html
input a
?a^2'^.25
In QBasic , bu sayı karesi bir sayı alır ve baskılar. Kodun geri kalanı yok sayılır, çünkü QBasic bunu bir yorum olarak görüyor ( ').
QBIC aynı giriş deyimini kullanır. Daha sonra aynı sayıyı kareye basmaya başladı, sonra çeyrekliğin gücüne yükseldi ve onu iki kez etkili bir şekilde kökledi. Bunun nedeni 'bir hazır bilgi kodu olarak görülüyor: QBIC tarafından ayrıştırılmayan Saf QBasic kodu.
EDIT: İşlemleri tersine çevirmek için kısa bayt.
RTa
²
Jelly kodun altında çalışmaya başlar ('ana bağlantısı') ve daha yüksek bir şeye ihtiyaç duyup duymadığını görür: komutun karesini alması için görür ve dolaylı olarak giriş ve çıkışla ilgilenir.
Pip, (cmd satırından dolaylı olarak okunan) karesini kareler ve üstü kapalı olarak basar ve bunu basar. Alt satır yoksayılır.
PRTaVS.
Wolfram Dilinde bir sayının karesini alın ve PHP'de karekökü alın;
n^2
echo sqrt(_GET["n"]);
İlk satır Wolfram Dilidir. Öncelikle, Wolfram Alpha’daki arama çubuğunda n'yi değiştiren sizsiniz, böylece kod da girdi. Sonra enter tuşuna basıldığında cevabı üretecektir.
n^2
İkinci satır PHP'dir, adres çubuğuna girilecek olan n'nin karekökünü alır (örneğin, 213 n değerinde ppcg.php.net?n=213)
echo sqrt($_GET["n"]);
p=^4 :
bc<<<"sqrt($1)$p"
Mac'te, shbir bashPosix modunda çalışırken, ve gereği bu durumda https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html :
POSIX özel yerleşiklerinden önceki atama ifadeleri, tamamlandıktan sonra kabuk ortamında kalır.
Bu nedenle sh, değişken çalıştırıldıktan sonra bir pdeğere sahiptir , ancak değişken için çalıştırma sırasında yalnızca bu değer vardır ve daha sonra boştur.^4:bashp:
Hala gerçekten bashörtü altında kalan, sapmalar gibi bazı bazitler <<<hem bash hem de sh kılıfları için çalışmaktadır.
Ubuntu'da 16.01, sapkınlık yapmayan shbir bağlantıdır . Yani bunun yerine biz var:dash<<<
p=^4 :
echo "sqrt($1)$p"|bc
Bu program girişi Kardinalde kareler ve Octave'da karekök alır
%:=t.
disp(sqrt(input("")))
% Octa, tek satırlı yorumdur, bu yüzden sadece girdi elde eder ve kare kökü basar
disp(sqrt(input("")))
Böylece Kardinal program 0 hatayla bölünmüyor ve ölüyor, program
%:=t.
her iki program tarafından da göz ardı edilen bir boşlukla değiştirildi
Program% 'den başlar.
Girdi alır ve değeri aktif olarak kaydeder:
Aktif olmayan aktif değere eşit olur. =
Aktif olan aktif değil t ile çarpılır.
Sonunda aktif değeri verir.
<body onload=alert(<?=$x*$x.')>'.sqrt($x)?>
Giriş şöyle olur:
<?php $x = 10; ?>
Kendini açıklayan bir tür, ama kurallara uyuyor mu? İlk kodum golf tho :-)
alert(<?=$x*$x.')>'.sqrt($x)?)
Rekabetçi değil çünkü:
+ve ⓟCGL teknik olarak geçerli bir dildir. x=>x**2
//-₂
Basit: ilk argüman karesini döndüren isimsiz bir ok işlevi. Adsız dil kodu yorumlandı.
Bölünemez boşluk ilk satırdan önce bir açıklama işlevi görür. Bunlar /ameliyat dışı. -İkinci satır, vasıtalarının varsayılan sonra giriş saklanır -1, olarak ayarlar Bu 0'dır geçerli yığın numarasını, azaltma. ₂Giriş yerleştirildiği anda kendi kare kökü ile halihazırda istifin ilk öğenin yerini alır. Varsayılan olarak, geçerli yığın, girişin karekökü çıkarılarak çıkarılır.