Üçgen Alan Yan Yan Yan


17

Bir üçgenin üç tarafı göz önüne alındığında, bu üçgenin yazdırma alanı.

Test senaryoları:

İçinde: 2,3,4

Çıkan: 2.90473750965556

İçinde: 3,4,5

Çıkan: 6

Üç tarafın a, b, c daima a> 0, b> 0, c> 0, a + b> c, b + c> a, c + a> b olduğunu varsayın.

Yanıtlar:


6

J, 23 19 karakter

   (4%~2%:[:*/+/-0,+:)

   (4%~2%:[:*/+/-0,+:) 2 3 4
2.90474

   (4%~2%:[:*/+/-0,+:) 3,4,5
6

Giriş ise 17 karakterlik sürüm i:4%~%:*/(+/,+/-+:)i

orijinal 23 karakterlik sürüm: (%:@(+/**/@(+/-+:))%4:)


7

APL 21 20

← ⎕ üzerinden ekran girişi yapar

(×/(+/t÷2)-0,t←⎕)*.5

6

Python 2, 53

t=input()
s=a=sum(t)/2.
for x in t:a*=s-x
print a**.5

Giriş: 2,3,4

Çıktı: 2.90473750966


3
Daha iyi bir çözüm bulmaya çalışırken çok zaman harcadım. Ben bu kadar iyi olduğuna ikna oldum
— jamylak

2
@jamylak sen ve ben her ikisi de;)
— primo

6

Mathematica 23

√Times@@(+##/2-{0,##})&

Sadece bir kenara yorum. Biz (genellikle) burada fonksiyon olarak Mma kodu sağlamaya çalışıyoruz. Örneğin, Sqrt[Tr@#*Times@@(Tr@#-2#)]/4&
— davanızda

2
İşlev olarak 28 karakter (Tr@#Times@@(Tr@#-2#))^.5/4&veya değişken kullanan 27
— Dr. belisarius

@belisarius Öneriniz için teşekkürler.
— chyanog

5

Python 57 bayt

a,b,c=input()
s=(a+b+c)*.5
print(s*(s-a)*(s-b)*(s-c))**.5

Heron Formülü'nü kullanarak .

Örnek kullanım:

$ echo 2,3,4 | python triangle-area.py
2.90473750966

$ echo 3,4,5 | python triangle-area.py
6.0

58 baytlık bir varyant:

a,b,c=input()
print((a+b+c)*(b+c-a)*(a+c-b)*(a+b-c))**.5/4

Python'a çok aşina değilim, ama neden satır 2 *.5yerine /2?
— jdstankosky

@jdstankosky Python'daki bölme işleci varsayılan olarak tamsayı bölmesidir, böylece toplamı tuhafsa a+b+csonuç hatalı olur. Bu, Python 3'te değişti, ancak golf gönderimlerinin çoğu, aksi belirtilmedikçe Python 2.7 olarak kabul edilir (tıpkı Perl başvurularının Perl 6 değil 5.10+ olduğu varsayılır).
— primo

3
Sen olabilir sadece yerine "Python" nin "Python 3" derler.
— Joe Z.

1
@JoeZ. Hayır! Bu Python 2; Python 3'te input () bu çözümü kırarak bir dize döndürür.
— Khuldraeseth na'Barya

4

GolfScript, 38 karakter

~].~++:d\{2*d\-*}/'"#{'\+'**0.5/4}"'+~

Soru aksi belirtilmediği için sadece tamsayı uzunluklarında çalışmayı seçtim. Taraflar boşluklarla ayrılmış STDIN üzerinde verilmelidir.

Misal:

> 2 3 4
2.9047375096555625

3

K, 23

{sqrt s**/(s:.5*+/x)-x}

Misal

k){sqrt s**/(s:.5*+/x)-x} 2 3 4
2.904738

3

APL, 23 20 karakter

{(×/(+/⍵÷2)-0,⍵)*÷2} 2 3 4

Misal:

> {(×/(+/⍵÷2)-0,⍵)*÷2} 2 3 4
2.90474

3

R: 48 43 karakter

f=function(...)prod(sum(...)/2-c(0,...))^.5

Heron'un formülünü de kullanmak, ancak R'nin vektörleşmesinden faydalanmak.
Üç nokta fikri için @ flodel'e teşekkürler.

Kullanımı:

f(2,3,4)
[1] 2.904738
f(3,4,5)
[1] 6

Kıvırcık parantezleri bırakabilirsiniz. Ve üç nokta kullanarak daha kazanabilir: function(...)prod(sum(...)/2-c(0,...))^.5. Veya function(x)prod(sum(x)/2-c(0,x))^.5fonksiyonunuzu bir vektörle çağırsanız bile .
— flodel

@ flodel teşekkürler! Üç nokta düşünmedim, bu güzel.
— plannapus

2

Javascript, 88 85

v=prompt().split(/,/g);s=v[0]/2+v[1]/2+v[2]/2;Math.sqrt(s*(s-v[0])*(s-v[1])*(s-v[2]))

İyi değil ama eğlenceli :) Ayrıca Heron ... JS lol basit sorunların çözülemezliğini gösterir

Not : sonucu görmek için konsoldan çalıştırın.

88-> 85: Kaldırılması a, bve c.


1
Sadece bir kez 2'ye bölerek biraz tasarruf edebilirsiniz. Ve aslında değişkenlere atayarak hiçbir şey kazanmazsınız: (a=v[0])adaha uzun v[0]v[0].
— Peter Taylor

2'ye sadece bir kez bölersem s=(v[0]+v[1]+v[2])/2, a, b gibi, c = 3,4,5 "345"/2=172.5" and not 6. Improved without bir , b` ve cbuna neden olur.
— Mart'ta

Ah, JavaScript'in harika tip sistemi. Tamam s=(-v[0]-v[1]-v[2])/2ve diğerini -değiştirin +. Eşit sayıda terim olduğundan iptal olur.
— Peter Taylor

2

Mathematica 20 16 veya 22 18 bayt

@Swish tarafından kaydedilen 4 bayt ile.

Bu kesin bir cevap verir:

Area@SSSTriangle@

Misal

Area@SSSTriangle[2,3,4]

image


Cevabı ondalık biçimde döndürmek için iki ek bayt gerekir.

N@Area@SSSTriangle[2,3,4]

2,90474


Bayt Kompozisyon tıraş çiftArea@*SSSTriangle
— homoseksüel

@swish Teşekkürler, Çok takdir ediyorum.
— DavidC

1

Haskell: 51 (27) karakter

readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)

Heron formülünün çok basit bir uygulaması. Örnek çalışma:

Prelude> readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
[2,3,4]
2.9047375096555625
Prelude>

Yalnızca tamsayıları değil, herhangi bir sayısal girişi kabul ettiğini unutmayın. Ve eğer giriş zaten l ise çözümün sadece 36 karakter uzunluğunda olması gerekiyorsa ve cevabı yazdırmak istemiyorsak, çözümün sadece 30 karakter uzunluğunda olması gerekir. Dahası, giriş biçimini değiştirmemize izin verebilirsek, 3 karakteri daha kaldırabiliriz. Yani girdimiz [2,3,4,0.0] gibi görünüyorsa ve zaten l ise, cevabımızı sadece şu şekilde alabiliriz:

sqrt$product$map(sum l/2-)l

Örnek çalışma:

Prelude> let l = [2,3,4,0.0]
Prelude> sqrt$product$map(sum l/2-)l
2.9047375096555625
Prelude>

1

PHP, 78 77

<?=sqrt(($s=array_sum($c=fgetcsv(STDIN))/2)*($s-$c[0])*($s-$c[1])*$s-=$c[2]);

kullanımı:

php triangle.php
2,3,4

Çıktı: 2.9047375096556

Daha kısa yapabileceğimi sanmıyorum? Hâlâ golf oynama konusunda yeniyim. Bir şey göz ardı edersem herkes bana haber verdi.

Beni 1 bayt kurtardığın için teşekkürler Primo, lol.


1
Final bir bayt için ($s-$c[2])değiştirilebilir $s-=$c[2], ancak tek gördüğüm bu.
— primo

@primo Teşekkürler dostum!
— jdstankosky

1

JavaScript (84 86 )

s=(eval('abc '.split('').join('=prompt()|0;'))+a+b)/2;Math.sqrt(s*(s-a)*(s-b)*(s-c))

Heron'un formülüne dayanan, ancak değişkenleri yüklemek için farklı bir yaklaşım deneyen başka bir JavaScript çözümü. Konsoldan çalıştırılması gerekiyor. Her taraf ayrı bir isteme girilir.

EDIT : eval2 karakter kaydetmek için dönüş değerini kullanın . @Tomsmeding yener, wahoo! :)


