Suponha que seu alarme o acorde uma manhã, mas você pressiona a soneca para poder dormir por mais 8 minutos. Quando toca de novo, você se levanta de má vontade e toma um banho, que estima levar de 15 a 17 minutos. Você então escovar os dentes por exatamente 2 minutos e se vestir, o que leva cerca de 3 a 5 minutos. Finalmente, você toma um café da manhã apressado em 6 a 8 minutos e sai correndo pela porta.
Podemos denotar essa sequência de tempo como 8 15-17 2 3-5 6-8
.
Dada a incerteza da rotina da manhã, qual é a probabilidade de você executar cada tarefa em um determinado número de minutos desde que acordou?
Assumindo que cada tarefa leva um número inteiro de minutos, podemos traçar todas as combinações possíveis de intervalos de tempo incertos (por exemplo, 3, 4 e 5 minutos para escovar os dentes). Este gráfico mostra todas as 27 possibilidades, com o tempo aumentando para a direita, e cada tarefa de N minutos representada por (N - 1) traços e uma barra vertical, apenas para marcar seu final. Os limites dos minutos ocorrem entre os caracteres; portanto, o espaço entre a coluna 8
e 9
está se 8 min 59 sec
transformando 9 min
.
1111111111222222222233333333334
1234567890123456789012345678901234567890 <-- Minute
-------|--------------|-|--|-----|
-------|--------------|-|--|------|
-------|--------------|-|--|-------|
-------|--------------|-|---|-----|
-------|--------------|-|---|------|
-------|--------------|-|---|-------|
-------|--------------|-|----|-----|
-------|--------------|-|----|------|
-------|--------------|-|----|-------|
-------|---------------|-|--|-----|
-------|---------------|-|--|------|
-------|---------------|-|--|-------|
-------|---------------|-|---|-----|
-------|---------------|-|---|------|
-------|---------------|-|---|-------|
-------|---------------|-|----|-----|
-------|---------------|-|----|------|
-------|---------------|-|----|-------|
-------|----------------|-|--|-----|
-------|----------------|-|--|------|
-------|----------------|-|--|-------|
-------|----------------|-|---|-----|
-------|----------------|-|---|------|
-------|----------------|-|---|-------|
-------|----------------|-|----|-----|
-------|----------------|-|----|------|
-------|----------------|-|----|-------|
1234567891111111111222222222233333333334 <-- Minute
0123456789012345678901234567890
É claro que a rotina poderia levar 40 minutos no máximo e 34 minutos no mínimo.
A questão é, em um minuto específico, digamos, minuto 29, qual é a chance de você estar realizando cada uma das 5 tarefas? Suponha que cada período de tempo incerto seja uniformemente distribuído por todos os minutos exatos. Portanto, uma tarefa de 4-7 tem 25% de chance de levar 4, 5, 6 ou 7 minutos.
A partir do gráfico, pode ser visto que, no minuto 29, houve uma ...
0/27 chance you were snoozing (task 1)
0/27 chance you were showering (task 2)
0/27 chance you were brushing (task 3)
24/27 chance you were dressing (task 4)
3/27 chance you were eating (task 5)
Da mesma forma, no minuto 1, havia uma 27/27
chance de você estar cochilando em 0/27
qualquer outro lugar.
No minuto 38, por exemplo, 17 das rotinas em potencial já foram encerradas. Assim, em 10 de 10 casos, você estará comendo. Isso significa que as probabilidades parecem
0/10 task 1, 0/10 task 2, 0/10 task 3, 0/10 task 4, 10/10 task 5
Desafio
Escreva uma função que utilize um número inteiro para o valor de minuto e uma sequência que consiste em uma sequência de números inteiros únicos ou pares de números inteiros a-b
com b
> a
, todos separados por espaços (exatamente como 8 15-17 2 3-5 6-8
). Todos os números inteiros são positivos. O minuto de entrada será menor ou igual ao tempo máximo possível (40 no exemplo).
A função deve retornar outra string, indicando a chance fracionária não reduzida de estar em cada tarefa no minuto especificado.
Exemplos
myfunc(29, "8 15-17 2 3-5 6-8")
retorna a string0/27 0/27 0/27 24/27 3/27
myfunc(1, "8 15-17 2 3-5 6-8")
retorna a string27/27 0/27 0/27 0/27 0/27
myfunc(38, "8 15-17 2 3-5 6-8")
retorna a string0/10 0/10 0/10 0/10 10/10
myfunc(40, "8 15-17 2 3-5 6-8")
retorna a string0/1 0/1 0/1 0/1 1/1
Se seu idioma não possui strings ou funções, você pode usar variáveis nomeadas, stdin / stdout, linha de comando ou o que parecer mais apropriado.
Pontuação
Isso é código de golfe. A solução mais curta em bytes vence.
|
, a direita |
ou a metade de cada uma?