La curiosità uccise il gatto?


20

Alcuni dicono che la curiosità abbia ucciso il gatto. Altri dicono che era la scatola e il veleno. La RSPCA afferma che Erwin Schrödinger deve perdere il diritto di possedere animali domestici.

Con attivisti per i diritti degli animali fuori dalla sua casa. Lo scienziato assassino di gatti Schrödinger ha finalmente escogitato la sua più grande invenzione. Una speciale miscela radioattiva di unobtanium e handwavium che può avere qualsiasi emivita e un singolo grammo di prodotto è in grado di uccidere qualsiasi creatura vivente. Sfortunatamente, quando ha provato a testarlo sul suo ultimo gatto: Bob, ha dimenticato che i gatti hanno 9 vite e quindi avrebbe bisogno di 9 grammi per uccidere. Con un po 'd'acqua ma senza cibo, il povero Bob vivrà esattamente 1 settimana (7 giorni) se il prodotto non lo uccide per primo.

Il compito: dato un input di una massa in milligrammi e un'emivita in millisecondi - entrambi numeri interi che possono superare 2 ^ 31, scrivere un programma che emetta se il super prodotto misterioso uccide o meno il gatto o se è 1 settimana il limite scade prima. Assumi vero / sì / 1 / qualsiasi cosa specificata nella risposta è per quando non muore di fame.

Perché il prodotto lo uccida, devono decadere in totale 9 grammi. Quindi, su un campione di 18 grammi, deve passare 1 emivita. Se il campione contiene meno o uguale a 9 grammi, ciò non sarà mai raggiunto e quindi si può presumere immediatamente che passerà 1 settimana prima che decadano 9 grammi.

Puoi presumere:

  • Bob muore il microsecondo 9 grammi è decaduto.
  • Il cambiamento è di massa a causa del decadimento non importa.
  • Tutti i giorni e gli orari seguono l'ora della Terra generalmente accettata.
  • La scatola in cui è sigillato Bob è infrangibile e non aperto, quindi non c'è possibilità di morte per altre cause.
  • Anche l'ossigeno non è un problema.
  • Se entrambi si verificano contemporaneamente, l'output è accettabile.
  • Tutti gli ingressi dovrebbero essere inferiori a 2 ^ 63-1

Casi test:

Esempio:

18000 604800001

Per far decadere 9 grammi, deve passare esattamente 1 emivita (18000/2 = 9000 milligrammi o 9 grammi). 1 emivita è 604800001 millisecondi, o 168 ore e 1 millisecondo, o esattamente 1 settimana e 1 millisecondo. Poiché Bob muore di fame esattamente 1 settimana, l'output è falso poiché è morto di fame poco prima del raggiungimento del limite di 9 grammi di prodotto

8000 40000 false

70000 800 true

18000 604800000 either

18000 604800001 false

18000 604799999 true

1 1 false

100000 1 true

1000000000 1000000000 true

Punteggio: Naturalmente vogliamo che la sofferenza di Bob finisca rapidamente, quindi è meglio un'emivita più breve. L'emivita e il byte terminano entrambi in E, quindi vince il conteggio dei byte più breve.


6
Ti rendi conto che una sostanza radioattiva non decade mai completamente
— Rohan Jhunjhunwala,

1
Non ho idea di cosa dobbiamo fare qui ... Puoi seguire ogni passaggio per scoprire se l'output dovrebbe essere trueo false?
— Decadimento beta

Ciao e benvenuto in PPCG! Come altri hanno già detto, questo potrebbe usare solo un po 'più di chiarimenti. Se affronti i punti sollevati sopra, penso che questa potrebbe essere una bella sfida, e si riaprirebbe. Per riferimento futuro, abbiamo a disposizione un Sandbox in modo che gli autori possano ricevere feedback sulle sfide prima di pubblicarle sul sito principale.
— AdmBorkBork,

3
Potresti darci un'equazione per quali output danno True?
— xnor

1
@xnor Per emivita λe massa m, m-m*(1/2)**(604800000/λ) > 9000(o ≥, quanto il caso limite può andare in entrambi i casi).
— Mego,

Risposte:


9

Python 3, 33 byte

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

Spiegazione:

         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

Prova qui


Anche 33 byte:lambda a,b:2**(-6048e5/b)+9e3/a<1
— Daniel,

5

CJam (22 byte)

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

Demo online

Dissezione

Una rapida spiegazione della matematica: se l'emivita è λdopo il tempo tla proporzione del materiale radioattivo rimanente è (1/2)^(t/λ), quindi la proporzione è decaduta 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

Devo ammettere che non capisco perfettamente questo programma ... Principalmente solo una traduzione del codice Python di TheNumberOne.

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

Nota che questo è il primo programma che ho scritto per PPCG che utilizza @la funzione di output chiaro.

Provalo online!


4
Nome utente
— adatto

@ojdo Haha sì: D
— Decadimento beta

4

In realtà, 20 byte

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

Provalo online!

Spiegazione:

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 byte

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

9E3≤ è 9000 inferiore o uguale a

⊣- argomento sinistro (massa) meno

⊣× volte l'argomento sinistro

.5*  ½ alla potenza di

6048E5÷⊢ 604800000 diviso per l'argomento giusto (emivita)

Non c'è bisogno di parentesi, poiché APL è strettamente da destra a sinistra.

ProvaAPL online!


1
19 byte. Questo è metabolico.
— C. Tewalt,

@matrixugly In questo caso, chiedo perché le altre lingue abbiano così tanta lanugine. Ho esattamente un carattere per "cosa" in una notazione infix (come la matematica) piuttosto normale.
— Adám,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.