1

Excel, 42 bayt

Heron'un formülüne dayanan lise golfü cebiridir.

=SQRT(((A1+B1)^2-C1^2)*(C1^2-(A1-B1)^2))/4

Kurtulmamış / Cebirsiz

=SQRT((A1+B1+C1)/2*(((A1+B1+C1)/2)-A1)*(((A1+B1+C1)/2)-B1)*(((A1+B1+C1)/2)-C1))

1

Japt , 17 16 15 bayt

½*Nx
NmnU ×*U q

Dene

ETH , gereksiz bir yeni satıra ve diziyi azaltmanın bazı alternatif yollarına işaret ederek 2 bayt tasarruf etti.


Ben de ikinci hat için bunlardan herhangi birini kullanabilirsiniz düşünüyorum: NmnU ×*U q, NmnU r*U q,Np0 mnU ×q
— ETHproductions

1

Tcl, 74 karakter.

proc R {a b c} {set s ($a+$b+$c)/2.
expr sqrt($s*($s-$a)*($s-$b)*($s-$c))}

Tarafları argüman olarak iletin.

Girişi için 2 3 4değeri solan (2+3+4)/2.dize olarak. Çift değerlendirme FTW.


A olarak proc, sadece 81 bayta uzanır: tio.run/##NYo7CoAwEAV7T/…
— sergiol

