Tôi cần gì để phá hủy thế giới?


19

Các năng lượng liên kết hấp dẫn của một hành tinh là lượng năng lượng cần thiết để tách từng mảnh nhỏ của nó để không mảnh sẽ quay quanh hoặc va chạm với mảnh khác. Đối với một hình cầu đồng nhất, Wikipedia đưa ra công thức này:

E= =3GM25R

Trong đó G là hằng số hấp dẫn (6.672e - 11 m 3 • kg -1 • s -2 ), M là khối lượng và R là bán kính.

Tôi có thể thực hiện thử thách này về việc chỉ tính toán điều này trong Joules (kg • m 2 • s -2 ), nhưng điều đó thật nhàm chán . Và bên cạnh đó, không phải ai cũng hiểu Joules.

Vì vậy, thay vào đó, hãy chuyển đổi nó thành các đơn vị sau:

  • Kilotons of TNT (4.184 nghìn tỷ Joules, tốc ký kilotons)
  • Vũ khí hạt nhân Hiroshima (62,76 nghìn tỷ Joules, tốc ký nukes)
  • Nữ tiếp viên Twinkies (560.000 Joules, tốc ký twinkies)
  • Kilowatt-giờ (chính xác là 3,6 triệu Joules, tốc ký kWh)
  • Kilôgam năng lượng khối lượng (1 kg khối lượng năng lượng = 299,792,458 2 Joules, tốc ký kg)

Vì vậy, hãy nhập các đầu vào sau:

  • khối lượng tính bằng kilogam
  • bán kính tính bằng mét
  • một trong sáu đầu vào riêng biệt đại diện cho đơn vị sử dụng

Và đầu ra năng lượng liên kết trong các đơn vị được chỉ định. Nối đơn vị tốc ký vào cuối đầu ra.

Quy tắc

  • Tốc ký cho Joules là J.
  • Khoảng trắng tùy ý được cho phép, miễn là nó không phân chia đơn vị tốc ký hoặc số.
  • Ký hiệu khoa học được cho phép, trong bất kỳ định dạng nào ngôn ngữ của bạn sử dụng.
  • Bạn chỉ cần 4 con số đáng kể. Điểm nổi được đánh giá cao đề nghị.
  • Blah blah câu trả lời ngắn nhất tính bằng byte.

Các trường hợp thử nghiệm

Tạo với bảng tính này .

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

Lấy cảm hứng từ Powering the Death Star với Twinkies của Scott Manley.


bạn có ý nghĩa gì bởi "mặc định cho joules"? điều đó có nghĩa là đơn vị đầu ra sẽ không luôn luôn được đưa ra trong đầu vào?
HyperNeutrino

8
Ngoài ra, tôi thích cách thực sự có một tên cho lượng năng lượng cần thiết để tiêu diệt hoàn toàn một thứ: P
HyperNeutrino

chúng ta có thể lấy đơn vị đầu ra là bất kỳ 6 đầu vào riêng biệt nào không? mặt khác, nó là một định dạng I / O cồng kềnh và chúng không được khuyến khích
HyperNeutrino

@HyperNeutrino chắc chắn, nhưng bạn vẫn cần tốc ký trong đầu ra.
Nissa

2
@StephenLeppik " một trong sáu đầu vào riêng biệt đại diện cho đơn vị sử dụng " - những đầu vào riêng biệt đó có thể là 4.184, 62.76, v.v. không?
ngn

Câu trả lời:



16

JavaScript (ES6), 78 byte

Lấy đầu vào là 3 biến khác biệt (mass, radius, unit).

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

Các trường hợp thử nghiệm

Đoạn mã sau chạy tất cả các trường hợp thử nghiệm trong bảng tính được cung cấp.

Làm sao?

Điều này khá giống với câu trả lời C của @ ColeraSu , với hàm băm thân thiện với JS hoạt động trên toàn bộ chuỗi đơn vị.

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

Thạch , 78 byte

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

Hãy thử trực tuyến!

Những thứ cần làm với chuỗi không thực sự là loại thử thách của Jelly ...

