Pisagor Teoremini uygulamak için en kısa yöntem


14

Pisagor teoremini kim sevmez a² + b² = c²? A ve b değerini alan ve "Bu sağ üçgenin hipotenüsü" + c olan herhangi bir dilde yapabileceğiniz en kısa yöntemi yazın. C'yi yalnızca üç ondalık basamağa kadar tutun.


3
Bu bir programlama bulmacası olarak nitelendiriliyor mu?
DavidC

1
@DavidCarraher Sorun kendi başına bir programlama bulmacası değil. Ancak amaç, bunun için bir çözüm golf oynamak olduğundan, o zaman gerçekten bir programlama bulmacasıdır.
Victor Stafusa

3
karakter kısa
Vik P

4
code-golfEtiketi açıkça diyor "Kod golf en az belirli bir sorunu çözmek için bir yarışma bayt kaynak kodunun." Bkz. Puanlama golf kodu (baytlara karşı karakterler) .
res

1
@res: Sabit :-p
Timwi

Yanıtlar:


15

APL (54)

'The hypotenuse of this right triangle is',3⍕.5*⍨+/⎕*2

Ölçek:

      'The hypotenuse of this right triangle is',3⍕.5*⍨+/⎕*2
⎕:
      9 10
The hypotenuse of this right triangle is 13.454

Açıklama:

  • ⎕*2: girişteki değerleri ikinci güce yükseltir
  • +/: toplamı al
  • .5*⍨: sonucu 0.5. güce yükseltin
  • 3⍕: 3 ondalık basamağa yuvarlayın

Bu rakipsiz
Cruncher

@Cruncher: Dizgiyi kodlamaya çalıştım ama kod çözme rutinini yeterince küçük alamadım.
marinus

Güvercin deliği prensibine göre, dizeyi sıkıştırmaya çalışırken gerçekten zor bir zamanınız (belki de imkansız. En azından bazı dizeler için imkansız olmalı) olacağını düşünüyorum. Dizenin mantıksal bir deseni varsa, ancak durum böyle görünmüyor olabilir. Şimdiye kadar yaptığınız girişimleri görmek istiyorum
Cruncher

7
Bir karakteri kaydetmek için "hipotenüs" yazımını düzeltin.
Tim S.

1
@Cruncher: Aslında, Sclipting'de yendim ...
Timwi

11

TI-BASIC, 76 55 53 52 bayt

Input :Disp "THE HYPOTENUSE OF THIS RIGHT TRIANGLE IS
Fix 3:R▶Pr(X,Y

Hayır, kapanış parantezine gerek yoktur. Ayrıca, bu APL cevabından daha az bayt :)


