Припустимо, ваша тривога розбудить вас одного ранку, але ви натискаєте на затримку, щоб ви могли спати ще 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)
Так само в хвилину 1 була 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, командний рядок або все, що здається найбільш підходящим.
Оцінка балів
Це код гольфу. Виграє найкоротше рішення в байтах .
|
, праворуч |
або половину кожного?