ฉันต้องทำลายอะไรในโลกนี้?


19

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

E=3GM25R

โดยที่ G คือค่าคงตัวความโน้มถ่วง (6.672e-11 m 3 • kg -1 • s -2 ), M คือมวลและ R คือรัศมี

ฉันสามารถสร้างความท้าทายนี้ได้เพียงแค่คำนวณสิ่งนี้ในจูล (กก. •ม. 2 • s -2 ) แต่…ที่น่าเบื่อน่าเบื่อและนอกจากนี้ทุกคนไม่เข้าใจจูล

ดังนั้นให้แปลงเป็นหน่วยต่อไปนี้แทน

  • Kilotons ของ TNT (4.184 ล้านล้านจูลชวเลข kilotons )
  • อาวุธนิวเคลียร์ฮิโรชิมา (62.76 ล้านล้านจูลชวเลข nukes )
  • Hostess ™ Twinkies (560,000 จูลจดชวเลข twinkies )
  • กิโลวัตต์ - ชั่วโมง (ประมาณ 3.6 ล้านจูลส์จดชวเลข kWh )
  • กิโลกรัมของมวลพลังงาน (1 กิโลกรัมมวลพลังงาน = 299,792,458 2จูลชวเลขkg)

ดังนั้นให้ป้อนข้อมูลต่อไปนี้:

  • มวลเป็นกิโลกรัม
  • รัศมีเป็นเมตร
  • หนึ่งในหกอินพุตที่แตกต่างซึ่งแสดงถึงหน่วยที่จะใช้

และส่งออกพลังงานที่มีผลผูกพันในหน่วยที่ระบุ ผนวกหน่วยชวเลขและท้ายของเอาท์พุท

กฎระเบียบ

  • Jชวเลขสำหรับจูลคือ
  • อนุญาตให้ใช้ช่องว่างโดยพลการได้ตราบใดที่ไม่แยกหน่วยชวเลขและหมายเลข
  • อนุญาตให้ใช้สัญลักษณ์ทางวิทยาศาสตร์ไม่ว่าจะใช้รูปแบบใดในภาษาของคุณ
  • คุณต้องการเพียง 4 ตัวเลขที่สำคัญ ขอแนะนำให้ใช้จุดลอยตัว
  • Blah blah คำตอบที่สั้นที่สุดในหน่วยไบต์

กรณีทดสอบ

สร้างด้วยสเปรดชีตนี้

Mass (kg)   Radius (m)  J           kilotons    nukes       twinkies    kWh         kg
3.302E+23   2440000     1.789E+30   4.275E+17   2.850E+16   3.194E+24   4.969E+23   1.990E+13
4.869E+24   6052000     1.568E+32   3.748E+19   2.499E+18   2.800E+26   4.356E+25   1.745E+15
5.974E+24   6371000     2.242E+32   5.360E+19   3.573E+18   4.004E+26   6.229E+25   2.495E+15
6.419E+23   3390000     4.866E+30   1.163E+18   7.753E+16   8.689E+24   1.352E+24   5.414E+13
1.899E+27   69911000    2.065E+36   4.935E+23   3.290E+22   3.687E+30   5.736E+29   2.298E+19
5.685E+26   58232000    2.222E+35   5.310E+22   3.540E+21   3.968E+29   6.172E+28   2.472E+18
8.683E+25   25360000    1.190E+34   2.845E+21   1.896E+20   2.125E+28   3.306E+27   1.324E+17
1.024E+26   24620000    1.705E+34   4.075E+21   2.717E+20   3.045E+28   4.736E+27   1.897E+17
1.311E+22   1186000     5.801E+27   1.387E+15   9.244E+13   1.036E+22   1.611E+21   6.455E+10
1.989E+30   696300000   2.274E+41   5.436E+28   3.624E+27   4.062E+35   6.318E+34   2.531E+24
7.350E+22   1737000     1.245E+29   2.976E+16   1.984E+15   2.223E+23   3.458E+22   1.385E+12

แรงบันดาลใจจากPowering the Death Star กับ Twinkiesโดย Scott Manley