1
Olabilir R▶Pr(A,B.
lirtosiast

3
Bir öneriyi uygulamak için 2 yıl, lol.
mbomb007

Büyüklüğe mahkum sanırım. Ve sadece APL'yi yenmek için iki bayt daha tıraş ettim!
Timtech

-1 bayt:Fix 3:R►Pr(X,Y
Khuldraeseth na'Barya

İstemek Inputiçin kullanmak Xve Ybiraz komik. Buna izin verirsek, daha PolarGCönce ayarlamaya da izin vermeliyiz Input, böylece hipotenüsün uzunluğu bir bayt tarafından verilir Rmi? Kuşkusuz, imleci hareket ettirdiğimizde ve PolarGCdeğerleriyle artık görüntülenmiyor , ancak yine de uygun değişkenlerde saklanıyorlar . (O zaman asla kullanmazdık, ama önemli olan düşünce.)XY
Misha Lavrov

9

Python 2.7-76 Karakterler

print'The hypotenuse of this right triangle is %.3f'%abs(input()+1j*input())

açıklama

| a + ib | = √ (a 2 + b 2 ) = c

==> a 2 + b 2 = c 2

Hipotenüs üzerinde PJ

Öğretmen: "Bana hipotenüs nedir?

LJ: "Hipotenüs, kolay bir soru. Dün gece yüksek profilli bir parti varsa ve bunu gazetede okuduysan, buna Yüksek Parti Haberleri denir"


8

Kaydırma , 46 karakter

글坼各갠方終加감半方갾밈乘增貶껠矽녆둥긆둹댆뭴뉖멵댶넠닶눠덆둩댲걲늖덨덂건댦땡닦덬뉒걩댲밀⓶

Girdinin boşlukla ayrılmış iki sayı (kesirli olabilir!) Olmasını bekler.

Birkaç elverişsiz numara kullanmak zorunda kalmasına rağmen bu APL'den daha kısadır.

açıklama

글坼 | split at space
各 | for each...
  갠方 | to the power of two
終
加 | add
감半方 | to the power of one half
갾밈乘 | multiply by 1000
增貶 | increment, then decrement (kludge for rounding)
껠矽 | insert '.' at 4th-last character position
녆둥긆둹댆뭴뉖멵댶넠닶눠덆둩댲걲늖덨덂건댦땡닦덬뉒걩댲밀⓶ | "The hypotenuse..."

2
unicode bunu 92 bayt gibi yapmıyor mu?
Cruncher

@Cruncher Dün soru yorumlarında sordum, önemli olan karakter sayısı, bayt sayısı değil.
Joachim Isaksson

3

dc 54

Teğet APL yanıtının puanı!

2^r2^+3kv[The hypotenuse of this right triangle is ]Pp

Ölçek:

$ dc
3 4
2^r2^+3kv[The hypotenuse of this right triangle is ]Pp
The hypotenuse of this right triangle is 5.000

benim için gerçekten işe yaramıyor. dc -e '2^r2^+3kv[The hypotenuse of this right triangle is ]Pp'herhangi bir girdi beklemez, "dc: stack empty"3 kez yazdırır ve sonra "Bu sağ üçgenin hipotenüsü 2.000'dir".
Tomas

1
@Tomas bir tür bir işlev; Testte gösterdiğim gibi parametreleri ilk önce yığına koymanız gerekir, ya da yolunuzu çağırmak istiyorsanız, dc -e '3 4 2^r2^+3kv[...3 ve 4'ün parametreler olduğu yerdir.
daniero

3

C, 77 veya 99

Giriş yalnızca işlev bağımsız değişkenleri olabilirse 77 karakter:

f(a,b){printf("The hypotenuse of this right triangle is %.3f\n",hypot(a,b));}

99 girdinin stdin'den okunması gerekiyorsa:

a,b;f(){scanf("%d %d",&a,&b);printf("The hypotenuse of this right triangle is %.3f\n",hypot(a,b));}

@Yimin Rong'a çok teşekkürler!


1
Size üç karakter kazandıracak bir hipot (a, b) vardır.

Bu işlev derlemek ne derlemek değil derlemek ben tio içinde gcc tcc clang ... belki bir #include üstbilgi ve başlık derleyici kesin sürümü
RosLuP

3

Güç kalkanı

Sadece yapabileceğimi görmek için ...

echo "The hypotenuse of this right triangle is " ([math]::round([math]::sqrt(([math]::pow(([double](Read-Host -p "A")),2) + [math]::pow(([double](Read-Host -p "B")),2))),3))

1
İyi iş. Görünüşe göre bunu kendi çözümümle meşgulken yaptım, bu da yaklaşık 62 karakterle atıyor. İleride referans olması için Code Golf cevaplarının "golf" edilmesi ve "puanlarının" dahil edilmesi beklenmektedir. "Golfing", kısa el takma adları, sözdizimi hileleri ve dil kurallarını genişletmenin diğer yollarını kullanarak karakter uzunluğunu azaltmak için her türlü çabayı göstermeniz gerektiği anlamına gelir. Ayrıca mümkünse gereksiz boşlukları da kaldırmalısınız (çözümünüzden kaldırılabilecek en az üç boşluk vardır). Bu durumda "skor", karakter
sayınızdır

Kod golf etiketi wiki, Yardım Merkezi'nin çeşitli bölümleri ve PowerShell iş parçacığı için Golf İpuçları buradaki golf zorluklarına nasıl rekabetçi bir cevap yazacağınızı daha iyi hissetmek için okumanızı öneririm.
Iszi

Ayrıca, betiğinizle ilgili bir hata alıyorum. "... 'p' parametre adı belirsiz ..." ile ilgili olarak Read-Host.
Iszi

3

Yakut, 94 90 82 karakter

p "The hypotenuse of this right triangle is %.3f"%(Math.sqrt(gets.to_i**2+gets.to_i**2))

Güncelleme (yorumlar için teşekkürler):

p "The hypotenuse of this right triangle is %.3f"%(gets.to_i**2+gets.to_i**2)**0.5

1
a**0.5Uzun yerine kullanırsanız birkaç karakter kaydedebilirsiniz Math.sqrt(a). Ve sonraki boşluk pda kaldırılabilir.
Nik O'Lai

1
Ve parantez içinde gerekmez %(Math...).
Nik O'Lai

2

MATLAB 79 74

@(a,b)sprintf('The hypotenuse of this right triangle is %.3f',norm([a b]))

2

Python 2.7-80 karakter

print'The hypotenuse of this right triangle is %.3f'%(input()**2+input()**2)**.5

Bunun 3 ondalık basamak yaptığını sanmıyorum ...?
Joachim Isaksson

Bu benim hatam, düzelttim, teşekkürler.
Andrea Ciceri

2

C ++ - 90

void h(int a,int b){printf("The hypotenuse of this right triangle is %.3f\n",hypot(a,b));}

pow(a,2)ne zaman yapabilirsin a*a? Ayrıca zeminin ve +.5'in amacını anladığımdan emin değilim ve çarpma ve 1000'e bölme
Cruncher

@Cruncher Zemin, ondalık basamak değerini .3 basamak olarak ayarlamak içindir. Şu anda yeniden çalışıyorum ve önerinizi de içereceğim.

Size üç karakter kazandıracak bir hipot (a, b) vardır.

@YiminRong Cool!

2

Perl 6 (68 74 bayt)

{printf "The hypotenuse of this right triangle is %.3f
",sqrt [+] @_ X**2}

{}lambda fonksiyonunu bildirir. [+]toplam operatör, X**çapraz güç operatörüdür (örneğin 1, 2 X+ 10, 20verir 11, 21, 12, 22). Bu durumda, çapraz güç operatörü bir argüman alır, böylece sonuç ile aynı uzunlukta olur @_. @_tüm işlev bağımsız değişkenlerini içerir.

O (güvensiz) Değişken yanlış numara alabilir işlevi olması izin verilmeyen istiyorsa, kesin değiştirmek mümkündür [+] @_ X**2ile $^a**2+$^b**2, nerede $^ave $^btutucu bağımsız değişkendir.


2
3 ondalık basamakla nasıl sınırlanırsınız?
Joachim Isaksson

@JachimIsaksson: Okumada başarısız oldum. Şimdi düzeltilmelidir.
Konrad Borowski

2

Javascript (97)

x=prompt;a=x(),b=x();x('The hypotenuse of this right triangle is '+Math.sqrt(a*a+b*b).toFixed(3))

.toFixed .. teşekkür ederim! yeni bir şey öğrendim :)
micha

2

C, 100 karakter (diğer C çözümünü 1 yener!)

Gülünç verimsiz bir algoritma.

x;f(a,b){for(;x-a*a-b*b;x=rand());printf("The hypotenuse of this right triangle is %.3f",sqrt(x));}

Maalesef, "bu" yerine "" "yazdınız, bu yüzden aynı uzunlukta olduğunu düzeltirseniz; P
daniero

@daniero Tamam, bir düzeltme bulundu, şimdi hala bir karakter aşağı :)
user12205

Borland C derleyicisinde derleme olmaz ...
RosLuP

2

DELPHI / PASCAL

Girintili (157)

program p;
{$APPTYPE CONSOLE}
var a,b:integer;
begin
     readln(a,b);
     writeln('the hypotenuse of this right triangle is',sqrt(b*b+a*a):2:3);
end.

1
ah adam, ben de aynısını
yaptım

Bir düzenleme için geç, bu yüzden yine .. Edit: değiştirerek kapalı 2 karakter alabilirsiniz integeriçin int16Kendi yanıt için ilk 2 satırdan oluşan zorunda daha dont ve bu boşluğu kaldırabilirsiniz. size 106 karakter veren her şeyi yapıyor.
Teun Pronk

2

EcmaScript 6, 82 79

f=(a,b)=>"The hypotenuse of this right triangle is "+Math.hypot(a,b).toFixed(3)

Kullanımı:

f(3, 5)
> "The hypotenuse of this right triangle is 5"

Güncelleme: Geçiş YapMath.hypot()


2

Golf Yazıları ( 69 67 66 65)

Kayan nokta, geçici çözümlere başvurmadan destekleniyorsa bu çok daha kolay olurdu ... :)

