คุณได้รับของขวัญคริสต์มาสมากแค่ไหน


32

ใช่เท่าไหร่เท่าไหร่ ...

อย่างที่เราทราบกันดีว่าของขวัญชิ้นใหญ่นั้นดีกว่าของเล็ก ดังนั้นมูลค่าของของขวัญควรวัดในปริมาณรวมเสมอไม่ใช่จำนวนของขวัญน้ำหนักหรือแม้แต่ราคารวม

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

งานของคุณเป็นเรื่องง่าย: สร้างโปรแกรมที่รับรายการส่วนข้อมูลเป็นอินพุตในรูปแบบที่เหมาะสมและแสดงผลปริมาณรวมของงานนำเสนอของคุณ ขนาดของแต่ละของขวัญจะเป็นชุดของตัวเลขสามตัวหรือตัวเลขเดียว ถ้าใส่เป็นเลขสาม ( L, W, H) L x W x Hปัจจุบันเป็นทรงสี่เหลี่ยมขนาด ถ้ามันเป็นหมายเลขเดียว ( R) Rปัจจุบันเป็นรูปทรงกลมของรัศมี

กฎ:

  • สามารถเป็นได้ทั้งโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบ
  • อินพุตสามารถอยู่ในรูปแบบที่สะดวก
    • ถ้าเป็นที่ต้องการทรงกลมอาจแสดงด้วยตัวเลขตามด้วยศูนย์สองศูนย์
    • ทรงลูกบาศก์จะมีมิติที่ไม่ใช่ศูนย์ทั้งหมดเสมอ
  • ผลลัพธ์ควรเป็นตัวเลขทศนิยมเดียว
    • เอาต์พุตเพิ่มเติมได้รับการยอมรับตราบใดที่เห็นได้ชัดว่าคำตอบคืออะไร
    • เอาต์พุตต้องมีอย่างน้อยสองหลักหลังจุดทศนิยม
    • เอาต์พุตสามารถอยู่ในรูปแบบมาตรฐาน / สัญกรณ์วิทยาศาสตร์หากจำนวนมากกว่า 1,000
    • ในกรณีที่ภาษาของคุณไม่มีค่าคงที่ Pi คำตอบควรแม่นยำถึง 9999.99

ตัวอย่าง:

((1,4,3),(2,2,2),(3),(4,4,4))
197.0973    // (1*4*3 + 2*2*2 + 4/3*pi*3^3 + 4*4*4)

(5)
523.5988

(5,0,0)
523.5988

ลีดเดอร์บอร์ด

ส่วนย่อยของสแต็กที่ด้านล่างของโพสต์นี้สร้างแคตตาล็อกจากคำตอบ a) เป็นรายการของวิธีแก้ปัญหาที่สั้นที่สุดต่อภาษาและ b) เป็นลีดเดอร์บอร์ดโดยรวม

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

## Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

## Ruby, <s>104</s> <s>101</s> 96 bytes

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของสองไฟล์หรือคุณต้องการแสดงรายการการลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

## Perl, 43 + 2 (-p flag) = 45 bytes

คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างข้อมูล:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


3
ไม่มีผู้หญิงคนไหนสวมหมวกในกล่องทรงกระบอกตลกเหรอ?
จัดการ

2
@ งานการผลิตไม่มีผู้หญิงทุกคนจะได้รับหมวกกะลาและคุณสามารถปรับให้เข้ากับทรงกลมได้อย่างง่ายดาย = P
Stewie Griffin

1
ฉันถือว่า(5)เป็นเพียงตัวอย่างบางส่วนและรหัสของเราต้องจัดการ((5))เท่านั้น
จัดการด้วยตนเอง

2
หากภาษาที่เราเลือกไม่มีค่าคงที่ Pi จำเป็นต้องใช้ความแม่นยำเท่าใด
Dennis

1
@ manatwork, + และ * ก็โอเคตราบเท่าที่พวกเขาไม่ได้หมายถึงการเพิ่มและการคูณ (หรือการดำเนินการอื่น ๆ ) ในภาษาที่คุณใช้
Stewie Griffin

