Was brauche ich, um die Welt zu zerstören?

19

Die Schwerkraftbindungsenergie eines Planeten ist die Energiemenge, die erforderlich ist, um jedes winzige Stück davon zu trennen, damit kein Stück umkreist oder mit einem anderen Stück kollidiert. Für eine einheitliche Sphäre gibt Wikipedia folgende Formel an:

E=3GM25R

Dabei ist G die Gravitationskonstante (6.672e-11 m 3 · kg -1 · s -2 ), M die Masse und R der Radius.

Ich könnte diese Herausforderung darin bestehen , dies nur in Joule (kg • m 2 • s –2 ) zu berechnen , aber… das wäre langweilig . Und außerdem versteht nicht jeder Joules.

Lassen Sie es uns stattdessen in die folgenden Einheiten konvertieren:

  • Kilotonnen TNT (4,184 Billionen Joule, Kurzform kilotons)
  • Hiroshima-Atomwaffen (62,76 Billionen Joule, Kurzschrift nukes)
  • Hostess ™ Twinkies (560.000 Joule, Kurzschrift twinkies)
  • Kilowattstunden (genau 3,6 Millionen Joule, Kurzform kWh)
  • Kilogramm Masse-Energie (1 kg Masse-Energie = 299.792.458 2 Joule, Kurzschrift kg)

Geben Sie also Folgendes ein:

  • Masse in Kilogramm
  • Radius in Metern
  • Einer von sechs verschiedenen Eingängen, die die zu verwendende Einheit darstellen

Und die Bindungsenergie in den angegebenen Einheiten ausgeben. Hängen Sie die Kurzschrift an das Ende der Ausgabe an.

Regeln

  • Die Abkürzung für Joules ist J.
  • Beliebige Leerzeichen sind zulässig, solange sie weder die Kurzschrift noch die Zahl aufteilen.
  • Wissenschaftliche Notation ist zulässig, in welchem ​​Format auch immer Ihre Sprache verwendet wird.
  • Sie benötigen nur 4 signifikante Zahlen. Fließkommazahlen werden dringend empfohlen.
  • Blah blah kürzeste Antwort in Bytes.

Testfälle

Mit dieser Tabelle generiert .

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

Inspiriert von Powering the Death Star mit Twinkies von Scott Manley.

Nissa
quelle
was meinst du mit "default to joules" Bedeutet das, dass die Ausgabeeinheit nicht immer in der Eingabe angegeben wird?
HyperNeutrino
8
Außerdem
finde ich es toll
Können wir die Ausgabeeinheit als eine von 6 verschiedenen Eingaben annehmen? ansonsten ist es ein umständliches E / A-Format und davon wird abgeraten
HyperNeutrino
@HyperNeutrino sicher, aber du brauchst noch die Kurzschrift in der Ausgabe.
Nissa
2
@StephenLeppik " einer von sechs verschiedenen Eingängen, die die zu verwendende Einheit darstellen " - können diese verschiedenen Eingänge 4.184, 62.76 usw. sein?
30.

Antworten:

6

05AB1E , 56 54 Bytes

Übernimmt die Eingabe als unit, radius, mass

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

Probieren Sie es online!

2 Bytes gespart dank Erik dem Outgolfer (Base 255 encode 4184und 6276).

Emigna
quelle
16

JavaScript (ES6), 78 Byte

Nimmt die Eingabe als 3 verschiedene Variablen an (mass, radius, unit).

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

Testfälle

Das folgende Snippet führt alle Testfälle in der bereitgestellten Tabelle aus.

Wie?

Dies ist ziemlich ähnlich zu @ ColeraSus C-Antwort , mit einer JS-freundlichen Hash-Funktion, die für die gesamte Unit-Zeichenfolge funktioniert.

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
Arnauld
quelle
7

Jelly , 78 Bytes

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

Probieren Sie es online!

Sachen, die mit Streichern zu tun haben, sind nicht wirklich Jellys Herausforderung ...

-7 Bytes dank user202729 (danke, dass du mir geholfen hast, nicht von JavaScript geschlagen zu werden: D)

