ประเมินอัตราส่วนภาพของสามเหลี่ยม


35

กำหนดสามความยาวของรูปสามเหลี่ยมประเมินอัตราส่วนกว้างยาวของARตามสูตรดังนี้

ป้อนคำอธิบายรูปภาพที่นี่

ที่ไหน

ป้อนคำอธิบายรูปภาพที่นี่

ยิ่งสามเหลี่ยมมุมฉากมีความสมดุลมากเท่าไหร่1อัตราส่วนที่ใกล้เคียงกับอัตราส่วนก็ยิ่งมากขึ้นเท่านั้น อัตราส่วนกว้างกว่าหรือเท่ากับ1สามเหลี่ยมที่ถูกต้อง

ปัจจัยการผลิต

อินพุตเป็นตัวเลขบวกสามตัวจริงซึ่งสามารถใส่ในรายการหรือสิ่งอื่นที่คล้ายกันได้ถ้าต้องการ

โปรแกรมของคุณจะต้องส่งออกค่าเดียวกันโดยไม่คำนึงว่าลำดับความยาวของสัญญาณทั้งสามจะเป็นเท่าไร

ทั้งสามตัวเลขจะเป็น sidelengths ที่ถูกต้องของรูปสามเหลี่ยม (สามเหลี่ยมเลวเช่นเดียวกับ sidelengths 1, 1และ2จะไม่ได้รับเป็น input) คุณไม่จำเป็นต้องกังวลเกี่ยวกับความไม่ถูกต้องของจุดลอยตัวเมื่อค่าใกล้เคียงกับสามเหลี่ยมที่เสื่อมสภาพมาก (เช่นเป็นที่ยอมรับได้ว่าโปรแกรมของคุณจะผิดพลาดdivision by 0ในการป้อนข้อมูล[1, 1, 1.9999999999999999])

อินพุตสามารถถูกกำหนดให้ผ่านSTDINเป็นอาร์กิวเมนต์ของฟังก์ชันหรืออะไรก็ได้ที่คล้ายกัน

เอาท์พุท

ผลลัพธ์เป็นจำนวนจริงที่มากกว่าหรือเท่ากับ1กับความแม่นยำมาตรฐานที่เป็นที่ยอมรับในภาษาของคุณ

เอาต์พุตอาจถูกพิมพ์ไปยังSTDOUTส่งคืนจากฟังก์ชันหรือสิ่งอื่นที่คล้ายคลึงกัน

กรณีทดสอบ

Inputs                   Output

  1      1      1         1
  3      4      5         1.25
 42     42   3.14         ≈ 6.9476
 14      6     12         1.575
  6     12     14         1.575
0.5    0.6    0.7         ≈ 1.09375

เกณฑ์การให้คะแนน

นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ


ควรs BE (A + B + C) / 3 ?
costrom

3
@costrom ไม่สูตรถูกต้อง s คือsemiperimeter ของรูปสามเหลี่ยม สูตรของคุณจะไม่ถูกกำหนดสำหรับรูปสามเหลี่ยมด้านเท่า
ทำให้เสียชีวิต

ฉันจะได้รับลอยสำหรับการป้อนข้อมูลหรือฉันต้องการจำนวนเต็มเช่นกัน?
Erik the Outgolfer

@ErikGolferエリックゴルファーมันเป็นที่ยอมรับในการป้อนข้อมูลแทน42.0 42
เสียชีวิต

@ ขอบคุณขอบคุณ นอกจากนี้อินพุตทั้งหมดสามารถเป็นได้0หรือไม่
Erik the Outgolfer

คำตอบ:


19

เยลลี่ 6 ไบต์

คำตอบนี้จะขึ้นอยู่กับคำตอบของ 05AB1E Emigna ขอบคุณเดนนิสและลินน์มากสำหรับความช่วยเหลือในการหาคำตอบ ยินดีต้อนรับคำแนะนำการเล่นกอล์ฟ! ลองออนไลน์!

S_Ḥ⁸÷P

Ungolfing

           Implicit argument [a, b, c].