คำตอบ:


10

เยลลี่ , 19 18 ไบต์

Zµ*3×1420÷339Ḣo@PS

ลองออนไลน์!

แต่น่าเสียดายที่วุ้นไม่ได้πคงยังและ vectorizer ไม่จัดการอย่างถูกต้องลอย

เพื่อเอาชนะปัญหาเหล่านี้แทนการคูณด้วย4π / 3เราคูณด้วย1420และหารด้วย339 ตั้งแต่1420 ÷ 339 = 4.18879056 …และ4π / 3 = 4.18879020 …นี่มีความแม่นยำเพียงพอที่จะปฏิบัติตามกฎ

เวอร์ชันใหม่ล่าสุดของ Jelly สามารถทำงานนี้ให้สำเร็จใน14 ไบต์ด้วยความแม่นยำที่ดีกว่า

Zµ*3×240°Ḣo@PS

ลองออนไลน์!

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

Zµ*3×1420÷339Ḣo@PS  Left argument: A, e.g., [[1, 2, 3], [4, 0, 0]]

Z                   Zip A; turn A into [[1, 4], [2, 0], [3, 0]].
 µ                  Begin a new, monadic chain with zip(A) as left argument.
  *3                Cube all involved numbers.
    ×1420           Multiply all involved numbers by 1420.
         ÷339       Divide all involved numbers by 339.
                    This calculates [[4.19, 268.08], [33.51, 0], [113.10, 0]]
             Ḣ      Head; retrieve the first array.
                    This yields [4.19, 268.08].
                P   Take the product across the columns of zip(A).
                    This yields [6, 0].
              o@    Apply logical OR with swapped argument order to the results.
                    This replaces zeroes in the product with the corresponding
                    results from the left, yielding [6, 268.08].
                 S  Compute the sum of the resulting numbers.

เวอร์ชันที่ไม่ใช่คู่แข่งใช้×240°แทน×1420÷339ซึ่งคูณด้วย240และแปลงผลิตภัณฑ์เป็นเรเดียน


9

Haskell, 40 ไบต์

q[x]=4/3*pi*x^^3
q x=product x
sum.map q

ตัวอย่างการใช้งาน: ->sum.map q $ [[1,4,3],[2,2,2],[3],[4,4,4]]197.09733552923254

วิธีการทำงาน: สำหรับองค์ประกอบของรายการการป้อนข้อมูลที่แต่ละ: ถ้ามันมีองค์ประกอบเดียวคำนวณปริมาณของทรงกลมที่อื่นใช้x productสรุปรวม


1
วิธีการนับไบต์นี้ใช้งานได้จริงหรือไม่? ผมจะได้กล่าวว่าp=sum.map q(แล้วบอกว่าจะใช้pในรายชื่อของรายการของตัวเลข)
ลีฟ Willerts

1
@LeifWillerts: มีหัวข้อล่าสุดเกี่ยวกับเมตาซึ่งอนุญาตให้ใช้ฟังก์ชันที่ไม่มีชื่อที่ถ่ายทอดตามคำจำกัดความทั่วโลก sum.map qเป็นฟังก์ชั่นที่ไม่มีชื่อที่ขึ้นอยู่กับqดังนั้นฉันเดาว่ามันดี
nimi

9

Pyth, 19 18 ไบต์

sm|*Fd*.tC\ð7^hd3Q

1 ไบต์ต้องขอบคุณเดนนิส

สาธิต

รูปแบบอินพุตเป็นรายการของรายการ:

[[1,4,3],[2,2,2],[3,0,0],[4,4,4]]

เพียงคูณมิติเข้าด้วยกันเพื่อคำนวณปริมาตรลูกบาศก์ ถ้ามันออกมาเป็นศูนย์มันจะคำนวณปริมาตรทรงกลม

