Apa yang saya butuhkan untuk menghancurkan dunia?

19

The energi ikat gravitasi dari planet adalah jumlah energi yang dibutuhkan untuk memisahkan setiap bagian kecil dari itu sehingga tidak ada sepotong akan mengorbit atau bertabrakan dengan sepotong. Untuk bidang yang seragam, Wikipedia memberikan rumus ini:

E=3GM.25R

Di mana G adalah konstanta gravitasi (6.672e-11 m 3 • kg -1 • s -2 ), M adalah massa, dan R adalah jari-jari.

Saya bisa membuat tantangan ini tentang hanya menghitung ini dalam Joule (kg • m 2 • s -2 ), tapi ... itu akan membosankan . Lagi pula, tidak semua orang mengerti Joule.

Jadi alih-alih, mari kita konversikan ke dalam unit berikut:

  • Kiloton TNT (4,184 triliun Joule, singkatan kilotons)
  • Senjata nuklir Hiroshima (62,76 triliun Joule, steno nukes)
  • Hostess ™ Twinkies (560.000 Joule, singkatan twinkies)
  • Kilowatt-jam (tepatnya 3,6 juta Joule, steno kWh)
  • Kilogram energi massa (1 kg energi massa = 299.792.458 2 Joule, singkatan kg)

Jadi, ambil input berikut:

  • massa dalam kilogram
  • radius dalam meter
  • satu dari enam input berbeda yang mewakili unit yang akan digunakan

Dan mengeluarkan energi yang mengikat dalam unit yang ditentukan. Tambahkan unit steno ke akhir output.

Aturan

  • Kependekan dari Joules adalah J.
  • Ruang putih sewenang-wenang diizinkan, asalkan tidak membagi unit tulisan cepat atau nomor.
  • Notasi ilmiah diizinkan, dalam format apa pun yang digunakan bahasa Anda.
  • Anda hanya perlu 4 angka penting. Poin mengambang sangat dianjurkan.
  • Blah blah jawaban tersingkat dalam byte.

Uji Kasus

Dihasilkan dengan spreadsheet ini .

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

Terinspirasi oleh Powering the Death Star dengan Twinkies oleh Scott Manley.

Nissa
sumber
apa yang Anda maksud dengan "default to joule"? apakah itu berarti bahwa unit output tidak akan selalu diberikan dalam input?
HyperNeutrino
8
juga, saya suka bagaimana sebenarnya ada nama untuk jumlah energi yang dibutuhkan untuk sepenuhnya memusnahkan sesuatu: P
HyperNeutrino
dapatkah kita menggunakan unit output sebagai salah satu dari 6 input berbeda? kalau tidak, ini adalah format I / O yang rumit dan tidak disarankan
HyperNeutrino
@HyperNeutrino yakin, tetapi Anda masih membutuhkan singkatan dalam output.
Nissa
2
@StephenLeppik " salah satu dari enam input berbeda yang mewakili unit untuk digunakan " - bisakah input berbeda itu menjadi 4,184, 62,76, dll?
ngn

Jawaban:

6

05AB1E , 56 54 byte

Mengambil input sebagai unit, radius, mass

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

Cobalah online!

Disimpan 2 byte berkat Erik the outgolfer (base 255 encode 4184and 6276).

Emigna
sumber
16

JavaScript (ES6), 78 byte

Mengambil input sebagai 3 variabel berbeda (mass, radius, unit).

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

Uji kasus

Cuplikan berikut menjalankan semua kasus uji dalam spreadsheet yang disediakan.

Bagaimana?

Ini sangat mirip dengan jawaban C @ ColeraSu , dengan fungsi hash JS-friendly yang bekerja pada seluruh unit string.

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
sumber
7

Jelly , 78 byte

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

Cobalah online!

Hal-hal yang harus dilakukan dengan string bukan tipe tantangan Jelly ...

-7 byte terima kasih kepada pengguna202729 (terima kasih telah membantu saya tidak dikalahkan oleh JavaScript: D)

