世界を破壊するには何が必要ですか?


19

惑星の重力結合エネルギーとは、惑星のあらゆる小さな断片を分離するために必要なエネルギーの量であり、その結果、どの断片も他の断片を周回したり衝突したりしません。均一な球体の場合、Wikipediaは次の式を提供します。

E=3GM25R

ここで、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 kg質量エネルギー= 299,792,458 2ジュール、略記kg

したがって、次の入力を受け入れます。

  • キログラム単位の質量
  • メートル単位の半径
  • 使用するユニットを表す6つの異なる入力の1つ

そして、指定された単位で結合エネルギーを出力します。略記単位を出力の最後に追加します。

ルール

  • ジュールの短縮形は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

スコット・マンリーのTwinkiesでデス・スターに力を与えることに触発されました。


「デフォルトのジュール」とはどういう意味ですか?それは、出力ユニットが常に入力で与えられるとは限らないということですか?
ハイパーニュートリノ

8
また、物を完全に消滅させるために必要なエネルギー量の名前が実際にどのようにあるのかが大好きです
。P– HyperNeutrino

6つの異なる入力のいずれかとして出力ユニットを使用できますか?それ以外の場合は扱いにくいI / O形式であり、推奨されません
-HyperNeutrino

@HyperNeutrinoは確かですが、出力には速記が必要です。
ニッサ

2
@StephenLeppik「使用するユニットを表す6つの個別の入力の1つ」-これらの個別の入力は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

テストケース

次のスニペットは、提供されたスプレッドシートのすべてのテストケースを実行します。

どうやって?

これは、@ 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“}»¤

オンラインでお試しください!

文字列を扱うことは、実際にはゼリーのタイプの挑戦ではありません...

user202729のおかげで-7バイト(JavaScriptにbeatられないように助けてくれてありがとう:D)


うん、今はあなたはJSと結びついていますが、まだトップにはいません。
ニッサ

@StephenLeppik少なくとも私は打たれていません:Dとshush 05AB1Eは本質的に文字列チャレンジで優れています:P
HyperNeutrino

6

C、113バイト

の末尾'\0'を使用して、2番目の文字をハッシュし"J"ます。Cのインライン配列が使用されます。

M最後から2番目の値を乗算する必要があることに注意してください。乗算しないとオーバーフローし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どのコンパイラを使用しますか?どちらも私のマシンでは動作しません。
コレラSu

GCCを使用しています。テストされていませんが、最後のセミコロンについてはかなり確信しています。(後でテストします)
-xanoetux

4

APL(Dyalog Unicode)153 71 69バイト

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

オンラインでお試しください!

私の古い答えを絶対につぶしてくれた@Adámに感謝します。2バイトの@ngnに感謝します。

この「関数」は実際にはと呼ばれる演算子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表記法を使用します。2番目の文字に基づいてユニットを区別し、対応する値で除算する辞書を使用します。u[1:2]基本的には、エラーの代わりにu[1]返される''ことを期待しています(これは今だけ学びました)。次に、いくつかの単純化を使用して式を適用します。

編集:完全に人間のおかげで106まで、新しい核兵器の価値のために108まで、コレラ・スのおかげで101まで。

オンラインでお試しください!


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^289876E12 して、すべての値を割り(質問の要件については、まだ十分に正確な。)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()機能がエクセルのデスクトップにコピーに利用可能である、および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}

カスタムハッシュを使用して、ユニットの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.