ค่าคงที่ทรงกลม4/3*piถูกคำนวณเป็น 240 องศาเรเดียน .t ... 7แปลงอินพุตเป็นองศาเป็นเรเดียนและC\ðคำนวณจุดโค้ดของðซึ่งก็คือ 240


7

Python 2, 86 70 ไบต์

lambda i:sum(x[0]*x[1]*x[2]if len(x)>1 else x[0]**3*4.18879for x in i)

ฉันได้รับbyteของคุณเป็น 86 คุณเป็นของคุณได้อย่างไร
wnnmaw

นอกจากนี้คุณสามารถบันทึกไบต์ด้วยการใส่ค่าสำหรับ pi ด้วยตนเองคุณสามารถใช้ถึง3.14159265358979323การแบ่งเท่ากัน
wnnmaw

@wnnmaw ฉันลืมนับการนำเข้า -.-
TFeld

ผมเชื่อว่าคุ้มค่าฮาร์ดโค้ดของคุณสำหรับปี่เป็นปิดบิต :)
wnnmaw

4
@wnnmaw นั่นไม่ใช่ Pi; มันคือ 4Pi / 3
Dennis

5

Mathematica, 34 ไบต์

Tr[1.##&@@@(#/.{r_}:>{4r^3/3Pi})]&

ฟังก์ชั่นที่ไม่ได้ตั้งชื่อซึ่งรับรายการความยาวแบบซ้อนและส่งคืนปริมาณเป็นจำนวนจริง

/.{r_}:>{4r^3/3Pi}ก่อนอื่นเรามาแทนที่ค่าเดียวที่มีปริมาณของทรงกลมที่สอดคล้องกับ 1.##&@@@จากนั้นเราจะคูณถึงเนื้อหาของรายการกับแต่ละ Tr[...]ในที่สุดเราคำนวณผลรวมเป็นร่องรอยของเวกเตอร์ที่มี


5

JavaScript (ES6), 56

l=>l.map(([x,y,z])=>t+=y?x*y*z:x*x*x*4/3*Math.PI,t=0)&&t

ยิ่งสมเหตุสมผล .reduceรุ่น 1 ไบต์อีกต่อไป

l=>l.reduce((t,[x,y,z])=>t+(y?x*y*z:x*x*x*4/3*Math.PI),0)

คุณสามารถบันทึกสองสามไบต์โดยใช้4.11879แทน4/3*Math.PIเนื่องจากควรมีความแม่นยำเพียงพอที่จะผ่านการรับรอง
ETHproductions

@ETHproductions ใช่ แต่In case your language doesn't have a Pi-constant,และภาษาของฉันมีค่าคงที่ PI ดังนั้นฉันจึงไม่ทราบว่ามีคุณสมบัติหรือไม่
edc65

5

Python ขนาด 49 ไบต์

lambda l:sum(a*b*c or a**3*4.18879for a,b,c in l)

(a,0,0)ใช้เป็นตัวแทนของทรงกลมเป็น ได้รับการปฏิบัติเหมือนเป็นลูกบาศก์นี้มีปริมาณ 0 ซึ่งในกรณีนี้จะใช้ปริมาณทรงกลมแทน ฉันไม่ชัดเจนเกี่ยวกับความคงที่ที่แม่นยำดังนั้นฉันหวังว่านี่จะเพียงพอ


4

MATL , 20 ไบต์

it!ptbw~)3^4*3/XT*hs

รูปแบบการป้อนข้อมูลเป็นเมทริกซ์ที่แต่ละแถวอธิบายถึงลูกบาศก์หรือทรงกลม ทรงกลมถูกกำหนดโดยหมายเลขแรกเท่านั้นในแถวนั้น อีกสองตัวเลขเป็นศูนย์ ตัวอย่างแรกจากการท้าทายคือ:

[1 4 3; 2 2 2; 3 0 0; 4 4 4]

สิ่งนี้ใช้ภาษาปัจจุบันรุ่น2.0.2ซึ่งเร็วกว่าความท้าทายนี้

ตัวอย่าง:

