假设您的闹钟在一个早晨将您叫醒,但您打了贪睡使您可以再睡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
在其他地方打everywhere。
例如,在第38分钟,可能的例程中的17个已经结束。因此,十分之十的人会进食。这意味着概率看起来像
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,命令行或任何最合适的方法。
计分
这是代码高尔夫。以字节为单位的最短解决方案获胜。
|
,右|
或一半吗?