-7 byte nhờ user202729 (cảm ơn vì đã giúp tôi không bị đánh bại bởi JavaScript: D)


Vâng, bây giờ bạn đang bị ràng buộc với JS và vẫn không ở trên đầu.
Nissa

@StephenLeppik Ít nhất là tôi không bị đánh bại: D và shush 05AB1E vốn đã tốt hơn ở các thử thách chuỗi: P
HyperNeutrino

6

C, 113 byte

Băm ký tự thứ hai, sử dụng dấu '\0'của "J". Mảng nội tuyến trong C được sử dụng.

Lưu ý chúng ta cần nhân số thứ hai Mcuối cùng, nếu không nó sẽ tràn sang 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);}

Hãy thử trực tuyến!


+1. Không chắc chắn nếu có thể, nhưng f (m, r, char * c) float m, r {mộc} sẽ lưu một số byte. Ngoài ra, dấu chấm phẩy sau printf là tùy chọn
xanoetux

@xanoetux Bạn sử dụng trình biên dịch nào? Cả hai đều không hoạt động trên máy của tôi.
Colera Su

Tôi đang sử dụng GCC. Chưa được kiểm tra, nhưng tôi khá chắc chắn về dấu chấm phẩy cuối cùng. (sẽ kiểm tra sau)
xanoetux

4

APL (Dyalog Unicode) , 153 71 69 byte

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

Hãy thử trực tuyến!

Cảm ơn @ Adám đã hoàn toàn nghiền nát câu trả lời cũ của tôi vào câu hỏi này. Cảm ơn @ngn cho 2 byte.

'Hàm' này thực sự là một toán tử được gọi op. Tất cả các giá trị cho các đơn vị đo lường đã được chuyển thành ký hiệu khoa học.

Làm thế nào nó hoạt động:

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

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

Khá thẳng về phía trước. Sử dụng eký hiệu Python . Sử dụng một dict phân biệt đơn vị dựa trên chữ cái thứ hai và chia cho giá trị ăn mòn. u[1:2]về cơ bản u[1], mong đợi nó trả về ''thay vì một lỗi (mà tôi chỉ học được bây giờ). Sau đó áp dụng công thức với một vài đơn giản hóa.

chỉnh sửa: giảm xuống 106 nhờ hoàn toàn con người, trở lại 108 vì giá trị hạt nhân mới và giảm xuống 101 nhờ Colera Su.

Hãy thử trực tuyến!


3

Excel (Office 365), 106 101 97 byte

Giả sử ô A1là khối lượng, A2là bán kính và B1là đơn vị, được viết dưới dạng tốc ký cho đầu ra.

=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 kiểu cũ không có SWITCHchức năng, vì vậy bạn có

=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

Bạn có thể lưu 2 byte bằng cách thay thế 299792E3^2bằng 89876E12 (Vẫn đủ chính xác cho các yêu cầu câu hỏi.) Chia tất cả các giá trị bằng cách 1000lưu thêm 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

Này, chỉ muốn ném nó ra rằng Switch()chức năng có sẵn cho các bản sao Excel trên máy tính để bàn và đã được giới thiệu với 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}

Sử dụng hàm băm tùy chỉnh để lập chỉ mục LUT cho các đơn vị ( i * k mod mcông thức). Các số được tìm thấy bằng cách sử dụng vũ lực.


0

Excel, 94 byte

Lấy khối lượng từ A1, Bán kính từ B1, Đơn vị trong C1. Nhìn lên trên 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

Thạch , 59 byte

Tôi chỉ muốn thử một phương pháp kỳ lạ khác để chuyển đổi các đơn vị. Nhưng phần còn lại của mã có lẽ bị đánh golf xấu.

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

Hãy thử trực tuyến!

Làm sao?

Chúng tôi xây dựng một "chữ ký" của một chuỗi đơn vị ngoài tính nguyên thủy của mã ASCII của nó. Chúng tôi giải thích nó như một giá trị nhị phân và áp dụng một modulo để lấy chỉ mục cuối cùng trong bảng tra cứu.

⁵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

Liên kết trợ giúp đưa ra các chỉ số sau cho mỗi đơn vị:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.