A curiosidade matou o gato?


20

Algumas pessoas dizem que a curiosidade matou o gato. Outros dizem que foi a caixa e o veneno. A RSPCA diz que Erwin Schrödinger precisa perder o direito de possuir animais de estimação.

Com ativistas dos direitos dos animais fora de sua casa. O cientista assassino de gatos Schrödinger finalmente apresentou sua maior invenção. Uma mistura radioativa especial de unobtanium e handwavium que pode ter meia-vida e um único grama do produto é capaz de matar qualquer criatura viva. Infelizmente, quando ele tentou testá-lo em seu gato final: Bob, ele esqueceu que os gatos tinham 9 vidas e, portanto, precisaria de 9 gramas para matar. Com um pouco de água, mas sem comida, o pobre Bob viverá exatamente 1 semana (7 dias) se o produto não o matar primeiro.

A tarefa: dada a entrada de uma massa em miligramas e meia-vida em milissegundos - ambos os números inteiros que podem exceder 2 ^ 31, escreva um programa que mostre se o superproduto misterioso mata ou não o gato ou se é uma semana o limite expira primeiro. Suponha que true / yes / 1 / qualquer coisa especificada na resposta seja para quando ele não morrer de fome.

Para que o produto o mate, um total de 9 gramas deve se deteriorar. Assim, de uma amostra de 18 gramas, 1 meia-vida deve passar. Se a amostra contiver menos ou igual a 9 gramas, isso nunca será alcançado e, portanto, pode-se presumir imediatamente que 1 semana passará antes que 9 gramas se deteriorem.

Você pode assumir:

  • Bob morre, o microssegundo 9 gramas decaiu.
  • A mudança é de massa devido à deterioração não importa.
  • Todos os dias e horários seguem o horário da Terra geralmente aceito.
  • A caixa em que Bob está selado é inquebrável e inacessível; portanto, não há chance de morte por outras causas.
  • Oxigênio também não é problema.
  • Se os dois acontecerem exatamente ao mesmo tempo, qualquer saída será aceitável.
  • Todas as entradas devem estar abaixo de 2 ^ 63-1

Casos de teste:

Exemplo:

18000 604800001

Para que 9 gramas se deteriorem, exatamente 1 meia-vida deve passar (18000/2 = 9000 miligramas ou 9 gramas). Uma meia-vida é 604800001 milissegundos, ou 168 horas e 1 milissegundo, ou exatamente 1 semana e 1 milissegundo. Como Bob morre de fome exatamente em 1 semana, a produção é falsa, pois ele morreu de fome pouco antes do limite de 9 gramas do produto ser atingido

8000 40000 false

70000 800 true

18000 604800000 either

18000 604800001 false

18000 604799999 true

1 1 false

100000 1 true

1000000000 1000000000 true

Pontuação: Naturalmente, queremos que o sofrimento de Bob termine rapidamente e, portanto, uma meia-vida mais curta é melhor. A meia-vida e o byte terminam em E, portanto, claramente a menor contagem de bytes vence.


6
Você percebe que uma substância radioativa decai nunca totalmente
Rohan Jhunjhunwala

1
Não tenho idéia do que temos que fazer aqui ... Você pode seguir cada etapa para descobrir se a saída deve ser trueou false?
Beta Decay

Olá e bem-vindo ao PPCG! Como outros já disseram, isso poderia ser um pouco mais esclarecedor. Se você abordar os pontos levantados acima, acho que esse poderia ser um grande desafio e seria reaberto. Para referência futura, temos um Sandbox disponível para que os autores possam receber feedback sobre os desafios antes de publicá-los no site principal.
AdmBorkBork 17/08

3
Você poderia nos dar uma equação para quais saídas são True?
Xnor

1
@xnor Para meia-vida λe massa m, m-m*(1/2)**(604800000/λ) > 9000(ou , já que o case de borda pode ser de qualquer maneira).
Mego

Respostas:


9

Python 3, 33 bytes

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

Explicação:

         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

Experimente aqui


Também 33 bytes:lambda a,b:2**(-6048e5/b)+9e3/a<1
Daniel

5

CJam (22 bytes)

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

Demonstração online

Dissecação

Uma explicação rápida da matemática: se a halflife é λ, depois do tempo, ta proporção de material radioativo restante é (1/2)^(t/λ), então a proporção é decaída 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 bytes

Devo admitir que não entendo completamente esse programa ... Principalmente apenas uma tradução do código Python do TheNumberOne.

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

Observe que este é o primeiro programa que escrevi para o PPCG que usa @a função de saída clara.

Experimente online!


4
Nome de usuário apropriado ...
ojdo 18/08/16

@ojdo Haha yes: D
Beta Decay

4

Na verdade, 20 bytes

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

Experimente online!

Explicação:

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 bytes

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

9E3≤ é 9000 menor ou igual a

⊣- o argumento esquerdo (massa) menos

⊣× os tempos do argumento esquerdo

.5*  ½ ao poder de

6048E5÷⊢ 604800000 dividido pelo argumento correto (meia-vida)

Não há necessidade de parênteses, pois o APL é estritamente da direita para a esquerda.

TryAPL online!


1
19 bytes. Isso é diabólico.
C. Tewalt

@matrixugly Nesse caso, eu perguntaria por que os outros idiomas têm tanto fluff. Eu tenho exatamente um caractere por "coisa" em uma notação de infixo de aparência bastante normal (como matemática).
Adám 18/08/16
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.