Tính tò mò đã giết chết con mèo?


20

Một số người nói rằng sự tò mò đã giết chết con mèo. Người khác nói đó là hộp và chất độc. RSPCA nói rằng Erwin Schrödinger cần mất quyền sở hữu vật nuôi.

Với các nhà hoạt động bảo vệ quyền động vật bên ngoài nhà của mình. Nhà khoa học giết mèo mèo Schrödinger cuối cùng đã đưa ra phát minh vĩ đại nhất của mình. Một hỗn hợp đặc biệt, phóng xạ của không phô trương và handwavium có thể có bất kỳ chu kỳ bán rã nào, và một gram sản phẩm có khả năng giết chết bất kỳ sinh vật sống nào. Thật không may, khi anh ta thử kiểm tra nó trên con mèo cuối cùng của mình: Bob, anh ta quên rằng mèo có 9 mạng và vì vậy sẽ cần 9 gram để giết. Với một ít nước nhưng không có thức ăn, Bob tội nghiệp sẽ sống đúng 1 tuần (7 ngày) nếu sản phẩm không giết chết anh ta trước.

Nhiệm vụ: Đưa ra một khối lượng đầu vào tính bằng miligam và chu kỳ bán rã tính bằng mili giây - cả hai số nguyên có thể vượt quá 2 ^ 31, viết chương trình đưa ra liệu siêu phẩm bí ẩn có giết chết con mèo hay không, nếu thời gian là 1 tuần giới hạn hết hạn trước. Giả sử đúng / có / 1 / bất cứ điều gì được chỉ định trong câu trả lời là khi anh ta không chết vì đói.

Để sản phẩm giết được anh ta, tổng cộng 9 gram phải phân rã. Vì vậy, trong một mẫu 18 gram, 1 nửa đời phải vượt qua. Nếu mẫu chứa ít hơn hoặc bằng 9 gram, điều này sẽ không bao giờ đạt được, và do đó, có thể giả định ngay lập tức 1 tuần sẽ trôi qua trước khi phân rã 9 gram.

Bạn có thể giả sử:

  • Bob chết 9 micrô giây đã phân rã.
  • Sự thay đổi là khối lượng do sâu răng không quan trọng.
  • Tất cả các ngày và thời gian theo thời gian trái đất thường được chấp nhận.
  • Hộp Bob được niêm phong là không thể phá vỡ và không thể mở được, vì vậy không có cơ hội tử vong do các nguyên nhân khác.
  • Oxy cũng không có vấn đề gì.
  • Nếu cả hai xảy ra cùng một lúc thì đầu ra đều được chấp nhận.
  • Tất cả các đầu vào phải dưới 2 ^ 63-1

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

Thí dụ:

18000 604800001

Để 9 gram phân rã, chính xác 1 nửa đời phải vượt qua (18000/2 = 9000 miligam hoặc 9 gram). 1 nửa đời là 604800001 mili giây, hoặc 168 giờ và 1 mili giây, hoặc chính xác là 1 tuần và 1 mili giây. Vì Bob chết vì đói đúng 1 tuần, đầu ra là sai khi anh ta chết vì đói ngay trước khi đạt đến giới hạn sản phẩm 9 gram

8000 40000 false

70000 800 true

18000 604800000 either

18000 604800001 false

18000 604799999 true

1 1 false

100000 1 true

1000000000 1000000000 true

Ghi điểm: Đương nhiên, chúng tôi muốn sự đau khổ của Bob kết thúc nhanh chóng, và vì vậy thời gian bán hủy ngắn hơn là tốt nhất. Thời gian bán hủy và byte đều kết thúc bằng E, vì vậy rõ ràng số byte ngắn nhất sẽ thắng.


6
Bạn có nhận ra rằng một chất phóng xạ không bao giờ phân rã hoàn toàn
Rohan Jhunjhunwala

1
Tôi không biết chúng ta phải làm gì ở đây ... Bạn có thể đi qua từng bước để tìm hiểu xem đầu ra có nên truehay falsekhông?
Beta Decay

