Area Segitiga Sisi Sisi Samping


17

Diberikan tiga sisi segitiga, cetak area segitiga ini.

Kasus uji:

Dalam: 2,3,4

Keluar: 2.90473750965556

Dalam: 3,4,5

Keluar: 6

Asumsikan tiga sisi a, b, c selalu a> 0, b> 0, c> 0, a + b> c, b + c> a, c + a> b.

Jawaban:


6

J, 23 19 karakter

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

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

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

Versi 17-char jika input ada di i:4%~%:*/(+/,+/-+:)i

versi 23-char asli: (%:@(+/**/@(+/-+:))%4:)


7

APL 21 20

Mengambil input layar melalui ← ⎕

(×/(+/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

Memasukkan: 2,3,4

Keluaran: 2.90473750966


3
Saya menghabiskan banyak waktu untuk mencari solusi yang lebih baik. Saya yakin ini sebagus yang didapat
jamylak

2
@jamylak Anda dan saya berdua;)
primo

6

Mathematica 23

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

Hanya komentar samping. Kami (biasanya) mencoba memberikan kode Mma sebagai fungsi di sini. Sebagai contoh dalam kasus AndaSqrt[Tr@#*Times@@(Tr@#-2#)]/4&
Dr. belisarius

2
28 karakter, sebagai fungsi (Tr@#Times@@(Tr@#-2#))^.5/4&, atau 27 menggunakan variabel
Dr. belisarius

@belisarius Terima kasih atas saran Anda.
chyanog

5

Python 57 byte

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

Menggunakan Formula Heron .

Penggunaan sampel:

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

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

Varian 58 byte:

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

Saya tidak terlalu terbiasa dengan python, tetapi mengapa baris 2 *.5bukan /2?
jdstankosky

@ jdstankosky Operator divisi di Python secara default adalah integer division, sehingga jika jumlah a+b+cganjil, hasilnya akan salah. Ini memang berubah dalam Python 3, meskipun sebagian besar pengiriman golf diasumsikan Python 2.7 kecuali ditentukan lain (seperti pengiriman Perl diasumsikan 5.10+, dan bukan Perl 6).
Primo

3
Anda bisa mengatakan "Python 3" bukannya "Python".
Joe Z.

1
@ Joz. Nggak. Ini adalah Python 2; di Python 3, input () mengembalikan sebuah string, memecah solusi ini.
Khuldraeseth na'Barya

4

GolfScript, 38 karakter

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

Karena pertanyaan tidak menentukan sebaliknya saya memilih untuk bekerja hanya pada panjang integer. Sisi harus diberikan pada STDIN yang dipisahkan oleh spasi.

Contoh:

> 2 3 4
2.9047375096555625

3

K, 23

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

Contoh

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

3

APL, 23 20 karakter

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

Contoh:

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

3

R: 48 43 karakter

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

Menggunakan rumus Heron juga tetapi memanfaatkan vektorisasi R.
Terima kasih kepada @flodel untuk ide elipsis.

Pemakaian:

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

Anda bisa menjatuhkan kurung keriting. Dan Anda bisa mendapatkan lebih dengan menggunakan elipsis: function(...)prod(sum(...)/2-c(0,...))^.5. Atau bahkan function(x)prod(sum(x)/2-c(0,x))^.5jika Anda memanggil fungsi Anda dengan vektor.
flodel

@ model terima kasih! Saya tidak memikirkan ellipsis, itu bagus.
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]))

Tidak bagus tapi menyenangkan :) Bangau juga ... Menunjukkan ketidaklayakan masalah sederhana di JS lol

Catatan : jalankan dari konsol untuk melihat hasilnya.

88-> 85: Dihapus a, bdan c.


1
Anda dapat menyimpan sedikit dengan hanya membagi 2 sekali. Dan Anda tidak benar-benar mendapatkan apa pun dengan menugaskan ke variabel: (a=v[0])alebih lama dari v[0]v[0].
Peter Taylor

Jika saya dibagi 2 hanya satu kali, seperti s=(v[0]+v[1]+v[2])/2dengan a, b, c = 3,4,5 akan menghasilkan "345"/2=172.5" and not 6. Improved without sebuah , b` dan csekalipun.
tommeding

Ah, sistem tipe JavaScript yang luar biasa. Ok, s=(-v[0]-v[1]-v[2])/2dan mengubah lainnya -untuk +. Ini adalah angka yang genap, jadi dibatalkan.
Peter Taylor

2