1

Julia 0.6.0, 48 bayt

Temelde balıkçıl formülü:

f(a,b,c)=(p=(a+b+c)/2;sqrt(p*(p-a)*(p-b)*(p-c)))

1

TI-BASIC, 14 12 bayt

4⁻¹√(sum(Ansprod(sum(Ans)-2Ans

Kenneth Hammond (Weregoose) tarafından yazılan Heron'un Formula rutininden başlayarak iki bayt çıkardım. TI-BASIC simgeleþtirilmiþ ve benzeri her belirteç olduğunu Not Ansve prod(, hesap makinesinin belleğinde bir veya iki bayt.

AnsYani formda girdi{a,b,c}:[program name] .

Açıklaması:

                   sum(Ans)-2*Ans   (a+b+c)-2{a,b,c}={b+c-a,c+a-b,a+b-c}
          Ans*prod(                 {a,b,c}*(b+c-a)(c+a-b)(a+b-c)
      sum(                          (a+b+c)(b+c-a)(c+a-b)(a+b-c)
4⁻¹*√(                              √((a+b+c)(b+c-a)(c+a-b)(a+b-c)/16)
                                    =√(s(s-a)(s-b)(s-c))

Kendi topluluğun olmadığı için bunu bir topluluk vikisine dönüştürdüm. Bu konuda gerçekten sağlam bir fikir birliğimiz yok, ancak kararımı kabul etmiyorsanız burada tartmaktan çekinmeyin .
— Martin Ender



0
#include<stdio.h>
#include<math.h>
main()
{
  double a,b,c,s,area;
  scanf("%d %d %d" &a,&b,&c);
  s=sqrt((a*a)+(b*b)+(c*c));
  area=[sqrt(s*(s-a)*(s-b)*(s-c))]/2;
}

Hi iam beginner of programming,if any errors plz suggest me.
— sharath

Welcome to CodeGolf. You should first verify that the program works and somehow outputs the result. There are some simple bugs in this one.
— ugoren




0

APL(NARS), 16 chars, 32 bytes

{√×/(+/⍵÷2)-0,⍵}

One has to cenvert the Erone formula if a, b, c are sides of triangle

p   =(a+b+c)/2 
Area=√p*(p-a)(p-b)(p-c)

to APL language... test

  f←{√×/(+/⍵÷2)-0,⍵}
  f 2 3 4
2.90473751
  f 3 4 5
6
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.