Xin chào và chào mừng đến với PPCG! Như những người khác đã nói, điều này có thể sử dụng chỉ làm rõ hơn một chút. Nếu bạn giải quyết các điểm nêu trên, tôi nghĩ rằng đây có thể là một thử thách gọn gàng và nó sẽ được mở lại. Để tham khảo trong tương lai, chúng tôi có sẵn một Sandbox để các tác giả có thể nhận phản hồi về các thách thức trước khi đăng chúng lên trang web chính.
admBorkBork 17/8/2016

3
Bạn có thể cho chúng tôi một phương trình mà đầu ra cho True không?
xnor 17/8/2016

1
@xnor Đối với chu kỳ bán rã λvà khối lượng m, m-m*(1/2)**(604800000/λ) > 9000(hoặc , vì trường hợp cạnh có thể đi theo một trong hai cách).
Mego

Câu trả lời:


9

Python 3, 33 byte

lambda a,b:a-a*.5**(6048e5/b)>9e3

Giải trình:

         6048e5         # number of milliseconds in 1 week
               /b       # half-lifes per week
  a*.5**(        )      # mgs of substance remaining after 1 week
a-                      # mgs of substance decayed after one week
                  >9e3  # return true if more than 9000mgs has decayed in 1 week

Thử ở đây


Ngoài ra 33 byte:lambda a,b:2**(-6048e5/b)+9e3/a<1
Daniel

5

CJam (22 byte)

q~dX.5@6048e5\/#-*9e3>

Bản demo trực tuyến

Mổ xẻ

Một lời giải thích nhanh chóng về các phép toán: nếu λsau tnửa đời thì tỷ lệ của chất phóng xạ còn lại là (1/2)^(t/λ), do đó tỷ lệ bị phân rã là 1 - (1/2)^(t/λ).

q~d         e# Parse input, ensuring that the later division will use doubles
X.5@6048e5\ e# Rearrange stack to: m 1 0.5 6048e5 λ
/#-*        e# Div, pow, sub, mul, giving the total mass decayed after a week
9e3>        e# Is it OVER 9000! ?

5

Fourier, 51 byte

Tôi phải thừa nhận rằng tôi không hiểu đầy đủ về chương trình này ... Chủ yếu chỉ là bản dịch mã Python của TheNumberOne.

oI~M~NI~H604800000~G>H{1}{G/H^(M/2~Mi^~i)N-M>9000@o}

Lưu ý đây là chương trình đầu tiên tôi viết cho PPCG, sử dụng @chức năng đầu ra rõ ràng.

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


4
Tên người dùng phù hợp ...
ojdo 18/8/2016

@ojdo Haha có: D
Beta Decay

4

Trên thực tế, 20 byte

5╤:6048*/1½ⁿ1-*93╤*<

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

Giải trình:

5╤:6048*/1½ⁿ1-*93╤*<
5╤                    10**5
  :6048               6048
       *              6048*10**5 (milliseconds in 1 week)
        /             divide by half-life
         1½ⁿ          (1/2)**(^)
            1-        1-(^) (% of sample decayed after 1 week)
              *       multiply by sample mass (mass decayed after 1 week)
               93╤*   9*10**3 (9000)
                   <  is 9000 < sample mass decayed?

3

APL Dyalog , 19 byte

9E3≤⊣-⊣×.5*6048E5÷⊢

9E3≤ là 9000 nhỏ hơn hoặc bằng

⊣- đối số bên trái (khối lượng) trừ

⊣× thời gian đối số bên trái

.5*  Với sức mạnh của

6048E5÷⊢ 604800000 chia cho đối số đúng (nửa đời)

Không cần dấu ngoặc đơn, vì APL hoàn toàn từ phải sang trái.

Dùng thử trực tuyến!


1
19 byte. Đó là sự trao đổi chất.
C. Tewalt

@matrixugly Trong trường hợp này, tôi sẽ hỏi tại sao các ngôn ngữ khác có quá nhiều lông tơ. Tôi có chính xác một ký tự cho mỗi "vật" trong một ký hiệu trông khá bình thường (như toán học).
Adám
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.