HyperNeutrino
sumber
Ya, sekarang Anda terikat dengan JS dan masih tidak di atas juga.
Nissa
@StephenLeppik Setidaknya saya tidak akan dipukuli: D dan shush 05AB1E secara inheren lebih baik dalam tantangan string: P
HyperNeutrino
6

C, 113 byte

Hash karakter kedua, menggunakan trailing '\0'of "J". Array inline dalam C digunakan.

Perhatikan bahwa kita perlu mengalikan yang Mterakhir terakhir, atau itu akan meluap ke 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);}

Cobalah online!

Colera Su
sumber
+1. Tidak yakin jika mungkin, tetapi f (m, r, char * c) float m, r {...} akan menghemat beberapa byte. Juga, tanda titik koma setelah printf adalah opsional
xanoetux
@xanoetux Kompiler mana yang Anda gunakan? Keduanya tidak bekerja pada mesin saya.
Colera Su
Saya menggunakan GCC. Belum diuji, tapi saya cukup yakin tentang titik koma terakhir. (akan diuji nanti)
xanoetux
4

APL (Dyalog Unicode) , 153 71 69 byte

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

Cobalah online!

Terima kasih kepada @ Adám karena benar-benar menghancurkan jawaban lama saya menjadi yang satu ini. Terima kasih kepada @ngn selama 2 byte.

'Fungsi' ini sebenarnya adalah operator yang dipanggil op. Semua nilai untuk unit pengukuran ditransformasikan ke notasi ilmiah.

Bagaimana itu bekerja:

{⍺,⍨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é
sumber
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

Cukup lurus ke depan. Menggunakan enotasi Python . Menggunakan dikt yang membedakan unit berdasarkan huruf kedua dan membaginya dengan nilai yang sesuai. u[1:2]pada dasarnya u[1], mengharapkannya kembali ''bukan kesalahan (yang saya hanya pelajari sekarang). Kemudian terapkan rumus dengan beberapa penyederhanaan.

sunting: turun ke 106 berkat manusia sepenuhnya, kembali ke 108 karena nilai nuklir baru dan turun ke 101 berkat Colera Su.

Cobalah online!

PattuX
sumber
3

Excel (Office 365), 106 101 97 byte

Mengasumsikan sel A1adalah massa, A2adalah jari-jari, dan B1merupakan satuan, ditulis sebagai singkatan untuk output.

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

Excel kuno tidak memiliki SWITCHfungsi, jadi Anda punya

=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
sumber
Anda dapat menyimpan 2 byte dengan menggantinya 299792E3^2dengan 89876E12 (Masih cukup akurat untuk persyaratan pertanyaan.) Bagi semua nilai dengan 1000menyimpan 2 lainnya:=40032E-19*A1^2/(A2*SWITCH(MID(B1,2,1),"u",6276E6,"w",56,"W",360,"g",89876E8,"i",4184E5,1E-4))&B1
Wernisch
Hei, hanya ingin membuangnya di luar sana bahwa Switch()fungsi ini tersedia untuk salinan desktop Excel, dan diperkenalkan dengan Office 2016.
Taylor Scott
1

Ruby, 83 82 byte

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

Menggunakan hash khusus untuk mengindeks LUT untuk unit ( i * k mod mrumus). Angka-angka itu ditemukan menggunakan kekerasan.

Peter Lenkefi
sumber
0

Excel, 94 byte

Mengambil Misa dari A1, Radius dari B1, Unit di C1. Lihatlah ke atas 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
sumber
0

Jelly , 59 byte

Saya hanya ingin mencoba metode aneh lain untuk mengkonversi unit. Tetapi sisa kode mungkin golf buruk.

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

Cobalah online!

Bagaimana?

Kami membangun 'tanda tangan' dari string satuan dari keutamaan kode ASCII-nya. Kami menafsirkannya sebagai nilai biner dan menerapkan modulo untuk mendapatkan indeks akhir dalam tabel pencarian.

⁵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

Tautan pembantu memberikan indeks berikut untuk setiap 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
Arnauld
sumber