คุณหมายถึง "default to joules" หมายความว่าหน่วยเอาต์พุตจะไม่ได้รับในอินพุตเสมอไปหรือไม่
HyperNeutrino

8
นอกจากนี้ฉันรักที่จริง ๆ แล้วมีชื่อสำหรับปริมาณพลังงานที่จำเป็นในการทำลายสิ่งต่าง ๆ ทั้งหมด: P
HyperNeutrino

เราสามารถนำเอาท์พุทยูนิตเป็นหนึ่งใน 6 อินพุตที่แตกต่างกันได้หรือไม่? มิฉะนั้นจะเป็นรูปแบบ I / O ที่ยุ่งยากและสิ่งเหล่านั้นก็ท้อแท้
HyperNeutrino

@HyperNeutrino แน่นอน แต่คุณยังคงต้องการชวเลขในการส่งออก
Nissa

2
@StephenLeppik " หนึ่งในหกอินพุตที่แตกต่างซึ่งแสดงถึงหน่วยที่จะใช้ " - อินพุตที่แตกต่างเหล่านั้นสามารถเป็น 4.184, 62.76 และอื่น ๆ ได้หรือไม่?
ngn

คำตอบ:



16

JavaScript (ES6), 78 ไบต์

จะเข้าเป็น 3 (mass, radius, unit)ตัวแปรที่แตกต่างกัน

(m,r,u)=>m*m/r/[8987e9,56,6276e6,,4184e5,1e-4,360][parseInt(u,30)%7]/2498e11+u

กรณีทดสอบ

ตัวอย่างต่อไปนี้จะเรียกใช้กรณีทดสอบทั้งหมดในสเปรดชีตที่ให้ไว้

อย่างไร?

นี่ค่อนข้างคล้ายกับคำตอบ C ของ @ ColeraSuโดยมีฟังก์ชันแฮชที่เป็นมิตรกับ JS ที่ทำงานกับสตริงหน่วยทั้งหมด

Unit       | Parsed as (*) | Base-30 -> Dec. | mod 7
-----------+---------------+-----------------+------
"J"        | "j"           | 19              | 5        (*):
"kilotons" | "kilotons"    | 451052545318    | 4          Because we're parsing as Base-30,
"nukes"    | "n"           | 23              | 2          characters [u-z] (and anything
"twinkies" | "t"           | 29              | 1          after them) are simply ignored.
"kWh"      | "k"           | 20              | 6
"kg"       | "kg"          | 616             | 0

7

เยลลี่ , 78 ไบต์

²×⁽LÐ÷ȷ14÷⁴÷5÷⁵ị“¤Fðẏẏż“?A⁺ẏẏż“¬ŀż“8Ƙż“¡uþ³⁾ẉṿÆ“¡’¤;⁵ị“ÞṠlT“¡ṁæ-“;ØḲ“ȧ¹“ṫD“}»¤

ลองออนไลน์!

สิ่งที่ต้องทำกับสตริงไม่ใช่ความท้าทายของเยลลี่ ...

-7 ไบต์ขอบคุณ user202729 (ขอบคุณที่ช่วยฉันไม่ถูกจาวาสคริปต์: D)


ใช่ตอนนี้คุณกำลังผูกกับ JS และยังไม่ได้อยู่ด้านบน
Nissa

@StephenLeppik อย่างน้อยฉันก็ไม่ได้พ่ายแพ้: D และ shush 05AB1E นั้นดีกว่าโดยเฉพาะกับการท้าทายแบบสตริง: P
HyperNeutrino

6

C, 113 ไบต์

แฮตัวอักษรสองโดยใช้ต่อท้าย'\0'ของ"J"ของใช้อาร์เรย์แบบอินไลน์ใน C

ทราบว่าเราต้องคูณสองที่ผ่านมาหรือมันจะล้นไปMinf

f(m,r,c)float m,r;char*c;{printf("%e%s",m/r/(float[]){1e-4,360,6276e6,8987e9,56,4184e5}[c[1]%36%7]/2498e11*m,c);}