S          Take the sum, a+b+c or 2*s
  Ḥ        Take the double, [2*a, 2*b, 2*c].
 _         Vectorized subtract, giving us [2*(s-a), 2*(s-b), 2*(s-c)].
   ⁸÷      Vectorized divide the initial left argument, the input [a, b, c],
             by [2*(s-a), 2*(s-b), 2*(s-c)].
     P     Take the product giving us the aspect ratio, abc/8(s-a)(s-b)(s-c).

4
6 ไบต์และคุณยังต้องการคำแนะนำการเล่นกอล์ฟอยู่ใช่ไหม :-D
Luis Mendo

1
@LuisMendo หากเป็นไปได้ให้ตรวจสอบ: D
Sherlock9

1
“ พุช”นั้นไม่ถูกต้องนัก เจลลี่ไม่ได้เป็นแบบกองซ้อน ค่อนข้าง⁸÷ได้รับมากออกจากห่วงโซ่เป็นหน่วยและควรอ่านเป็นแบ่งอาร์กิวเมนต์ซ้ายครั้งแรกโดยสิ่งนี้หรือบางสิ่งบางอย่าง
ลินน์

1
@ ลินน์ฉันเล่นกอล์ฟจริงมาหลายเดือนแล้ว คำศัพท์เกี่ยวกับสแต็กมีความปลอดภัยในสมองของฉัน: D ควรได้รับการแก้ไขแล้ว
Sherlock9

56

เยลลี่ขนาด 7 ไบต์

SH_÷@HP

ลองออนไลน์!

คำอธิบาย

ป้อนคำอธิบายรูปภาพที่นี่

อ่านโซ่นี้กัน

  • [a, b, c]อาร์กิวเมนต์นัยคือ

  • Sครั้งแรกที่เราอ่าน สิ่งนี้ต้องใช้ผลรวม: a + b + c.

  • Hจากนั้นเราอ่าน สิ่งนี้จะลดลงครึ่งหนึ่ง: (a + b + c)/2. (นี่คือs.)

  • จากนั้นเราอ่าน dyad _(ลบ) ตามด้วย dyad อื่น นี่คือเบ็ด : มันขาดการโต้แย้งที่ถูกต้องเพื่อให้ได้รับการโต้แย้งไปห่วงโซ่นี้ให้เรา[a, b, c] [s-a, s-b, s-c](นี่คือรูปแบบลูกโซ่ที่ห้าในตารางที่นี่ )

  • ÷@Hจากนั้นเราอ่านคู่คู่-monad นี่คือทางแยก : ÷@คือการหารด้วยข้อโต้แย้งที่พลิกและHลดลงครึ่งหนึ่งดังนั้นค่าการทำงานของเราจะได้รับHการโต้เถียงกับสายโซ่นี้÷โดยมัน vectorizes นี้; [(a/2)/(s-a), (b/2)/(s-b), (c/2)/(s-c)]เราจะเหลือ (นี่คือลวดลายลูกโซ่ที่สองในตารางที่นี่ )

  • สุดท้ายเราใช้ผลิตภัณฑ์ที่มีได้รับเราPabc/(8(s-a)(s-b)(s-c))

ดูกราฟที่มีลักษณะคล้ายต้นไม้ว่าลิงก์เชื่อมโยงกันอย่างไร


8
ภาพดูดีมาก! สัมผัสที่ดี!
DavidC

2
ฉันทำให้รูปบนสุดเล็กลงและเปลี่ยนรูปที่สองเป็นลิงค์
Lynn

ฉันเห็นภาพและคิดในทันทีว่า "Nice one, Lynn!" ก่อนที่จะดูว่าใครโพสต์มัน ;-)
ETHproductions

7
คำอธิบายที่ดีที่สุดที่ฉันเคยเห็นเกี่ยวกับโปรแกรม Jelly ฉันยังไม่เข้าใจ แต่ใกล้เข้ามา!
Sparr

ฉันวิ่งตัวอย่างกับกรณีทดสอบ ´6,0.0,14.0 `และมันให้` -0.88888888888888888888 ´แทน 1.575 ดังที่แสดงในกรณีทดสอบ เป็นปัญหากับกรณีทดสอบหรือรหัสของคุณหรือไม่
MBaas

13

เยลลี่ 6 ไบต์

S÷_2Pİ

ลองออนไลน์!

