กำหนดรูปสามเหลี่ยมสามด้านให้พื้นที่การพิมพ์ของรูปสามเหลี่ยมนี้
กรณีทดสอบ:
ใน: 2,3,4
ออก: 2.90473750965556
ใน: 3,4,5
ออก: 6
สมมติว่าทั้งสามด้าน a, b, c เสมอ a> 0, b> 0, c> 0, a + b> c, b + c> a, c + a> b
กำหนดรูปสามเหลี่ยมสามด้านให้พื้นที่การพิมพ์ของรูปสามเหลี่ยมนี้
กรณีทดสอบ:
ใน: 2,3,4
ออก: 2.90473750965556
ใน: 3,4,5
ออก: 6
สมมติว่าทั้งสามด้าน a, b, c เสมอ a> 0, b> 0, c> 0, a + b> c, b + c> a, c + a> b
คำตอบ:
(4%~2%:[:*/+/-0,+:)
(4%~2%:[:*/+/-0,+:) 2 3 4
2.90474
(4%~2%:[:*/+/-0,+:) 3,4,5
6
รุ่น 17- ถ่านหากอินพุตอยู่ในi
:4%~%:*/(+/,+/-+:)i
เวอร์ชัน 23-char ดั้งเดิม: (%:@(+/**/@(+/-+:))%4:)
ใช้อินพุตหน้าจอผ่าน←⎕
(×/(+/t÷2)-0,t←⎕)*.5
t=input()
s=a=sum(t)/2.
for x in t:a*=s-x
print a**.5
การป้อนข้อมูล: 2,3,4
เอาท์พุท: 2.90473750966
Mathematica 23
√Times@@(+##/2-{0,##})&
Sqrt[Tr@#*Times@@(Tr@#-2#)]/4&
(Tr@#Times@@(Tr@#-2#))^.5/4&
หรือ 27 ใช้ตัวแปร
a,b,c=input()
s=(a+b+c)*.5
print(s*(s-a)*(s-b)*(s-c))**.5
ตัวอย่างการใช้งาน:
$ echo 2,3,4 | python triangle-area.py
2.90473750966
$ echo 3,4,5 | python triangle-area.py
6.0
ตัวแปร 58 ไบต์:
a,b,c=input()
print((a+b+c)*(b+c-a)*(a+c-b)*(a+b-c))**.5/4
*.5
แทน/2
?
a+b+c
เป็นเลขคี่ผลลัพธ์จะผิดพลาด สิ่งนี้เปลี่ยนแปลงใน Python 3 แม้ว่าการส่งกอล์ฟส่วนใหญ่จะถือว่าเป็น Python 2.7 เว้นแต่จะระบุไว้เป็นอย่างอื่น (เช่นเดียวกับการส่ง Perl จะถือว่าเป็น 5.10+ และไม่ใช่ Perl 6)
~].~++:d\{2*d\-*}/'"#{'\+'**0.5/4}"'+~
เนื่องจากคำถามไม่ได้ระบุเป็นอย่างอื่นฉันเลือกที่จะทำงานเฉพาะกับความยาวจำนวนเต็มเท่านั้น ต้องให้ด้านกับ STDIN คั่นด้วยช่องว่าง
ตัวอย่าง:
> 2 3 4
2.9047375096555625
{sqrt s**/(s:.5*+/x)-x}
ตัวอย่าง
k){sqrt s**/(s:.5*+/x)-x} 2 3 4
2.904738
{(×/(+/⍵÷2)-0,⍵)*÷2} 2 3 4
ตัวอย่าง:
> {(×/(+/⍵÷2)-0,⍵)*÷2} 2 3 4
2.90474
f=function(...)prod(sum(...)/2-c(0,...))^.5
ใช้สูตรของนกกระสา แต่ใช้ประโยชน์จาก vectorization ของ R
ขอบคุณ @flodel สำหรับแนวคิดของจุดไข่ปลา
การใช้งาน:
f(2,3,4)
[1] 2.904738
f(3,4,5)
[1] 6
function(...)prod(sum(...)/2-c(0,...))^.5
และคุณสามารถได้รับมากขึ้นโดยใช้จุดไข่ปลา: หรือแม้ว่าfunction(x)prod(sum(x)/2-c(0,x))^.5
คุณเรียกฟังก์ชันของคุณด้วยเวกเตอร์
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]))
ไม่ดี แต่สนุก :) นกกระสา ... แสดงให้เห็นถึงปัญหาที่ไม่สามารถแก้ไขได้ง่าย ๆ ใน JS lol
บันทึก : เรียกใช้จากคอนโซลเพื่อดูผลลัพธ์
88-> 85: ถูกลบออกa
, และb
c
(a=v[0])a
v[0]v[0]
s=(v[0]+v[1]+v[2])/2
a, b, c = 3,4,5 จะส่งผล"345"/2=172.5" and not 6. Improved without
ให้,
b` และc
แม้ว่า
s=(-v[0]-v[1]-v[2])/2
และการเปลี่ยนแปลงอื่น ๆที่จะ-
+
มันเป็นจำนวนเทอมดังนั้นมันจึงถูกยกเลิก
บันทึกด้วย 4 ไบต์โดย @swish
ส่งคืนคำตอบที่แน่นอน:
Area@SSSTriangle@
ตัวอย่าง
Area@SSSTriangle[2,3,4]
ในการส่งคืนคำตอบในรูปแบบทศนิยมจำเป็นต้องใช้ไบต์สองตัวเพิ่มเติม
N@Area@SSSTriangle[2,3,4]
2.90474
Area@*SSSTriangle
readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
การนำสูตรของนกกระสาไปข้างหน้า ตัวอย่างการเรียกใช้:
Prelude> readLn>>=(\l->print$sqrt$product$map(sum l/2-)$0:l)
[2,3,4]
2.9047375096555625
Prelude>
โปรดทราบว่ามันรับอินพุตตัวเลขใด ๆ ไม่เพียง แต่จำนวนเต็ม และถ้าอินพุตมีอยู่แล้ว l คำตอบจะต้องมีความยาว 36 ตัวอักษรเท่านั้นและหากเราไม่สนใจพิมพ์คำตอบโซลูชันจะต้องมีความยาว 30 ตัวเท่านั้น ยิ่งไปกว่านั้นถ้าเราสามารถอนุญาตให้เราเปลี่ยนรูปแบบการป้อนข้อมูลเราสามารถลบอักขระได้อีก 3 ตัว ดังนั้นหากข้อมูลของเราดูเหมือน [2,3,4,0.0] และมีอยู่แล้วใน l เราจะได้รับคำตอบด้วย:
sqrt$product$map(sum l/2-)l
ตัวอย่างการเรียกใช้:
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]);
useage:
php triangle.php
2,3,4
เอาท์พุท: 2.9047375096556
ฉันไม่คิดว่าฉันจะทำให้มันสั้นกว่านี้? ฉันยังใหม่กับการเล่นกอล์ฟ ทุกคนแจ้งให้เราทราบหากฉันมองข้ามบางสิ่ง
ขอบคุณ Primo ที่ช่วยฉันด้วย 1 ไบต์ฮ่า ๆ
($s-$c[2])
สามารถถูกแทนที่ด้วย$s-=$c[2]
หนึ่งไบต์ แต่นั่นคือทั้งหมดที่ฉันเห็น
s=(eval('abc '.split('').join('=prompt()|0;'))+a+b)/2;Math.sqrt(s*(s-a)*(s-b)*(s-c))
โซลูชัน JavaScript อื่นตามสูตรของนกกระสา แต่ลองใช้วิธีอื่นในการโหลดตัวแปร จำเป็นต้องเรียกใช้จากคอนโซล แต่ละด้านถูกป้อนในพร้อมต์แยกต่างหาก
แก้ไข : ใช้ประโยชน์จากค่าส่งคืนของeval
เพื่อบันทึก 2 อักขระ เต้น @tomsmeding, wahoo! :)
ตามสูตรของนกกระสาพีชคณิตมัธยมปลายสู่กอล์ฟ
=SQRT(((A1+B1)^2-C1^2)*(C1^2-(A1-B1)^2))/4
Ungolfed / Unalgebra'ed
=SQRT((A1+B1+C1)/2*(((A1+B1+C1)/2)-A1)*(((A1+B1+C1)/2)-B1)*(((A1+B1+C1)/2)-C1))
½*Nx
NmnU ×*U q
บันทึก 2 ไบต์ด้วยETH ที่ชี้ให้เห็นบรรทัดใหม่ที่ซ้ำซ้อนและวิธีการอื่นในการลดอาร์เรย์
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))}
ผ่านด้านข้างเป็นอาร์กิวเมนต์
สำหรับการป้อนข้อมูล2 3 4
ค่าของs
เป็น(2+3+4)/2.
เป็นสตริง การประเมินผล FTW สองครั้ง
proc
มันขยายไปถึง 81 ไบต์เท่านั้น: tio.run/##NYo7CoAwEAV7T/…
โดยทั่วไปแล้วนกกระสาสูตร:
f(a,b,c)=(p=(a+b+c)/2;sqrt(p*(p-a)*(p-b)*(p-c)))
4⁻¹√(sum(Ansprod(sum(Ans)-2Ans
เริ่มจากสูตรประจำของ Heron ที่เขียนโดย Kenneth Hammond (Weregoose)ฉันเล่นกอล์ฟสองไบต์ โปรดทราบว่า TI-BASIC นั้นเป็นโทเค็นและแต่ละโทเค็นจะเหมือนกันAns
และprod(
มีขนาดหนึ่งหรือสองไบต์ในหน่วยความจำของเครื่องคิดเลข
การป้อนข้อมูลผ่านเช่นในรูปแบบAns
{a,b,c}:[program name]
อธิบาย:
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
อีกหนึ่งการใช้งานสูตรของฮีโร่
#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;
}
{√×/(+/⍵÷2)-0,⍵}
หนึ่งมีการแปลงสูตร Erone ถ้า a, b, c เป็นด้านของรูปสามเหลี่ยม
p =(a+b+c)/2
Area=√p*(p-a)(p-b)(p-c)
เป็นภาษา APL ... ทดสอบ
f←{√×/(+/⍵÷2)-0,⍵}
f 2 3 4
2.90473751
f 3 4 5
6