ลองออนไลน์!


+1 ไม่แน่ใจว่าเป็นไปได้หรือไม่ แต่ f (m, r, char * c) float m, r {…} อาจบันทึกได้หลายไบต์ นอกจากนี้เซมิโคลอนหลังจาก printf ก็เป็นตัวเลือก
xanoetux

@xanoetux คุณใช้คอมไพเลอร์ใด? ทั้งสองไม่ทำงานบนเครื่องของฉันแม้ว่า
Colera Su

ฉันใช้ GCC ยังไม่ได้ทดสอบ แต่ฉันค่อนข้างแน่ใจเกี่ยวกับอัฒภาคสุดท้าย (จะทดสอบในภายหลัง)
xanoetux

4

APL (Dyalog Unicode) , 153 71 69 ไบต์

op←{⍺,⍨40032E¯15÷÷/8987E13 36E5 6276E10 56E4 4184E9 1['gWuw '⍳⊃1↓⍺]⍵⍺⍺⍵}

ลองออนไลน์!

ขอบคุณ @ Adámที่บดขยี้คำตอบเก่าของฉันเป็นคำตอบนี้ ขอบคุณ @ngn เป็นเวลา 2 ไบต์

นี้ 'ฟังก์ชั่น' opเป็นจริงผู้ประกอบการที่เรียกว่า ค่าทั้งหมดสำหรับหน่วยการวัดถูกเปลี่ยนเป็นสัญลักษณ์ทางวิทยาศาสตร์

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

{⍺,⍨40032E¯15÷÷/8987E13 36E5 6276E10 56E4 4184E9 1['gWuw '⍳⊃1↓⍺]⍵⍺⍺⍵}
                                                             1↓⍺          take the measurement unit without the first letter (because it is ambiguous)
                                                                         picks the first element returned by 
                                                                         Dyadic ota, which finds the index of
                                                  'gWuw '                 each of these characters
                                                 [             ]          square brackets indicate the index
               8987E13 36E5 6276E10 56E4 4184E9 1                         of the element of this vector (1-indexed) which will be used as the divisor for
            ÷/                                                  ⍵⍺⍺⍵      dividing by the left operand (⍺⍺) and the right argument squared.
    40032E¯15÷                                                            then divide this number by the result
 ⍺,⍨                                                                      and append the measurement unit

3

Python 3, 112 106 108 101 Bytes

lambda m,r,u:str(40032e-19*m*m/r/{'':1e-4,'i':4184e5,'u':6276e6,'w':56,'W':360,'g':8987e9}[u[1:2]])+u

ตรงไปตรงมาสวย ใช้eสัญลักษณ์ของ Python ใช้ dict ที่แยกหน่วยตามตัวอักษรตัวที่สองและหารด้วยค่าการกัดกร่อน u[1:2]โดยพื้นฐานu[1]แล้วคาดว่ามันจะกลับมา''แทนที่จะเกิดข้อผิดพลาด จากนั้นใช้สูตรที่มีการทำให้เข้าใจง่ายสองสามอย่าง

แก้ไข: ลงไป 106 ขอบคุณมนุษย์ทั้งหมดกลับไปที่ 108 เนื่องจากค่านิวเคลียร์ใหม่และลดลงถึง 101 ขอบคุณ Colera Su

ลองออนไลน์!


3

Excel (Office 365), 106 101 97 ไบต์

สมมติว่าเซลล์A1คือมวลA2คือรัศมีและB1เป็นหน่วยเขียนเป็นชวเลขสำหรับเอาต์พุต

=40032E-19*A1^2/(A2*SWITCH(MID(B1,2,1),"u",6276E6,"w",56,"W",360,"g",89876E8,"i",4184E5,1E-4))&B1

Excel, 130 ไบต์

Excel ที่ล้าสมัยไม่มีSWITCHฟังก์ชันดังนั้นคุณจึงมี

=40032E-15*A1^2/(A2*IF(B1="J",1,IF(B1="nukes",6276E10,IF(B1="twinkies",56E4,IF(B1="kWh",36E5,IF(B1="kg",299792E3^2,4184E9))))))&B1

