我需要破坏世界吗?


19

行星的引力束缚能是指将行星的每一小块分开,以使每一块都不会绕另一颗轨道运行或碰撞所需的能量。对于一个统一的领域,Wikipedia给出以下公式:

Ë=3G中号25[R

其中G为重力常数(6.672e-11 m 3 •kg -1 •s -2),M为质量,R为半径。

可能仅以焦耳(kg•m 2 •s -2)计算该挑战,但是……那将很无聊。此外,并非所有人都了解焦耳。

因此,让我们将其转换为以下单位:

  • TNT千吨(4.184万亿焦耳,简写kilotons
  • 广岛核武器(62.76万亿焦耳,简写nukes
  • Hostess™Twinkies(560,000焦耳,速记twinkies
  • 千瓦时(简写为360万焦耳kWh
  • 千克的质量能(1千克质量能= 299,792,458 2焦耳,简写kg

因此,输入以下输入:

  • 千克质量
  • 半径(米)
  • 代表要使用的单位的六个不同输入之一

并以指定单位输出结合能。将速记单元追加到输出的末尾。

规则

  • 焦耳的简写是J
  • 只要不分隔速记单位或数字,就可以使用任意空格。
  • 无论您使用哪种语言,都可以使用科学计数法。
  • 您只需要4个有效数字。强烈建议使用浮点数。
  • 等等等等最短的答案以字节为单位。

测试用例

此电子表格一起生成。

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

灵感来自Scott Manley的Twinkies为死亡之星提供动力


“默认为焦耳”是什么意思?这是否意味着输出单位将不会总是在输入中给出?
HyperNeutrino

8
同样,我喜欢完全消灭一件东西所需的能量的实际名称:P
HyperNeutrino

我们可以将输出单位作为6个不同输入中的任意一个吗?否则,它是麻烦的I / O格式,因此不建议使用
HyperNeutrino

@HyperNeutrino当然可以,但是您仍然需要在输出中使用简写形式。
妮莎

2
@StephenLeppik“ 代表要使用的单位的六个不同输入之一 ”-这些不同的输入可以是4.184、62.76等吗?
ngn

Answers:


6

05AB1E56 54字节

输入为 unit, radius, mass

6n56•G*•x619+•Oć•4°z)•1¡‡•S°*"Wwigu"I1èkè*2498T>°P/*¹J

在线尝试!

感谢outgolfer节省了2个字节(以255为编码基41846276)。


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

测试用例

以下代码段在提供的电子表格中运行所有测试用例。

怎么样?

这与@ColeraSu的C答案非常相似,它具有对整个单位字符串有效的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“}»¤

在线尝试!

与琴弦有关的东西并不是Jelly真正的挑战...

-7个字节,感谢user202729(感谢您帮助我不被JavaScript击败:D)


是的,现在您与JS捆绑在一起,但仍然不在最前面。
妮莎(Nissa)

@StephenLeppik至少我没有被打败:D和嘘05AB1E本质上在弦乐挑战方面更胜一筹:P
HyperNeutrino

6

C,113字节

散列第二个字符,采用尾随'\0'"J"。使用C中的内联数组。

请注意,我们需要乘以M倒数第二个,否则它将溢出到inf

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字节

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

非常简单。使用Python的e符号。使用根据第二个字母区分单位并除以相应值的字典。u[1:2]基本上是u[1],期望它返回''而不是错误(我现在才知道)。然后应用公式进行一些简化。

编辑:全人类降低到106,由于新核武器的价值降低到108,而Colera Su降低到101。

在线尝试!


3

的Excel(办公室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

您可以通过替换299792E3^2以保存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引入
泰勒·斯科特

1

红宝石,83 82字节

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

使用自定义哈希值为单位(i * k mod m公式)的LUT编制索引。这些数字是使用蛮力找到的。


0

Excel,94个字节

A1B1单位的质量中提取半径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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.