HyperNeutrino
quelle
Ja, jetzt bist du mit JS verbunden und immer noch nicht ganz oben.
Nissa
@StephenLeppik Zumindest werde ich nicht geschlagen: D und shush 05AB1E ist von Natur aus besser in String-Herausforderungen: P
HyperNeutrino
6

C 113 Bytes

Hash das zweite Zeichen unter Verwendung des Trailing '\0'von "J". Inline-Array in C wird verwendet.

Beachten Sie, dass wir den vorletzten multiplizieren müssen, sonst Mläuft er über 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);}

Probieren Sie es online!

Colera Su
quelle
+1. Ich bin mir nicht sicher, ob es möglich ist, aber f (m, r, char * c) float m, r {…} würde einige Bytes einsparen. Auch das Semikolon nach printf ist optional
Xanoetux
@xanoetux Welchen Compiler benutzt du? Beide funktionieren jedoch nicht auf meiner Maschine.
Colera So
Ich benutze GCC. Ungetestet, aber ich bin mir ziemlich sicher, was das letzte Semikolon betrifft. (wird später getestet)
Xanoetux
4

APL (Dyalog Unicode) , 153 71 69 Bytes

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

Probieren Sie es online!

Vielen Dank an @ Adám, der meine alte Antwort in diese zerquetscht hat. Danke an @ngn für 2 Bytes.

Diese 'Funktion' ist tatsächlich ein Operator, der aufgerufen wird op. Alle Werte für die Maßeinheiten wurden in wissenschaftliche Notation umgewandelt.

Wie es funktioniert:

{⍺,⍨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
J. Sallé
quelle
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

Ziemlich einfach. Verwendet die Python- eNotation. Verwendet ein Diktat, das die Einheit anhand des zweiten Buchstabens unterscheidet und durch den entsprechenden Wert dividiert. u[1:2]Grundsätzlich u[1]ist zu erwarten, dass es ''anstelle eines Fehlers zurückkehrt (was ich erst jetzt gelernt habe). Dann gilt die Formel mit ein paar Vereinfachungen.

edit: dank totalhuman runter auf 106, dank new nukes value zurück auf 108 und dank colera su runter auf 101.

Probieren Sie es online!

PattuX
quelle
3

Excel (Office 365), 106 101 97 Byte

Angenommen, die Zelle A1ist die Masse, A2der Radius und B1die Einheit, die als Kurzform für die Ausgabe geschrieben wird.

=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 Bytes

Altmodisches Excel hat nicht die SWITCHFunktion, also haben Sie

=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
KSmarts
quelle
Sie können 2 Bytes einsparen, indem Sie 299792E3^2durch 89876E12 (Für Fragen immer noch genau genug) ersetzen . Teilen Sie alle Werte durch 1000weitere 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
Hey, ich möchte nur erwähnen, dass die Switch()Funktion für Desktop-Kopien von Excel verfügbar ist und mit Office 2016 eingeführt wurde.
Taylor Scott,
1

Ruby, 83 82 Bytes

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

Verwendet einen benutzerdefinierten Hash, um eine LUT für die Einheiten ( i * k mod mFormel) zu indizieren . Die Zahlen wurden mit Brute-Force ermittelt.

Peter Lenkefi
quelle
0

Excel, 94 Bytes

Nimmt Masse von A1, Radius von B1, Einheit in C1. Schau auf 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)
Wernisch
quelle
0

Jelly , 59 Bytes

Ich wollte nur eine andere seltsame Methode ausprobieren, um die Einheiten umzurechnen. Aber der Rest des Codes ist wahrscheinlich schlecht golfen.

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

Probieren Sie es online!

Wie?

Wir bauen eine 'Signatur' einer Einheitszeichenfolge aus der Primalität ihrer ASCII-Codes auf. Wir interpretieren es als binären Wert und wenden ein Modulo an, um den endgültigen Index in der Nachschlagetabelle zu erhalten.

⁵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

Der Hilfslink gibt die folgenden Indizes für jede Einheit an:

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
Arnauld
quelle