มันทำงานอย่างไร

S÷_2Pİ  Main link. Argument: [a, b, c]

S       Sum; compute 2s := a + b + c.
 ÷      Divide; yield [2s ÷ a, 2s ÷ b, 2s ÷ c].
  _2    Subtract 2; yield [2s ÷ a - 2, 2s ÷ b - 2, 2s ÷ c - 2].
    P   Product; yield (2s ÷ a - 2)(2s ÷ b - 2)(2s ÷ c - 2).
     İ  Invert; yield 1 ÷ (2s ÷ a - 2)(2s ÷ b - 2)(2s ÷ c - 2).

อ่าและฉันพยายามที่จะใช้³⁴⁵เป็นข้อโต้แย้ง ...
เอริก Outgolfer

11

JavaScript ขนาด 38 ไบต์

นี่คือแลมบ์ดา( curried ):

a=>b=>c=>a*b*c/(b+c-a)/(a+c-b)/(a+b-c)

(หากคุณกำหนดให้ตัวแปรfคุณต้องเรียกมันว่าf(3)(4)(5))


เอาชนะฉันไปได้ภายในไม่กี่วินาที :) ใจอธิบายว่าสูตรทำงานคล้ายกับสูตรที่ให้มาได้อย่างไร
Kritixi Lithos

@KritixiLithos เพียงแค่เสียบs = 1/2(a+b+c)เข้ากับสูตรและทำให้ง่ายขึ้น: D (เช่นs-a = .5*b+.5*c-.5*aและปัจจัยสามประการที่.5ถูกยกเลิกด้วย8)
ข้อบกพร่อง

5
(a,b,c)=>มีความยาวเท่ากันและมีค่าใช้จ่ายในการโทรน้อยกว่า;)
ETHproductions

4
แต่ฉันรักแกง: D
ข้อบกพร่อง


8

MATL , 8 7 ไบต์

tsGE-/p

ลองออนไลน์!

คำอธิบาย

ลองใช้อินพุต[3 4 5]เป็นตัวอย่าง

t    % Take input implicitly. Duplicate
     % STACK: [3 4 5], [3 4 5]
s    % Sum of array
     % STACK: [3 4 5], 12
G    % Push input again
     % STACK: [3 4 5], 12, [3 4 5]
E    % Multiply by 2, element-wise
     % STACK: [3 4 5], 12, [6 8 10]
-    % Subtract, element-wise
     % STACK: [3 4 5], [6 4 2]
/    % Divide, element-wise
     % STACK: [0.5 1 2.5]
p    % Product of array. Implicitly display
     % STACK: 1.25

8

R, 34 29 ไบต์

x=scan();prod(x/(sum(x)-2*x))

อ่านข้อมูลจาก stdin และเก็บไว้เป็น xR-เวกเตอร์ จากนั้นใช้ vectorization ของ R เพื่อสร้างตัวส่วน


7

Haskell, 36 ไบต์

นี่เป็นการกำหนดฟังก์ชั่น#ซึ่งใช้เวลาสามข้อโต้แย้ง