>> matl it!ptbw~)3^4*3/XT*hs
> [1 4 3; 2 2 2; 3 0 0; 4 4 4]
197.0973355292326

>> matl it!ptbw~)3^4*3/XT*hs
> [5 0 0]
523.5987755982989

คำอธิบาย:

i             % input matrix
t!            % duplicate and transpose: each object is now a column
p             % product of elements in each column
t             % duplicate                                               
b             % bubble up top-third element in stack                              
w             % swap top two elements in stack                                  
~             % logical 'not'. This gives logical index of speheres                 
)             % reference () indexing. This is a logical-linear index to get sphere radii
3^4*3/XT*     % formula for volume of spehere; element-wise operations
h             % horizontal concatenation                                
s             % sum                

3

อารัมภบท115 100 ไบต์

รหัส:

[]*0.
[[L,W,H]|T]*V:-W=0,X is 4*pi*L^3/3,T*Y,V is X+Y;X is L*W*H,T*Y,V is X+Y.
p(L):-L*V,write(V).

อธิบาย:

[]*0.
[[L,W,H]|T]*V:-W=0,                           % When 2nd dimension is 0
                  X is 4*pi*L^3/3,            % Calc volume of sphere
                  T*Y,                        % Recurse over list
                  V is X+Y                    % Sum volumes
                  ;                           % When we have a cube
                  X is L*W*H,                 % Calc cube volume
                  T*Y                         % Recurse over list
                  V is X+Y.                   % Sum volumes
p(L):-L*V,                                    % Get combined volume of list of lists
      write(V).                               % Print volume

ตัวอย่าง:

p([[1,4,3],[2,2,2],[3,0,0],[4,4,4]]).
197.09733552923257

p([[5,0,0]]).
523.5987755982989

ลองออนไลน์ได้ที่นี่

แก้ไข: บันทึก 15 ไบต์โดยการกำหนดเพนดิเคต


3

Perl, 52 47 ไบต์

