Merak kediyi öldürdü?


20

Bazı insanlar merakın kediyi öldürdüğünü söylüyor. Diğerleri bunun kutu ve zehir olduğunu söylüyor. RSPCA, Erwin Schrödinger'in evcil hayvan sahibi olma hakkını kaybetmesi gerektiğini söyledi.

Hayvan hakları savunucuları ile evinin dışında. Kedi katili bilim adamı Schrödinger nihayet onun en büyük buluşla geldi. Yarı ömürlü olabilen özel bir radyoaktif unobtanium ve handwavium karışımı ve tek bir gram ürün, herhangi bir canlıyı öldürebilir. Ne yazık ki, son kedisi Bob'u test etmeye çalıştığında, kedilerin 9 canı olduğunu ve öldürmek için 9 grama ihtiyacı olacağını unuttu. Biraz su ile yemek yemeden, ürün ilk önce onu öldürmezse, zavallı Bob tam olarak 1 hafta (7 gün) yaşayacaktır.

Görev: Miligram cinsinden bir kütle ve milisaniye cinsinden bir yarı ömür girdisi verildiğinde - her ikisi de 2 ^ 31'i aşabilecek tamsayılar, gizemli süper ürünün kediyi öldürüp öldürmediğini veya 1 hafta zamanını veren bir program yazın sınır ilk önce sona erer. Varsayalım / evet / 1 / cevapta belirtilen herhangi bir şey açlıktan ölmediği zaman içindir.

Ürünün onu öldürmesi için toplam 9 gram çürümelidir. Bu yüzden 18 gramlık bir numuneden 1 yarılanma ömrü geçmelidir. Örnek 9 gramdan daha az veya buna eşitse, bu asla elde edilemez ve bu nedenle hemen 1 gram 9 gram çürümeden önce geçeceği varsayılabilir.

Varsayabilirsiniz:

  • Bob ölür mikrosaniye 9 gram çürümüş.
  • Çürümeden dolayı kütle değişikliği önemli değil.
  • Tüm günler ve saatler genel olarak kabul edilen dünya saatini takip eder.
  • Bob'un kapalı olduğu kutu kırılmaz ve açılmazdır, bu nedenle diğer nedenlerden dolayı ölüm şansı yoktur.
  • Oksijen de sorun değil.
  • Her ikisi de aynı anda gerçekleşirse, her iki çıktı da kabul edilebilir.
  • Tüm girişler 2 ^ 63-1'in altında olmalıdır

Test senaryoları:

Örnek:

18000 604800001

9 gramın çürümesi için, tam olarak 1 yarı ömür geçmelidir (18000/2 = 9000 miligram veya 9 gram). 1 yarı ömür 604800001 milisaniye veya 168 saat ve 1 milisaniye veya tam olarak 1 hafta ve 1 milisaniyedir. Bob tam 1 hafta içinde açlıktan öldüğü için, 9 gram ürün sınırına ulaşılmadan hemen önce açlıktan öldüğü için çıktı yanlıştır

8000 40000 false

70000 800 true

18000 604800000 either

18000 604800001 false

18000 604799999 true

1 1 false

100000 1 true

1000000000 1000000000 true

Puanlama: Doğal olarak Bob'un acılarının çabuk bitmesini istiyoruz ve bu nedenle daha kısa bir yarı ömür en iyisidir. Yarılanma ömrü ve bayt her ikisi de E ile biter, bu yüzden açıkça en kısa bayt sayısı kazanır.


6
Radyoaktif bir maddenin asla tamamen bozulmadığını fark edersiniz
Rohan Jhunjhunwala

1
Sana çıkış olmalı olmadığını öğrenmek için her adımı geçmesi Can ... Burada yapmamız gereken hiçbir fikrim yok trueya false?
Beta Çürümesi

Merhaba ve PPCG'ye hoş geldiniz! Diğerlerinin söylediği gibi, bu biraz daha açıklayıcı olabilir. Yukarıda belirtilen noktalara değinirseniz, bunun düzgün bir meydan okuma olabileceğini düşünüyorum ve tekrar açılacak. İleride başvurmak üzere yazarlarımız ana siteye göndermeden önce zorluklarla ilgili geri bildirim alabilmeleri için bir Sandbox'ımız var.
AdmBorkBork

3
Bize hangi çıktıların True verdiği bir denklem verir misiniz?
xnor

1
@xnor yarı ömür için λve kütle m, m-m*(1/2)**(604800000/λ) > 9000(ya da kenar durumda, çünkü ya bir yol olabilir).
Mego

Yanıtlar:


9

Python 3, 33 bayt

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

Açıklama:

         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

Burada deneyin


Ayrıca 33 bayt:lambda a,b:2**(-6048e5/b)+9e3/a<1
Daniel

5

CJam (22 bayt)

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

Çevrimiçi demo

teşrih

Matematiğin hızlı bir açıklaması: eğer yarılanma ömrü o λzamandan sonra tkalan radyoaktif materyalin (1/2)^(t/λ)oranı, yani çürümüş oran 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 bayt

Bu programı tam olarak anlamadığımı itiraf etmeliyim ... Temelde TheNumberOne'un Python kodunun bir çevirisi.

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

Bu, PPCG için yazdığım ilk program olan @net çıktı işlevini unutmayın.

Çevrimiçi deneyin!


4
Uygun kullanıcı adı ...
ojdo

@ojdo Haha evet: D
Beta

4

Aslında 20 bayt

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

Çevrimiçi deneyin!

Açıklama:

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

Dyalog APL , 19 bayt

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

9E3≤ 9000 veya daha küçüktür

⊣- sol argüman (kütle) eksi

⊣× sol argüman zamanları

.5*  ½ gücüne

6048E5÷⊢ 604800000 doğru argümana bölündü (yarılanma ömrü)

APL kesinlikle sağdan sola olduğundan parantez gerekmez.

TryAPL çevrimiçi!


1
19 bayt. Bu dyabolik.
C. Tewalt

@matrixugly Bu durumda, diğer dillerin neden bu kadar kabarık olduğunu sorarım. Ben oldukça normal görünümlü bir infix (matematik gibi) gösterimde "şey" başına tam bir karakter var.
Adám
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.