(a#b)c=a*b*c/(b+c-a)/(a+c-b)/(a+b-c)

คุณต้องโทรหามันดังนี้: (3#4)5

ค่อนข้างนาน แต่อาจตีได้มากกว่า:

p=product
f v=p v/p((sum v-).(2*)<$>v)

6

MATLAB, 64 38 25 ไบต์

นี่คือฟังก์ชั่น anymous ที่ใช้สูตรตามที่ให้ไว้:

@(v)prod(v./(sum(v)-2*v))

[3,4,5]จะถือว่าการป้อนข้อมูลที่จะเป็นรายชื่อของสามค่าเช่น ตัวอย่างนี้ใช้ในคำอธิบายต่อไปนี้:

             sum(v)        = 3+4+5 = 12
             sum(v)-2*v    = 12 - 2*[3,4,5] = 12 - [6,8,10] = [6,4,2]
         v./(sum(v)-2*v))  = [3,4,5] ./ [6,4,2] = [0.5,1,2.5]
    prod(v./(sum(v)-2*v))  = 0.5 * 1 * 2.5 = 1.25

6

Mathematica ขนาด 20 ไบต์

1##&@@(#/(Tr@#-2#))&

รับอินพุตเป็นรายการของค่าสามค่าซึ่งเรียกว่า#ภายในฟังก์ชัน Tr@เป็นทางที่สั้นที่สุดที่จะสรุปรายการ (จะได้รับ2s) และ1##&@@(...)คูณสามปัจจัยi/(2s-2i)สำหรับในia, b, c

หากอินพุตเป็นจำนวนเต็มหรือจำนวนตรรกยะคุณจะได้ผลลัพธ์ที่แน่นอน



5

OCaml, 51 ไบต์

fun a b c->a*.b*.c/.(b+.c-.a)/.(a+.c-.b)/.(a+.b-.c)

เย่โอเปอเรเตอร์แยกสำหรับโฟลต ...


5

สงสัย 48 ไบต์

@@@prod[#0#1#2/1- +#1#0#2/1- +#2#0#1/1- +#2#1#0]

ฉีก

การใช้งาน:

(((@@@prod[#0#1#2/1* * - +#1#0#2- +#2#0#1- +#2#1#0])3)4)5

คำอธิบาย

การเรียกใช้ฟังก์ชันมีค่าใช้จ่ายสูงใน Wonder เมื่อเปรียบเทียบกับผู้ให้บริการมัดในภาษาอื่น ด้วยเหตุนี้ฉันจึงใส่คำทั้งหมดไว้ในอาร์เรย์และได้ผลลัพธ์ของผลลัพธ์แทนที่จะคูณทุกเทอมเดียว รหัสจะเทียบเท่ากับสิ่งที่ชอบ:

(a,b,c)=>product([a,b,c,1/(b+c-a),1/(a+c-b),1/(a+b-c)])

1
อืมทำไมต้อง "RIP"
Luis Mendo

นานกว่าที่จำเป็น / คาดหวังมาก
Mama Fun Roll

5

อันที่จริง , 10 8 ไบต์

คำตอบนี้จะขึ้นอยู่กับเดนนิสคำตอบของวุ้นที่ดีเยี่ยม ยินดีต้อนรับคำแนะนำการเล่นกอล์ฟ! ลองออนไลน์!

;Σ♀/♂¬πì

Ungolfing

     Implicit input [a, b, c].
;    Duplicate [a, b, c].
Σ    sum() to get twice the semiperimeter, 2*s.
♀/   Vectorized divide 2*s by [a, b, c] to get [2*s/a, 2*s/b, 2*s/c].
♂¬   Vectorized subtract 2 to get [2*s/a-2, 2*s/b-2, 2*s/c-2].
π    Get the product of the above to get 8*(s/a-1)*(s/b-1)*(s/c-1).
     This is the same as 8(s-a)(s-b)(s-c)/abc.
ì    Invert to get the aspect ratio, abc/8(s-a)(s-b)(s-c).
     Implicit return.

5

Minecraft 1.8, 1607 bytes + 85 blocks = 1692 blytes

คำเตือน: ไม่เล่นกอล์ฟ แข็งแรงเล่นกอล์ฟจะใช้เวลาถึง1 / 3 blytes น้อย

นี่คือภาพหน้าจอที่แสดงความคิดเห็น:

ป้อนคำอธิบายรูปภาพที่นี่

  • อินพุตคือa, bและc, และเอาต์พุตคือfin

  • finและตัวแปรอื่น ๆ ทั้งหมดใน Minecraft เป็นจำนวนเต็มดังนั้นความแม่นยำของ Minecraft มาตรฐานคือ 0 จุดทศนิยม

  • เส้นขอบสีเขียว: บล็อกคำสั่งทางด้านซ้ายจะเปิดใช้งานหลังจากนั้นทางด้านขวาซึ่งเป็นเพียงการเริ่มต้นตัวแปร

  • คันโยก (สี่เหลี่ยมผืนผ้าสีเทาสีน้ำตาลด้านขวาล่าง) เป็นตัวกระตุ้นการคุมกำเนิด

  • มันต้องใช้เวลาขึ้นมากเนื่องจากวิธีการจัดการ Minecraft ตัวแปร ภาพรวมที่ง่ายมาก:

    • /scoreboard objectives add name dummyสร้างตัวแปรใหม่ที่ชื่อว่า " name"

    • /scoreboard players set @p name numberกำหนดตัวแปรเพื่อname numberNumber ต้องเป็นตัวเลขจริงไม่ใช่ตัวแปร

    • /scoreboard players operation @p name += @p name2เพิ่มขึ้นโดยname ต้องเป็นตัวแปรไม่ใช่ตัวเลขname2name2

      • -=, /=, *=, =และอื่น ๆ สามารถนำมาใช้แทน+=การพร่องคูณหาร ฯลฯ
  • ฉันจะไม่โพสต์คำสั่งทั้งหมด 43 รายการที่นี่ มันจะช่วยในการตีกอล์ฟ แต่ก็ช่วยให้ฉันลอกเลียนแบบได้อย่างบ้าคลั่ง

  • หากใช้บล็อกคำสั่ง 1.9 จะเป็นการแก้ปัญหา (อย่างน้อย) ใช้ 42 บล็อกน้อยกว่า หากจะใช้ตัวแปรตัวอักษรหนึ่งตัวจะสามารถบันทึกได้เกือบ 200 ไบต์


4

Java, 38 ไบต์

(a,b,c)->a*b*c/(b+c-a)/(a-b+c)/(a+b-c)

การทดสอบและ ungolfed

public class Pcg101234 {
  interface F {
    double f(double a, double b, double c);
  }
  public static void main(String[] args) {
    F f = (a,b,c)->a*b*c/(b+c-a)/(a-b+c)/(a+b-c);

    System.out.println(f.f(1,1,1));
    System.out.println(f.f(3,4,5));
    System.out.println(f.f(42,42,3.14));
    System.out.println(f.f(14,6,12));
    System.out.println(f.f(6,12,14));
    System.out.println(f.f(0.5,0.6,0.7));
  }
}

ทดสอบ!

เอาท์พุต

1.0
1.25
6.947606226693615
1.575
1.575
1.09375

ฉันรู้สึกเหมือน(a,b,c)กำลังโกงอยู่ที่นี่เพราะมันไม่มีข้อมูลประเภท IMO อินเตอร์เฟสแลมบ์ดาโดยปริยาย (ในกรณีของคุณF) ควรนับเป็นผลรวมไบต์
F. จอร์จ

4
@ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu Lambdas ขอแนะนำอย่างยิ่ง นอกจากนี้รายการ Java 8 ส่วนใหญ่จะทำงานเช่นนั้นโดยไม่มีข้อสังเกตใด ๆ หากคุณไม่เห็นด้วยและคิดว่าฉันโกงฉันขอเชิญคุณให้ถามอย่างเป็นทางการในเมตาว่าสัญลักษณ์นี้เป็นที่ยอมรับหรือไม่ ในขณะเดียวกันฉันจัดแนวกับคำตอบ Java 8 ก่อนหน้า
Olivier Grégoire

4

แมงกะพรุนขนาด17 16 ไบต์

ขอบคุณ Zgarb ที่ช่วยประหยัด 1 ไบต์

p%/*-)/+i
    2%

ลองออนไลน์!

คำอธิบาย

นี้เป็นไปตามสูตรซึ่งกันและกันเช่นเดียวกับคำตอบของเดนนิส

ในสัญกรณ์การทำงานแบบดั้งเดิมมากขึ้นโปรแกรมด้านบนอ่านดังนี้:

print(
  1 / fold(
    multiply,
    fold(add, i) / i - 2
  )
)

iรายการอินพุตอยู่ที่ไหน โปรดทราบว่าfold(multiply, ...)เพียงคำนวณผลิตภัณฑ์และfold(add, ...)ผลรวมเพื่อให้เราสามารถทำสิ่งนี้ให้ง่ายขึ้นเพื่อ:

print(1 / product(sum(i) / i - 2))

การsum(i) / iดำเนินการผ่านเบ็ด)/+ซึ่งกำหนดฟังก์ชั่นยูนารีใหม่ที่จะทำทั้งสองขั้นตอนในครั้งเดียว


บันทึกไบต์ที่มีตะขอ
Zgarb

4

Dyalog APL , 10 9 ไบต์

×/⊢÷+/-+⍨

นี่คือรถไฟฟังก์ชั่นที่ไม่ระบุชื่อ(บนส้อมของส้อมของส้อม) ซึ่งหมายความว่าทุกฟังก์ชั่นย่อยจะใช้กับการโต้แย้งภายในโครงสร้างต่อไปนี้:

 ┌─┴─┐          
×/ ┌─┼───┐      
    ÷ ┌─┼──┐  
      +/ - +⍨

ลองใช้ออนไลน์!

×/ ผลิตภัณฑ์ของ

ข้อโต้แย้ง

÷ หารด้วย

+/ ผลรวมของการขัดแย้ง

- ลบ

+⍨ อาร์กิวเมนต์เพิ่มขึ้นสองเท่า (เพิ่มไปยังตัวเอง)

พื้นหลังทางคณิตศาสตร์

ngn โกนไบต์


สวัสดีอดัม เตือนให้ฉันถามคุณเกี่ยวกับ´⊢´ สัปดาห์หน้าถ้าฉันลืม :-)
MBaas

ฉันไม่ทราบว่าลิงก์ "พื้นหลัง" เกี่ยวข้องกับคำตอบนี้อย่างไรเนื่องจากฉันเห็นว่าไม่มีอัลกอริทึมเลย นอกจากนี้คุณสามารถเพิ่มข้อมูลบางอย่างเกี่ยวกับลำดับการดำเนินการได้หรือไม่ ฉันพยายามทำซ้ำคำตอบนี้ในภาษาที่ต่างกันด้วยลำดับการดำเนินการที่แตกต่างกัน แต่ฉันได้รับคำตอบที่แตกต่างจากคำถามนั้นเสมอ
แมว

@cat มันไม่ได้ตั้งใจที่จะให้อัลกอริธึมเพียงเพื่ออธิบายว่าอัตราส่วนภาพคืออะไรเนื่องจากไม่มีหน้าดังกล่าวใน Wikipedia APL เป็นจากขวาไปซ้ายหมายความว่าทุกฟังก์ชั่นจะใช้สิ่งที่อยู่ทางขวาเป็นอาร์กิวเมนต์ ดังนั้นสามารถอ่านได้จากซ้ายไปขวาเหมือนในคำอธิบาย
อดัม


3

dc, 49 ไบต์

5k?dsa?dsb?dsc++2/sslalblc**lsla-lslb-lslc-8***/p

การดำเนินการตามสูตรที่กำหนดโดยตรง แสดงพร้อมต์สำหรับสามอินพุตเมื่อร้องขอบนสามบรรทัดที่แยกกันและส่งออกค่าทศนิยมด้วย 5 หลักหลังจากจุดทศนิยมไปยังบรรทัดถัดไป

คำอธิบาย

5k                                                # Set the output precision to 5 digits after the decimal
  ?dsa                                            # Prompt for first input value on first line, duplicate it, and then store it in register `a`
      ?dsb                                        # Prompt for second input, duplicate it, and store it in register `b`
          ?dsc                                    # Prompt for third input, duplicate it, and store it in register `c`
              ++2/ss                              # Sum up the 3 values on the main stack, then divide sum by 2 and store the result in register `s`
                    lalblc**                      # Copy all three values from registers `a`,`b`,`c` onto the main stack, find their product, and push result to top of main stack
                            lsla-                 # Copy value from register `s` onto main stack, subtract register `a`'s value from it, and push result to main stack
                                 lslb-            # Copy value from register `s` onto main stack, subtract register `b`'s value from it, and push result to main stack
                                      lslc-       # Copy value from register `s` onto main stack, subtract register `c`'s value from it, and push result to main stack
                                           8***   # Find the product of the top three values and 8 and then push the result to main stack
                                               /p # Divide the second to top value (a*b*c) by the top of stack value (8*(s-a)*(s-b)*(s-c)), push the result to the main stack, and then output the result to STDOUT

3

TI-Basic 11 ไบต์

{A B C}การป้อนข้อมูลที่ควรจะเป็นในรูปแบบของรายการเช่น

prod(Ans)/prod(sum(Ans)-2Ans

ภาพนี้อาจช่วยได้ (จำไว้ว่า2s = a+b+c):

      abc abc abc prod (ตอบ)
---------------- = --------------------- = ----------- -------- = -------------------
8 (sa) (sb) (sc) (2s-2a) (2s-2b) (2s-2c) (a + b + c) (a + b + c) (1-2 {a, b, c}) ผลิตภัณฑ์ (รวม (Ans) -2Ans)


2

Python ขนาด 55 ไบต์

def f(x,y,z):s=x+y+z;return 1/((s/x-2)*(s/y-2)*(s/z-2))

เครดิตเดนนิส ฉันเพิ่งรังเพลิง ใน Python เป็นภาษาที่ถูกทอดทิ้งมาก


2

ออกมา, 83 ไบต์

สมมติว่าพารามิเตอร์จุดลอยตัวเริ่มต้นที่สแต็กจุดลอยตัว ออกจากผลลัพธ์บนสแต็กจุดลอยตัว การใช้สแต็กสำหรับ params / return เป็นมาตรฐานสำหรับ Forth

: p 3 fpick ;
: T p p p ;
: f 0 s>f T f- f+ f- T f+ f- f* T f- f- f* 1/f f* f* f* ;

ลองออนไลน์ -มีกรณีทดสอบทั้งหมด

a*b*c * 1/ ( -(a+b-c) * -(b+c-a) * (a+c-b) )ใช้สูตร โปรแกรมทั้งหมดนี้ใช้สแต็กจุดลอยตัวค่อนข้างมาก ยกเว้นในกรณีที่เป็นใน3 3 fpickโปรแกรมนี้ต้องการล่ามที่รองรับfpick(Ideone ทำงานได้, repl.it ไม่ได้)

คำอธิบาย: เล่น กอล์ฟน้อยลงเล็กน้อย

\ 3 fpick takes the 3rd element (0-indexed) and pushes a copy
\ Used to copy parameters on the stack over another number 'x' ( a b c x -> a b c x a b c )
: f3p 3 fpick 3 fpick 3 fpick ;

: f                     \ define a function f
0 s>f f3p f- f+ f-      \ push a zero, copy params, compute 0-(a+b-c)
                        \ the zero allows me to copy (I need an 'x' to jump over)
f3p f+ f- f*            \ copy params and compute -(b+c-a), multiply by previous result
                        \ the negatives miraculously cancel
f3p f- f- f*            \ copy and compute (a+c-b), multiply by previous result
1/f f* f* f* ;          \ take the reciprocal and multiply by a*b*c
                        \ the result is left on the floating point stack

2

ised : 19 ไบต์

@*$1/@*{@+$1-2.*$1}

เรียกว่าเป็นised --l 'inputfile.txt' '@*$1/@*{@+$1-2.*$1}' ตำแหน่งที่inputfile.txtสามารถเป็นไฟล์ที่มีอาเรย์คั่นด้วยช่องว่างหรือ-เพื่อรับจากไปป์ / stdin

รุ่น Unicode (จำนวนไบต์เดียวกัน แต่น้อยกว่า 3 ตัวอักษร):

Π$1/Π{Σ$1-2.*$1}

น่าเสียดายที่ต้องisedสูญเสียอักขระจำนวนมากสำหรับไวยากรณ์อาร์กิวเมนต์ของอินพุต


2

vba, 76

Function r(a,b,c)
s=(a+b+c)/2:r=(a*b*c)/(8*(s-a)*(s-b)*(s-c))
End Function

โทรไปด้วย

? R (3,4,5)

หรือใน excel ด้วย

r = (5,12,13)


คุณต้องการบันทึก 6 ไบต์ด้วยอัลกอริทึมของ @ SuperJedi224:Public Function r(a,b,c):r=a*b*c/(b+c-a)/(a-b+c)/(a+b-c):End Function
steenbergh



2

k, 19 ไบต์

{(*/x)%8*/-x-+/x%2}

ประเมินจากขวาไปซ้าย - หารรายการ x 2 ด้วยผลรวมแล้วลบออกจากต้นฉบับ x ลบคำตอบและรับผลลัพท์ของผลลัพธ์และ 8 ผลลัพธ์คือตัวส่วน, ตัวเศษเป็นผลคูณของรายการ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.