s/,/*/g||s@$@**3*4.18879@,$\+=eval for/\S+/g}{

46 + 1 สำหรับ-p(เป็นเรื่องปกติแจ้งให้เราทราบว่ามันแตกต่างกันที่นี่และฉันจะอัปเดต)

การใช้งาน: ใส่ในไฟล์และ echo 1,4,3 2,2,2 3 4,4,4 | perl -p x.pl

ด้วยความคิดเห็น:

s/,/*/g                # x,y,z becomes x*y*z
||                     # if that fails,
s@$@**3*1420/339@      # x becomes x**3 * 1420/339
,                      # 
$\+=eval               # evaluate the expression and accumulate
for/\S+/g              # iterate groups of non-whitespace
}{                     # -p adds while(<>){...}continue{print}; resets $_

อัปเดต 47ขอบคุณ@Dennisสำหรับการบันทึกไบต์โดยใช้เคล็ดลับนี้


s/,/*/g||s@$@**3*4.18879@,$\+=eval for/\S+/g;}{บันทึกไม่กี่ไบต์
Dennis

@ เดนนิสขอบคุณ! ฉันลองด้วย $ \ ก่อน แต่รีเซ็ตค่า$_ใช้จ่ายให้มาก ยังไม่ชัดเจนว่าทำไม$_ถูกรีเซ็ตในบล็อกใหม่แม้ว่า .. $_บล็อกนั้นอยู่ในนั้นwhile(<>){}หรือไม่
Kenney

ใช่$_เป็นตัวแปรเริ่มต้นของขอบเขตปัจจุบัน ในบล็อก END มันไม่ได้กำหนด
Dennis

2

CJam, 24 21 ไบต์

q~{3*)4P*3/*+3<:*}%:+

ทดสอบที่นี่

คำอธิบาย

q~       e# Read and evaluate input.
{        e# Map this block over the list of presents...
  3*     e#   Repeat the list of lengths 3 times. This will expand cuboids to 9 elements
         e#   and spheres to three copies of the radius.
  )      e#   Pull off the last element.
  4P*3/* e#   Multiply by 4 pi / 3.
  +      e#   Add it back to the list of lengths.
  3<     e#   Truncate to 3 elements. This is a no-op for spheres, which now have three
         e#   elements [r r 4*pi/3*r] but discards everything we've done to cuboids, such
         e#   that they're reduced to their three side lengths again.
  :*     e#   Multiply the three numbers in the list.
}%
:+       e# Sum all the individual volumes.

2

PowerShell, 67 ไบต์

($args|%{($_,((,$_*3)+4.18879))[$_.count-eq1]-join'*'})-join'+'|iex

มีเวทมนตร์สีดำเกิดขึ้นที่นี่ ฉันจะพยายามเดินผ่านมันอย่างราบรื่น

ครั้งแรกที่เราจะใช้การป้อนข้อมูลของเราคาดว่าเป็นอาร์เรย์ที่คั่นด้วยจุลภาคของแต่ละบุคคลเช่นและท่อที่เป็นห่วง(1,4,3) (2,2,2) (3) (4,4,4)|%{}

ภายในลูปเราจะตรวจสอบก่อนว่า$_อาเรย์ที่เรากำลังพิจารณามีเพียงหนึ่งไอเท็มและใช้มันเพื่อสร้างดัชนีในอาเรย์ ถ้ามันมากกว่าหนึ่งรายการสมมติว่า(1,4,3)เป็นข้อมูลที่เราดำเนินการในช่วงครึ่งแรกซึ่งเป็นเพียงการถ่มน้ำลายออกอาร์เรย์ผ่านเช่น$_ (1,4,3)มิฉะนั้นเราจะสร้างอาร์เรย์แบบไดนามิกใหม่ซึ่งประกอบด้วยองค์ประกอบสามครั้งด้วย(,$_*3)และตรึงบนการประมาณ 4 / 3rd * Pi สำหรับอินพุต(3)สิ่งนี้จะส่งผลให้เกิด(3,3,3,4.18879)เอาต์พุต

ใช่ PowerShell มีค่าคงที่ Pi ซึ่งเข้าถึงได้ผ่านการโทร. NET [math]::PIแต่นั่นก็นานกว่าและฉันไม่ต้องการใช้ : p

โดยไม่คำนึงถึงเรา concatenate ว่าอาร์เรย์เอาท์พุทที่มีเครื่องหมายดอกจันผ่านดังนั้น-join'*' "1*4*3"เมื่อเราผ่านการวนซ้ำอย่างสมบูรณ์ตอนนี้เรามีชุดของสตริง เรา-join'+'ทุกคนเข้าด้วยกันสำหรับการเพิ่มของเราและiexการแสดงออกในการคำนวณผล

วุ้ย.


1

Ruby, 58 ตัวอักษร

->b{b.reduce(0){|t,s|a,b,c=*s;t+(c ?a*b*c :a**3*4.18879)}}

วิ่งตัวอย่าง:

2.1.5 :001 ->b{b.reduce(0){|t,s|a,b,c=*s;t+(c ?a*b*c :a**3*4.18879)}}[[[1,4,3],[2,2,2],[3],[4,4,4]]]
 => 197.09733

Ruby, 50 ตัวอักษร

ความคิดปรับปรุงขโมยลงคอจากedc65 's คำตอบ JavaScript

->b{t=0;b.map{|a,b,c|t+=c ?a*b*c :a**3*4.18879};t}

วิ่งตัวอย่าง:

2.1.5 :001 > ->b{t=0;b.map{|a,b,c|t+=c ?a*b*c :a**3*4.18879};t}[[[1,4,3],[2,2,2],[3],[4,4,4]]]
 => 197.09733

1

Japt 27 27ไบต์

N®r*1 ª4/3*M.P*Zg ³} x

ใช้อินพุตเป็นอะเรย์ที่คั่นด้วยช่องว่าง ลองออนไลน์!

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

N®   r*1 ª 4/3*M.P*Zg ³  } x
NmZ{Zr*1 ||4/3*M.P*Zg p3 } x

          // Implicit: N = array of input arrays
NmZ{   }  // Map each item Z in N to:
Zr*1      //  Reduce Z with multiplication.
||4/3*M.P //  If this is falsy, calculate 4/3 times Pi
*Zg p3    //  times the first item in Z to the 3rd power.
x         // Sum the result.
          // Implicit: output last expression


1

Pipขนาด 23 ไบต์

{$*a|4/3*PI*@a**3}MSg^s

มีสองวิธีในการป้อนข้อมูลให้กับโปรแกรมนี้ มันสามารถใช้เวลาในแต่ละปัจจุบันเป็นอาร์กิวเมนต์บรรทัดคำสั่งของสามตัวเลขพื้นที่แยกออกจากกัน (ซึ่งจะต้องมีการห่อในเครื่องหมายคำพูด: pip.py present.pip "1 4 3" "3 0 0") อีกวิธีหนึ่งคือระบุ-rตั้งค่าสถานะและให้แต่ละแสดงเป็นบรรทัดของ stdin ประกอบด้วยตัวเลขที่คั่นด้วยช่องว่างสามหมายเลข ลองออนไลน์!

อย่างไร?

                         g is list of cmdline args (or lines of stdin, if using -r flag)
                         s is space, PI is what it says on the tin (implicit)
                    g^s  Split each argument on spaces, so we have a list of lists
{                }MS     Map this function to each sublist and sum the results:
 $*a                      Fold the list on * (i.e. take the product)
    |                     Logical OR: if the above value is zero, use this value instead:
     4/3*PI*              4/3 pi, times
            @a            First element of the list
              **3         Cubed
                         Autoprint the result

0

Perl 5, 142 ไบต์

รันด้วย-pในบรรทัดคำสั่งและพิมพ์ตัวเลขคั่นด้วยเครื่องหมายจุลภาคเช่น:

5,0,0 หรือ (5,0,0)

จะผลิต

523.598820058997

ไม่มีpiคำหลักใน Perl นี่คือในกรณีส่วนใหญ่ความถูกต้องของตัวเลขที่สำคัญที่ระบุไว้อย่างไรก็ตามแม้ว่าฉันจะพิมพ์ตัวเลขทั้งหมดของฉันฉันรู้ว่ามันจะไม่แม่นยำมากสำหรับการคำนวณบางอย่าง ดังนั้นฉันจึงทิ้งมันไว้กับ3.1415ดังนั้นผมจึงทิ้งมันไว้ด้วยฉันไม่แน่ใจว่าจะยอมรับได้หรือไม่

รหัส:

@a=$_=~/(\d+,*)/g;$_=0;@n = map(split(/\D/),@a);for($i=0;$i<$#n;$i+=3){$x=$n[$i];$n[$i+1]==0?$_+=1420/339*$x**3:$_+=($x*$n[$i+1]*$n[$i+2]);}

แก้ไขเพื่อความแม่นยำยิ่งขึ้นเกี่ยวกับคำแนะนำของ Dennis ที่ดีกว่าในวิชาคณิตศาสตร์ขั้นพื้นฐานกว่าฉันและจากคำแนะนำโดย MichaelT เพื่อประหยัด bytes ในขณะที่เหลือแม่นยำ


2
1. คุณจะแยกวิเคราะห์1511อย่างไร 2. 3.1415นั้นไม่ถูกต้องหรือไม่แม่นยำพอ หากคำนวณของฉันถูกต้องข้อผิดพลาดจะต้องไม่มากกว่า0.0000017 3. (4/3)*3.1415สามารถถูกแทนที่ด้วยลอยเดียว
Dennis

1. OP บอกว่าเราอาจสมมติศูนย์เป็นศูนย์สำหรับทรงกลม (ซึ่งอันที่จริงแล้วเป็นตัวอย่างอินพุตที่ฉันให้ไว้) 2. ฉันไม่รู้ว่าคุณใช้การคำนวณแบบไหน แต่แน่นอนว่าฉันจะเพิ่มความแม่นยำและ 3 คำแนะนำที่ดีฉันพลาดไป ขอบคุณ!
Codefun64

ฉันไม่มีทรัพยากรที่อยู่ข้างหน้าฉันในขณะนี้แม้ว่าฉันจะสงสัยว่าการทำเช่น1420/339นั้นจะทำให้คุณได้รับข้อมูลประมาณสองสามไบต์โดยประมาณอย่างสมเหตุสมผล (นี่คือ 4/3 * 355/113) ความแตกต่างระหว่างเศษส่วนและค่าที่คุณมีคือ -8.49130615e-8

@MichaelT นั่นคือสิ่งที่น่าสนใจที่สุด คุณมีสคริปต์ที่ค้นหาการแทนตัวเลขที่น้อยที่สุดหรือไม่? ;)
Codefun64

Codefun64 ฉันเพิ่งทำงานจากการประมาณร่วมอื่น ๆสำหรับ pi 22/7 ยังอยู่ในเกณฑ์ที่ไม่เพียงพอดังนั้นฉันจึงดูที่en.wikipedia.org/wiki/Approximations_of_%CF%80 และคนที่ใช้หน้าถัดไปเพื่อดูว่ามีความอดทนดีกว่า @Dennis ที่ขอหรือไม่

0

Lua, 115 104 ไบต์

function f(a)b=0 for i=1,#a do c=a[i]b=b+(1<#c and c[1]*c[2]*c[3]or(4/3)*math.pi*c[1]^3)end return b end

วิธีแก้ปัญหาที่ตรงไปตรงมาฉันต้องห่อการดำเนินการหลอกแบบสามมิติ<condition> and <non-false> or <value if false>ไว้ในวงเล็บมิฉะนั้น b จะรวมกับพื้นที่ทั้งสอง

การป้อนข้อมูลจะต้องอยู่ในรูปแบบและผลที่สามารถมองเห็นได้โดยการดำเนินการarray={{1,4,3},{2,2,2},{3},{4,4,4}}print(f(array))


0

05AB1E , 18 16 ไบต์

εDgi3m4žq*3/*]PO

ลองออนไลน์

คำอธิบาย:

ε                # Map each inner list of the (implicit) input to:
 D               #  Duplicate the current inner list
  gi             #  Is the length 1 (is it an `R`):
    3m           #   Take the duplicated current item and take its cube
                 #    i.e. [3] → [27]
      žq         #   PI
        4*       #   Multiplied by 4
          3/     #   Divided by 3
                 #    → 4.1887902047863905
            *    #   And multiply it with the current cubed `R`
                 #    [27] and 4.1887902047863905 → [113.09733552923254]
]                # Close both the if and map
 P               # Take the product of each inner list
                 #  i.e. [[1,4,3],[2,2,2],[113.09733552923254],[4,4,4]]
                 #   → [12,8,113.09733552923254,64]
  O              # Take the total sum (and output implicitly)
                 #  i.e. [12,8,113.09733552923254,64] → 197.09733552923254

0

R, 38 36 ไบต์

function(x,y=4*pi/3*x,z=x)sum(x*y*z)

ใช้อาร์กิวเมนต์เริ่มต้นเพื่อสลับระหว่างเคส: โดยมีอาร์กิวเมนต์สามตัวคำนวณผลิตภัณฑ์และอีกหนึ่งอาร์กิวเมนต์จะคำนวณสูตรทรงกลม


คุณจะต้องf<-และ{}?
Giuseppe

(5,0,0)รหัสนี้ไม่ออกอย่างถูกต้องสำหรับกรณีทดสอบ นอกจากนี้ยังไม่รองรับกรณีทดสอบที่มีของขวัญหลายรายการและต้องรวมเข้าด้วยกัน
Robert S.

สำหรับ (5,0,0) ฉันได้รับศูนย์ - นั่นไม่ถูกต้องเหรอ? มีการแก้ไขให้ใช้sum(และลบบางสิ่งที่ไม่จำเป็นตามคำแนะนำของ Giuseppe)
JDL
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.