Dünyayı yok etmek için neye ihtiyacım var?


19

Yerçekimi bağlanma enerjisi bir gezegenin hiçbir parça yörünge ya da başka bir parça ile çarpışır, böylece onun her küçük parça ayırmak için gereken enerji miktarıdır. Tek tip bir küre için Wikipedia bu formülü verir:

E=3GM25R

G yerçekimi sabiti (6.672e-11 ki burada m 3 • kg -1 • s -2 ), E kütlesi ve R, yarıçapıdır.

Ben olabilir sadece jul (kg • m bu hesaplama hakkında bu zorluğu yapmak 2 • s -2 olacağını ...), ama sıkıcı . Ayrıca, herkes Joule'u anlamaz.

Bunun yerine, onu aşağıdaki birimlere dönüştürelim:

  • Kiloton TNT (4.184 trilyon Joule, stenografi kilotons)
  • Hiroşima nükleer silahları (62.76 trilyon Joule, stenografi nukes)
  • Hostess ™ Twinkies (560.000 Joule, stenografi twinkies)
  • Kilowatt-saat (tam 3.6 milyon Joule, steno kWh)
  • Kilogram kütle enerjisi (1 kg kütle enerjisi = 299.792.458 2 Joule, stenografi kg)

Bu nedenle, aşağıdaki girdiyi alın:

  • kilogram cinsinden kütle
  • metre cinsinden yarıçap
  • kullanılacak birimi temsil eden altı ayrı girişten biri

Ve belirtilen birimlerde bağlama enerjisini çıktılar. Stenografi birimini çıktının sonuna ekleyin.

kurallar

  • Joules için kestirme yol J.
  • Stenografi birimini veya numarasını bölmediği sürece keyfi boşluklara izin verilir.
  • Dilinizin kullandığı formatta bilimsel gösterime izin verilir.
  • Sadece 4 önemli rakama ihtiyacınız var. Kayan noktalar şiddetle tavsiye edilir.
  • Filan filan bayt cinsinden en kısa cevap.

Test Durumları

Bu e-tablo ile oluşturuldu .

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'nin Twinkies ile Ölüm Yıldızını Güçlendirmesinden esinlenilmiştir .


"varsayılandan joule" a ne demek istiyorsun? bu, çıktı biriminin girişte her zaman verilmeyeceği anlamına mı geliyor?
HyperNeutrino

8
Ayrıca, bir şeyi tamamen imha etmek için gereken enerji miktarı için aslında bir isim nasıl olduğunu seviyorum: P
HyperNeutrino

çıkış birimini 6 farklı girişten herhangi biri olarak alabilir miyiz? aksi halde hantal bir G / Ç formatıdır ve bunlar önerilmez
HyperNeutrino

@HyperNeutrino emin, ama yine de çıkış stenota ihtiyacınız var.
Nissa

2
@StephenLeppik " kullanılacak birimi temsil eden altı ayrı girişten biri " - bu farklı girdiler 4.184, 62.76 vb. Olabilir mi?
ngn

Yanıtlar:


6

05AB1E , 56 54 bayt

Girdiyi şu şekilde alır unit, radius, mass

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

Çevrimiçi deneyin!

Outgolfer Erik (taban 255 kodlaması 4184ve 6276) sayesinde 2 bayt kaydedildi .


16

JavaScript (ES6), 78 bayt

Girdiyi 3 ayrı değişken olarak alır (mass, radius, unit).

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

Test senaryoları

Aşağıdaki snippet, sağlanan e-tablodaki tüm test senaryolarını çalıştırır.

Nasıl?

Bu, @ ColeraSu'nun C cevabına oldukça benzer , tüm birim dizede çalışan JS dostu bir hash fonksiyonu ile.

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

Jöle , 78 bayt

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

Çevrimiçi deneyin!

Dizelerle ilgili şeyler gerçekten Jelly'in meydan okuması değil ...

User202729 sayesinde -7 bayt (JavaScript tarafından dövülmeme yardımcı olduğunuz için teşekkürler: D)


Evet, şimdi JS ile bağlanmışsın ve hala zirvede değilsin.
Nissa

@StephenLeppik En azından dövülmüyorum: D ve shush 05AB1E, dize zorluklarında doğal olarak daha iyidir: P
HyperNeutrino

6

C, 113 bayt

Sondaki kullanarak, ikinci karakteri Hash '\0'arasında "J". C satır içi dizisi kullanılır.

En Mson ikinci çarpmamız gerektiğini unutmayın , aksi takdirde taşacak 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);}

Çevrimiçi deneyin!


+1. Mümkünse emin değilim, ancak f (m, r, char * c) float m, r {…} bazı baytlar kaydeder. Ayrıca,
printf'den

@xanoetux Hangi derleyiciyi kullanıyorsunuz? Her ikisi de benim makinemde çalışmıyor.
Colera Su

GCC kullanıyorum. Test edilmedi, ancak son noktalı virgül hakkında oldukça eminim. (daha sonra test edecek)
xanoetux

4

APL (Dyalog Unicode) , 153 71 69 bayt

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

Çevrimiçi deneyin!

@ Adám'a bu eski cevabımı kesinlikle ezdiğin için teşekkürler. @Ngn'ye 2 bayt için teşekkürler.

Bu 'işlev' aslında çağrılan bir operatördür op. Ölçü birimlerinin tüm değerleri bilimsel gösterime dönüştürülmüştür.

Nasıl çalışır:

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

Piton 3, 112 106 108 101 bayt

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

Oldukça düz ileri. Python'un egösterimini kullanır . Üniteyi ikinci harfe göre ayıran ve aşındırıcı değere bölen bir diksiyon kullanır. u[1:2]temelde u[1], ''bir hata (yalnızca şimdi öğrendim) yerine döner bekliyoruz . Ardından, birkaç basitleştirmeyle formülü uygular.

edit: totallyhuman sayesinde 106'ya, yeni nukes değeri nedeniyle 108'e ve Colera Su sayesinde 101'e kadar.

Çevrimiçi deneyin!


3

Excel (Office 365), 106 101 97 bayt

Hücrenin A1kütle, A2yarıçap ve B1çıktı için kısayol olarak yazılan birim olduğu varsayılır .

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

Eski moda Excel'in SWITCHişlevi yok, bu yüzden

=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

Sen yerine 2 bayt kaydedebilirsiniz 299792E3^2ile 89876E12 tüm değerleri bölün tarafından (soru gereksinimleri için hala doğru, yeterli uzunlukta.) 1000Başka bir 2 kaydeder:=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, sadece Switch()işlevin Excel'in masaüstü kopyaları için kullanılabilir olduğunu ve Office 2016 ile tanıtıldığını atmak istiyorum .
Taylor Scott

1

Yakut, 83 82 bayt

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

Birimler ( i * k mod mformül) için bir LUT'u dizine eklemek için özel bir karma kullanır . Sayılar kaba kuvvet kullanılarak bulundu.


0

Excel, 94 bayt

Kütle A1, Yarıçap B1, Birim C1. Yukarı bak 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

Jöle , 59 bayt

Birimleri dönüştürmek için başka garip bir yöntem denemek istedim. Ancak kodun geri kalanı muhtemelen kötü golf.

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

Çevrimiçi deneyin!

Nasıl?

ASCII kodlarının ilkeliğinden bir birim dizgisinin 'imzasını' oluşturuyoruz. Bunu ikili bir değer olarak yorumlar ve arama tablosundaki son dizini almak için bir modulo uygularız.

⁵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

Yardımcı bağlantı, her birim için aşağıdaki endeksleri verir:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.