Üç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.