~'The hypotenuse of this right triangle is '@.*@.*+2-1??+.'.'?4+<

Test etmek için bir bağlantı .


neden daha kısa 2.!~olduğunda yapıyorsun 2-1?
McKay

@McKay İyi soru, her zaman the difference between 2- 1` ve 2-1yanlış alıyorum , bu yüzden muhtemelen geçici olarak karıştırıldı :) Düzeltildi, teşekkürler.
Joachim Isaksson

2

Python 2 (79)

def p(a,b):print'The hypotenuse of this right triangle is %.3d'%((a*a+b*b)**.5)

mathBazı tasarruflar için dağıtın . (a*a+b*b)**.5
Steven Rumbalski

İşlevinizin gövdesi tek bir ifade olduğundan, defyeni satır ve girinti kaydetmekle aynı satırda olabilir .
Steven Rumbalski

1

AWK - 84 78 karakter

awk '{printf"The hypotenuse of this right triangle is %.3f\n",($1^2+$2^2)^.5}'

^ Operatörünü önerdiği ve () kaldırdığı için Wasi'ye teşekkürler!

Örneğin

$ echo 3 4 | awk '{printf"The hypotenuse of this right triangle is %.3f\n",($1^2+$2^2)^.5}'
The hypotenuse of this right triangle is 5.000

Daha fazla golf oynayabilirsiniz{printf"The hypotenuse of this right triangle is %.3f\n",($1^2+$2^2)^.5}
Wasi

1

Güç Kabuğu: 111

Golf Kodu

1..2|%{sv $_ (read-host)};"The hypotenuse of this right triangle is $("{0:N3}"-f[math]::sqrt($1/1*$1+$2/1*$2))"

Bakış

1..2|%{sv $_ (read-host)};Kullanıcıdan etkileşimli olarak iki girdi alır ve bunları 1 $ ve 2 $ olarak kaydeder. Bunun yerine argümanları veya ardışık düzen girişlerini kullanarak biraz uzunluk kesebilir.

"The hypotenuse of this right triangle is Zorluk özelliklerine göre çıktıda gerekli metin.

$(... )"Kapsüllü kod bloğu, çıktıya eklenmeden önce komut dosyası olarak işlenir.

"{0:N3}"-f Sonraki kod bitinden çıktıyı, ondalık noktadan sonra tam olarak üç basamaklı bir sayı olarak biçimlendirir.

[math]::sqrt(... )Kapsüllenmiş değerin karekökünü alır.

$1/1*$1+$2/1*$2"A ^ 2 + b ^ 2" olarak işlev görür. Bir sayıyı tek başına çoğaltmak, PowerShell'de karenin en kısa yoludur, ancak değişkenleri tamsayılara zorlamak için önce 1'e bölünmesi gerekir. Aksi takdirde, metin olarak kabul edilirler ve 3 yerine 3 * 3 + 4 * 4, 3334444 olur.


1

JavaScript: 83

i=prompt,'The hypotenuse of this right triangle is '+Math.hypot(i(),i()).toFixed(3)

Şu anda aşağıdakileri kullanan en kısa JS uygulaması stdin: D
Yalnızca Firefox 27.0+ (EcmaScript 6) üzerinde çalışır

JavaScript: 78

Yalnızca iki değişken kullanabiliyorsak (burada çok sayıda komut dosyasının yaptığı gibi):

a=2,b=3,'The hypotenuse of this right triangle is '+Math.hypot(a,b).toFixed(3)

whoooo ... hipot. İyi yakalama!
micha

1

dc, 55

3k?d*?d*+v[The hypotenuse of this right triangle is ]Pp

1

Java, 112

(Ayrıca böyle bir yöntem yok yazdırır, ancak bunun kurallara aykırı olup olmadığından emin değilim)

class A{static{int a=1,b=1;System.out.printf("The hypotenuse of this right triangle is %.3f",Math.hypot(a,b));}}

Java, 149

(Hata yok)

class A{static{int a=1,b=1;System.out.printf("The hypotenuse of this right triangle is %.3f",Math.hypot(a,b));}public static void main(String[] a){}}

1

C #

Sadece Yöntem (114)

void H(double a, double b)
{
    Console.Write("The hypotenuse of this right triangle is {0:N3}", Math.Sqrt(a * a + b * b)); 
}

Programı Tamamla (171)

using System;
class P
{        
   static void H(double a, double b)
   {
     Console.Write("The hypotenuse of this right triangle is {0:N3}", Math.Sqrt(a * a + b * b));
   }                
   static void Main()
   {
    H(3, 4);
   }
}

Programı Tamamla (yöntem kullanmadan - 141)

using System;class P{static void Main(){double a=3,b=4;Console.Write("The hypotenuse of this right triangle is {0:N3}",Math.Sqrt(a*a+b*b));}}

1
Heres benim programım. 141 karakter ... System kullanarak yazma biçiminin aşırı yüklenmesini kullanarak birkaç karakter kaydedebilirsiniz; sınıf P {statik void Main () {double a = 3, b = 4; Console.Write ("Bu sağ üçgenin hipotenüsü {0: N3} ", Math.Sqrt (a + b b));}}
Tim Bailey

1
9 karakter kaydetmek için ToString () öğesini çağırmak yerine Console.Write öğesinde dize biçimlendirmesini kullanabilirsiniz.
Rik

1

JavaScript 118 106 93

@ Micha'nın çözümünün aksine, benimki fonksiyon aracılığıyla iki değişkeni alır ve sonuç uyarısını gönderir.

function(a,b){m=Math;c=d=>d*d,e=1e3;alert("The hypotenuse of this right triangle is "+m.round(m.sqrt(c(a)+c(b))*e)/e)}

function(a,b){e=1e3;alert("The hypotenuse of this right triangle is "+Math.round(Math.sqrt(a*a+b*b)*e)/e)}

Yağ ok kurtarma kurtarır!

h=(a,b,e=1e3)=>"The hypotenuse of this right triangle is "+Math.round(Math.sqrt(a*a+b*b)*e)/e


1
Satır içi yaparsanız daha kısa olabilir c(). Diğer adlandırma Math, davanızdaki baytları kaydetmez.
Florent

@ Ah Ah, evet ... bir saniye!
WallyWest


1

R, 61 76 bayt

cat("The hypotenuse of this right triangle is",round(sqrt(sum(scan()^2)),3))

cat içeriğini STDOUT olarak gösterir.

scan()Fonksiyon klavyeden kullanıcının girdi alır. Bu giriş, üzerine ^2uygulandığı bir vektör olarak bulunur ( ^fonksiyon vektörleştirilir) ve sum()vektörün elemanlarını toplar. sqrt3 ondalık basamağa yuvarlanmış kare köküround(,3)

@Caird coinheringaahing sayesinde bir önceki cevabın yuvarlak olmadığını fark ettiğiniz için.


Bu "c'yi yalnızca üç ondalık basamağa tutun" mu?
coinheringaahing Caird

@cairdcoinheringaahing: şimdi yapıyor! Teşekkürler !
Frédéric

1

ARBLE , 73 bayt

"The hypotenuse of this right triangle is "..floor(sqrt(a^2+b^2)*1e3)/1e3

Çevrimiçi deneyin!


1
@ H.PWiz Söylemeliyim ki, olması gereken bir meydan okuma için sqrt(a^2+b^2), bunun çok fazla gereksiz kazanı var.
ATaco

1

OML , 57 bayt

"The hypotenuse of this right triangle is "shnhn+A6`*N3eD

