Предположим, ваш будильник разбудит вас однажды утром, но вы включите сон, чтобы вы могли спать еще 8 минут. Когда он снова зазвонит, вы неохотно встаете и принимаете душ, который, по вашим оценкам, занимает от 15 до 17 минут. Затем вы чистите зубы ровно 2 минуты и одеваетесь, что занимает от 3 до 5 минут. Наконец, вы едите поспешный завтрак через 6-8 минут и выбегаете за дверь.
Мы можем обозначить эту временную последовательность как 8 15-17 2 3-5 6-8
.
Учитывая неопределенность вашего утреннего распорядка, какова вероятность того, что вы выполняли каждое задание в определенное количество минут с момента вашего первого пробуждения?
Предполагая, что каждая задача занимает целое количество минут, мы можем наметить каждую возможную комбинацию неопределенных интервалов времени (например, 3, 4 и 5 минут для чистки зубов). На этой диаграмме показаны все 27 возможностей, причем время увеличивается вправо, и каждая задача из N минут представлена (N - 1) штрихами и одной вертикальной чертой, чтобы отметить его окончание. Границы минутные происходят между персонажами, поэтому пространство между 8
и 9
колонной 8 min 59 sec
превращается 9 min
.
1111111111222222222233333333334
1234567890123456789012345678901234567890 <-- Minute
-------|--------------|-|--|-----|
-------|--------------|-|--|------|
-------|--------------|-|--|-------|
-------|--------------|-|---|-----|
-------|--------------|-|---|------|
-------|--------------|-|---|-------|
-------|--------------|-|----|-----|
-------|--------------|-|----|------|
-------|--------------|-|----|-------|
-------|---------------|-|--|-----|
-------|---------------|-|--|------|
-------|---------------|-|--|-------|
-------|---------------|-|---|-----|
-------|---------------|-|---|------|
-------|---------------|-|---|-------|
-------|---------------|-|----|-----|
-------|---------------|-|----|------|
-------|---------------|-|----|-------|
-------|----------------|-|--|-----|
-------|----------------|-|--|------|
-------|----------------|-|--|-------|
-------|----------------|-|---|-----|
-------|----------------|-|---|------|
-------|----------------|-|---|-------|
-------|----------------|-|----|-----|
-------|----------------|-|----|------|
-------|----------------|-|----|-------|
1234567891111111111222222222233333333334 <-- Minute
0123456789012345678901234567890
Ясно, что процедура могла занять не более 40 минут и не менее 34 минут.
Вопрос в конкретную минуту, скажем, в минуту 29, какова вероятность того, что вы выполняли каждое из 5 заданий? Предположим, что каждый неопределенный период времени равномерно распределен по точным минутам. Таким образом, задача 4-7 имеет 25% -ный шанс занять 4, 5, 6 или 7 минут.
Из графика видно, что на 29 минуте произошло ...
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)
Точно так же на 27/27
первой минуте был шанс, что вы спали с кем- 0/27
то еще.
Например, на 38-й минуте 17 потенциальных процедур уже закончились. Таким образом, в 10 из 10 случаев вы будете есть. Это означает, что вероятности выглядят как
0/10 task 1, 0/10 task 2, 0/10 task 3, 0/10 task 4, 10/10 task 5
Вызов
Напишите функцию, которая принимает целочисленное значение для минутного значения, и строку, состоящую из последовательности отдельных целых чисел или пар целых чисел a-b
с b
> a
, разделенных пробелами (точно так же, как 8 15-17 2 3-5 6-8
). Все целые числа положительны. Входная минута будет меньше или равна максимально возможному времени (например, 40).
Функция должна возвращать еще одну строку, обозначающую невосстановленный дробный шанс присутствия в каждой задаче в данную минуту.
Примеры
myfunc(29, "8 15-17 2 3-5 6-8")
возвращает строку0/27 0/27 0/27 24/27 3/27
myfunc(1, "8 15-17 2 3-5 6-8")
возвращает строку27/27 0/27 0/27 0/27 0/27
myfunc(38, "8 15-17 2 3-5 6-8")
возвращает строку0/10 0/10 0/10 0/10 10/10
myfunc(40, "8 15-17 2 3-5 6-8")
возвращает строку0/1 0/1 0/1 0/1 1/1
Если в вашем языке нет строк или функций, вы можете использовать именованные переменные, stdin / stdout, командную строку или все, что кажется наиболее подходящим.
счет
Это код гольф. Самое короткое решение в байтах побеждает.
|
, правое |
или половину каждого?