Mathematica 20 16 atau 22 18 bytes

Dengan 4 byte disimpan oleh @swish.

Ini mengembalikan jawaban yang tepat:

Area@SSSTriangle@

Contoh

Area@SSSTriangle[2,3,4]

gambar


Untuk mengembalikan jawaban dalam bentuk desimal, diperlukan dua byte tambahan.

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

2.90474


Komposisi mencukur beberapa byteArea@*SSSTriangle
desak

@berharap Terima kasih, Sangat dihargai.
DavidC

1

Haskell: 51 (27) karakter

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

Implementasi formula Heron yang sangat mudah. Contoh dijalankan:

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

Perhatikan bahwa ia menerima input numerik apa pun, tidak hanya bilangan bulat. Dan jika input sudah ada dalam l solusinya hanya perlu 36 karakter, dan jika kita tidak tertarik untuk mencetak jawaban, solusinya hanya perlu 30 karakter. Apa lagi itu jika kita bisa membiarkan diri kita untuk mengubah format input kita dapat menghapus 3 karakter lagi. Jadi jika input kita seperti [2,3,4,0.0] dan sudah ada di l kita hanya bisa mendapatkan jawaban kita:

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

Contoh dijalankan:

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]);

Penggunaan:

php triangle.php
2,3,4

Keluaran: 2.9047375096556

Saya tidak berpikir saya bisa membuatnya lebih pendek? Saya masih baru bermain golf. Siapa pun beri tahu saya jika saya mengabaikan sesuatu.

Terima kasih Primo karena telah menyelamatkan saya 1 byte, lol.


1
Final ($s-$c[2])dapat diganti dengan $s-=$c[2]satu byte, tapi hanya itu yang bisa saya lihat.
primo

@rimo Terima kasih, teman!
jdstankosky

1

JavaScript (84 86 )

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

Solusi JavaScript lain berdasarkan pada rumus Heron, tetapi mencoba pendekatan yang berbeda untuk memuat variabel. Perlu dijalankan dari konsol. Setiap sisi dimasukkan dalam prompt terpisah.

EDIT : Manfaatkan nilai balik evaluntuk menyimpan 2 karakter. Beats @tomsmeding, wahoo! :)


1

Excel, 42 byte

Berdasarkan rumus Heron, aljabar sekolah menengah hingga golf.

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

Tidak disatukan / Tidak disatukan

=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 byte

½*Nx
NmnU ×*U q

Menguji

Disimpan 2 byte berkat ETH menunjukkan garis baru yang berlebihan dan beberapa cara alternatif untuk mengurangi array.


Saya pikir Anda dapat menggunakan ini untuk baris kedua, terlalu: 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))}

Lewati sisi sebagai argumen.

Untuk input 2 3 4nilai sadalah (2+3+4)/2.sebagai string. Evaluasi ganda FTW.


Sebagai proc, hanya meluas hingga 81 byte: tio.run/##NYo7CoAwEAV7T/…
sergiol

1

Julia 0.6.0, 48 bytes

Pada dasarnya rumus bangau:

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

1

TI-BASIC, 14 12 byte

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

Mulai dari rutinitas Formula Heron yang ditulis oleh Kenneth Hammond (Weregoose) , saya bermain golf dua byte. Perhatikan bahwa TI-BASIC adalah tokenized, dan setiap token, seperti Ansdanprod( , adalah satu atau dua byte dalam memori kalkulator.

Masukan melalui Ansyaitu dalam formulir {a,b,c}:[program name].

Dijelaskan:

                   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))

Saya telah mengonversikan ini ke wiki komunitas karena ini bukan karya Anda sendiri. Kami tidak benar-benar memiliki konsensus yang kuat tentang ini, tetapi jangan ragu untuk menimbang di sini jika Anda tidak setuju dengan keputusan saya.
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;
}

Hai saya pemula pemrograman, jika ada kesalahan tanyakan saya.
Sharar

Selamat datang di CodeGolf. Anda harus terlebih dahulu memverifikasi bahwa program itu bekerja dan entah bagaimana mengeluarkan hasilnya. Ada beberapa bug sederhana yang satu ini.
ugoren




0

APL (NARS), 16 karakter, 32 byte

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

Kita harus cenvert rumus Erone jika a, b, c adalah sisi segitiga

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

ke bahasa APL ... tes

  f←{√×/(+/⍵÷2)-0,⍵}
  f 2 3 4
2.90473751
  f 3 4 5
6
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.