Çevrimiçi deneyin!

Bölüm 1

Bu sadece dizeyi çıktılar

"The hypotenuse of this right triangle is "s

Bölüm 2

hnhn+A6`*N3eD
hn              take input and square it
  hn            take another input and square it
    +           add them
     A6`        push 10^6
        *       multiply the sum with that number
         N      take integer square root
          3eD   output with three places of precision
                implicit output

1

Jöle , 32 karakter

,²S½ær3µ,“¡ÆC⁷⁺ɱSoṿȤç½?⁶Ẏtḍỵŀ»ṚK

Çevrimiçi deneyin!

Muhtemelen daha iyi bir dize sıkıştırma var bana boşlukları ile katılmak zorunda etrafında dolaşmak için izin ama ben bulmakta sorun yaşıyordu.

Açıklama:

,²S½ær3µ,“...»ṚK    Example inputs: 3, 4
,                   Pair the inputs. Result: [3, 4]
 ²                  Square them. Result: [9, 16]
  S                 Sum them. Result: 25
   ½                Get the square root of the sum. Result: 5
    ær3             Round to 3 decimal places. Result: 5
       µ            Take the result of that... Result: 5
         “...»       ...and  the compressed string Result: "The hypotenuse of this right triangle is"
        ,           And put them into a pair. Result: [5, "The hypotenuse of this right triangle is"]
              Ṛ     Reverse that. Result: ["The hypotenuse of this right triangle is", 5]
               k    Join it with spaces. Result: "The hypotenuse of this right triangle is 5.0"
                    Implicit output.

Yani sürece only three decimal placesvasıtasıyla less than or equal to three decimal places, çıkış cezası görünüyor.
Mühendis Tost
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.