คุณสามารถบันทึก 2 ไบต์โดยการแทนที่299792E3^2ด้วย89876E12 (ยังคงแม่นยำเพียงพอสำหรับข้อกำหนดของคำถาม) หารค่าทั้งหมดโดย1000บันทึกอีก 2:=40032E-19*A1^2/(A2*SWITCH(MID(B1,2,1),"u",6276E6,"w",56,"W",360,"g",89876E8,"i",4184E5,1E-4))&B1
Wernisch

เดี๋ยวก่อนแค่อยากจะโยนมันออกไปที่นั่นSwitch()ฟังก์ชั่นนั้นมีให้ใช้งานกับสำเนาบนเดสก์ท็อปของ Excel และได้รับการแนะนำให้รู้จักกับ Office 2016
Taylor Scott

1

Ruby, 83 82 ไบต์

->m,r,u{"#{40032E-18*m*m/r/[36E2,56,8987E9,1E-3,4184E6,6276E7][u.sum*3%71%6]} "+u}

ใช้แฮชแบบกำหนดเองเพื่อทำดัชนี LUT สำหรับหน่วย ( i * k mod mสูตร) พบตัวเลขโดยใช้กำลังดุร้าย


0

Excel, 94 ไบต์

นำมวลชนจากA1รัศมีจากหน่วยในB1 C1เงยหน้าขึ้นมอง2*Code(Unit) + Length(Unit) modulo 11เงยหน้าขึ้นมองบน

=4.0032E-15*A1^2/B1/CHOOSE(MOD(2*CODE(C1)+LEN(C1),11),,4184E5,,,6276E6,1E-4,89876E8,360,56)

0

เยลลี่ , 59 ไบต์

ฉันแค่อยากลองวิธีแปลกใหม่ในการแปลงหน่วย แต่ส่วนที่เหลือของรหัสอาจเป็นกอล์ฟที่ไม่ดี

⁵OÆPḄ%9ị[56,4184ȷ5,8987ȷ9,360,0,6276ȷ6,1ȷ-4]
²÷⁴÷2498ȷ11÷¢⁵

ลองออนไลน์!

อย่างไร?

เราสร้าง 'ลายเซ็น' ของสตริงหน่วยจากส่วนใหญ่ของรหัส ASCII เราตีความมันเป็นค่าไบนารี่และใช้โมดูโล่เพื่อรับดัชนีสุดท้ายในตารางการค้นหา

⁵OÆPḄ%9ị[...]    - helper link to convert the unit to a hardcoded constant
⁵                - the 3rd input        e.g. "kilotons"
 O               - to ASCII codes       --> [107, 105, 108, 111, 116, 111, 110, 115]
  ÆP             - is prime?            --> [1, 0, 0, 0, 0, 0, 0, 0]
    Ḅ            - binary -> decimal    --> 128
     %9          - modulo 9             --> 2
       ị[...]    - get value from table --> 418400000

²÷⁴÷2498ȷ11÷¢⁵   - main link taking the mass, the radius and the unit
²                - square the mass
 ÷⁴              - divide by the radius
   ÷2498ȷ11      - divide by 2498e11
           ÷¢    - divide by the unit constant, invoking the helper link as a nilad
             ⁵   - append the unit

ลิงค์ตัวช่วยให้ดัชนีต่อไปนี้สำหรับแต่ละหน่วย:

unit     | ASCII codes                     | is prime?       | bin -> dec | mod 9
---------+---------------------------------+-----------------+------------+------
J        | 74                              | 0               |      0     |   0
kilotons | 107,105,108,111,116,111,110,115 | 1,0,0,0,0,0,0,0 |    128     |   2
nukes    | 110,117,107,101,115             | 0,0,1,1,0       |      6     |   6
twinkies | 116,119,105,110,107,105,101,115 | 0,0,0,0,1,0,1,0 |     10     |   1
kWh      | 107,87,104                      | 1,0,0           |      4     |   4
kg       | 107,103                         | 1,1             |      3     |   3
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.