Jawaban:
t=input()
s=a=sum(t)/2.
for x in t:a*=s-x
print a**.5
Memasukkan: 2,3,4
Keluaran: 2.90473750966
Mathematica 23
√Times@@(+##/2-{0,##})&
Sqrt[Tr@#*Times@@(Tr@#-2#)]/4&
(Tr@#Times@@(Tr@#-2#))^.5/4&
, atau 27 menggunakan variabel
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
*.5
bukan /2
?
a+b+c
ganjil, 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).
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
function(...)prod(sum(...)/2-c(0,...))^.5
. Atau bahkan function(x)prod(sum(x)/2-c(0,x))^.5
jika Anda memanggil fungsi Anda dengan vektor.
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
, b
dan c
.
(a=v[0])a
lebih lama dari v[0]v[0]
.
s=(v[0]+v[1]+v[2])/2
dengan a, b, c = 3,4,5 akan menghasilkan "345"/2=172.5" and not 6. Improved without
sebuah ,
b` dan c
sekalipun.
s=(-v[0]-v[1]-v[2])/2
dan mengubah lainnya -
untuk +
. Ini adalah angka yang genap, jadi dibatalkan.
Dengan 4 byte disimpan oleh @swish.
Ini mengembalikan jawaban yang tepat:
Area@SSSTriangle@
Contoh
Area@SSSTriangle[2,3,4]
Untuk mengembalikan jawaban dalam bentuk desimal, diperlukan dua byte tambahan.
N@Area@SSSTriangle[2,3,4]
2.90474
Area@*SSSTriangle
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>
<?=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.
($s-$c[2])
dapat diganti dengan $s-=$c[2]
satu byte, tapi hanya itu yang bisa saya lihat.
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 eval
untuk menyimpan 2 karakter. Beats @tomsmeding, wahoo! :)
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 4
nilai s
adalah (2+3+4)/2.
sebagai string. Evaluasi ganda FTW.
proc
, hanya meluas hingga 81 byte: tio.run/##NYo7CoAwEAV7T/…
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 Ans
danprod(
, adalah satu atau dua byte dalam memori kalkulator.
Masukan melalui Ans
yaitu 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))
#define f(a,b,c)sqrt((a+b+c)*(a+b-c)*(a-b+c)*(b+c-a))/4
Namun implementasi lain dari formula Pahlawan.
#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;
}
╝0∞♀»♦▓y╩╪
Mengoperasikan tiga kali lipat angka floating point. Menggunakan Formula Bangau