Câu trả lời:
(4%~2%:[:*/+/-0,+:)
(4%~2%:[:*/+/-0,+:) 2 3 4
2.90474
(4%~2%:[:*/+/-0,+:) 3,4,5
6
Phiên bản 17-char nếu đầu vào ở i
:4%~%:*/(+/,+/-+:)i
phiên bản 23-char gốc: (%:@(+/**/@(+/-+:))%4:)
t=input()
s=a=sum(t)/2.
for x in t:a*=s-x
print a**.5
Đầu vào: 2,3,4
Đầu ra: 2.90473750966
Toán học 23
√Times@@(+##/2-{0,##})&
Sqrt[Tr@#*Times@@(Tr@#-2#)]/4&
(Tr@#Times@@(Tr@#-2#))^.5/4&
, hoặc 27 bằng cách sử dụng một biến
a,b,c=input()
s=(a+b+c)*.5
print(s*(s-a)*(s-b)*(s-c))**.5
Sử dụng công thức của Heron .
Sử dụng mẫu:
$ echo 2,3,4 | python triangle-area.py
2.90473750966
$ echo 3,4,5 | python triangle-area.py
6.0
Một biến thể 58 byte:
a,b,c=input()
print((a+b+c)*(b+c-a)*(a+c-b)*(a+b-c))**.5/4
*.5
thay vì /2
?
a+b+c
số lẻ, kết quả sẽ bị sai. Điều này đã thay đổi trong Python 3, mặc dù hầu hết các bài nộp golf được coi là Python 2.7 trừ khi có quy định khác (giống như các bài nộp Perl được giả định là 5.10+, chứ không phải Perl 6).
f=function(...)prod(sum(...)/2-c(0,...))^.5
Cũng sử dụng công thức của Heron nhưng tận dụng lợi thế của vector hóa R.
Cảm ơn @flodel cho ý tưởng về dấu chấm lửng.
Sử dụng:
f(2,3,4)
[1] 2.904738
f(3,4,5)
[1] 6
function(...)prod(sum(...)/2-c(0,...))^.5
. Hoặc thậm chí function(x)prod(sum(x)/2-c(0,x))^.5
nếu bạn gọi hàm của bạn bằng một vectơ.
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]))
Không tốt nhưng vui vẻ :) Cũng là Heron ... Thể hiện sự vô dụng của các vấn đề đơn giản trong JS lol
Lưu ý : chạy từ bàn điều khiển để xem kết quả.
88-> 85: Removed a
, b
và c
.
(a=v[0])a
dài hơn v[0]v[0]
.
s=(v[0]+v[1]+v[2])/2
với a, b, c = 3,4,5 sẽ dẫn đến "345"/2=172.5" and not 6. Improved without
một ,
b` và c
mặc dù.
s=(-v[0]-v[1]-v[2])/2
và thay đổi khác -
để +
. Đó là một số chẵn của các điều khoản, vì vậy nó hủy bỏ.
Với 4 byte được lưu bởi @swish.
Điều này trả về một câu trả lời chính xác:
Area@SSSTriangle@
Thí dụ
Area@SSSTriangle[2,3,4]
Để trả về câu trả lời ở dạng thập phân, cần có hai byte bổ sung.
N@Area@SSSTriangle[2,3,4]
2,90474
Area@*SSSTriangle
readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
Việc thực hiện rất đơn giản công thức của Heron. Chạy ví dụ:
Prelude> readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
[2,3,4]
2.9047375096555625
Prelude>
Lưu ý rằng nó chấp nhận bất kỳ đầu vào số nào, không chỉ số nguyên. Và nếu đầu vào đã có trong l, giải pháp chỉ cần dài 36 ký tự và nếu chúng ta không quan tâm đến việc in câu trả lời thì giải pháp chỉ cần dài 30 ký tự. Hơn nữa, nếu chúng ta có thể cho phép chính mình thay đổi định dạng đầu vào, chúng ta có thể xóa thêm 3 ký tự. Vì vậy, nếu đầu vào của chúng tôi trông giống như [2,3,4,0.0] và đã có trong l, chúng tôi chỉ có thể nhận được câu trả lời của mình:
sqrt$product$map(sum l/2-)l
Chạy ví dụ:
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]);
Sử dụng:
php triangle.php
2,3,4
Đầu ra: 2.9047375096556
Tôi không nghĩ rằng tôi có thể làm cho nó ngắn hơn? Tôi vẫn chưa quen với việc chơi golf. Bất cứ ai cho tôi biết nếu tôi bỏ qua một cái gì đó.
Cảm ơn Primo đã tiết kiệm cho tôi 1 byte, lol.
($s-$c[2])
có thể được thay thế bằng $s-=$c[2]
một byte, nhưng đó là tất cả những gì tôi có thể thấy.
s=(eval('abc '.split('').join('=prompt()|0;'))+a+b)/2;Math.sqrt(s*(s-a)*(s-b)*(s-c))
Một giải pháp JavaScript khác dựa trên công thức của Heron, nhưng thử một cách tiếp cận khác để tải các biến. Cần phải được chạy từ bàn điều khiển. Mỗi bên được nhập vào một dấu nhắc riêng biệt.
EDIT : Sử dụng giá trị trả về của eval
để lưu 2 ký tự. Nhịp đập @tomsmeding, wahoo! :)
½*Nx
NmnU ×*U q
Đã lưu 2 byte nhờ ETH chỉ ra một dòng mới dư thừa và một số cách khác để giảm mảng.
NmnU ×*U q
, NmnU r*U q
,Np0 mnU ×q
proc R {a b c} {set s ($a+$b+$c)/2.
expr sqrt($s*($s-$a)*($s-$b)*($s-$c))}
Vượt qua các bên như tranh luận.
Đối với đầu vào 2 3 4
, giá trị s
là (2+3+4)/2.
dưới dạng chuỗi. Đánh giá kép FTW.
proc
, nó chỉ mở rộng tới 81 byte: tio.run/##NYo7CoAwEAV7T/ Kẻ
4⁻¹√(sum(Ansprod(sum(Ans)-2Ans
Bắt đầu từ thói quen Công thức của Heron được viết bởi Kenneth Hammond (Weregoose) , tôi đã đánh gôn hai byte. Lưu ý rằng TI-BASIC được mã hóa và mỗi mã thông báo, như Ans
và prod(
, là một hoặc hai byte trong bộ nhớ của máy tính.
Nhập thông qua Ans
tức là trong mẫu {a,b,c}:[program name]
.
Giải thích:
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
Một cách thực hiện khác trong công thức của Hero.
#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;
}