假设有一天早上你的闹钟吵醒了你,但是你打瞌睡,这样你就可以多睡8分钟了。当它再次响起时,你会不情愿地站起来洗个澡,你估计要花15到17分钟。然后你刷牙整整2分钟,然后穿好衣服,这大约需要3到5分钟。最后,你在6到8分钟内吃了一顿匆忙的早餐,然后跑出了门。
我们可以将这个时序表示为8 15-17 2 3-5 6-8。
考虑到你早上的日常工作不确定,从你第一次醒来起,你在特定时间内完成每一项任务的概率是多少?
假设每项任务都需要整整几分钟时间,我们可以绘制每个不确定时间跨度的可能组合(例如,刷牙的时间是3分钟、4分钟和5分钟)。这张图表显示了所有27种可能性,随着时间的向右增长,每项任务N分钟代表(N1)破折号和一个垂直条,只是为了标记它的结束。字符之间存在微小的边界,因此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个潜在的例程已经结束。所以,在十分之一的情况下,你将吃东西。这意味着概率看起来像是
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/27myfunc(1, "8 15-17 2 3-5 6-8")返回字符串27/27 0/27 0/27 0/27 0/27myfunc(38, "8 15-17 2 3-5 6-8")返回字符串0/10 0/10 0/10 0/10 10/10myfunc(40, "8 15-17 2 3-5 6-8")返回字符串0/1 0/1 0/1 0/1 1/1如果您的语言没有字符串或函数,您可以使用命名变量、stdin/stdout、命令行或其他最合适的方法。
这是暗号高尔夫。最短的解决方案单位字节获胜。
发布于 2014-09-26 21:37:08
{{⍵,'/',y}¨⌊|-2-/0,(y←+/,⍺≤⊃⌽x)×1,⍨¯1↓⍺{+/÷∘⍴⍨⍺≤,⍵}¨x←∘.+\{⊃{⍺,⍺↓⍳⍵}/⍎('-'⎕R' ')⍵}¨('\S+'⎕S'\0')⍵} f←{{⍵,'/',y}¨⌊|-2-/0,(y←+/,⍺≤⊃⌽x)×1,⍨¯1↓⍺{+/÷∘⍴⍨⍺≤,⍵}¨x←∘.+\{⊃{⍺,⍺↓⍳⍵}/⍎('-'⎕R' ')⍵}¨('\S+'⎕S'\0')⍵}
29 f '8 15-17 2 3-5 6-8'
0 / 27 0 / 27 0 / 27 24 / 27 3 / 27
1 f '8 15-17 2 3-5 6-8'
27 / 27 0 / 27 0 / 27 0 / 27 0 / 27
38 f '8 15-17 2 3-5 6-8'
0 / 10 0 / 10 0 / 10 0 / 10 10 / 10
40 f '8 15-17 2 3-5 6-8'
0 / 1 0 / 1 0 / 1 0 / 1 1 / 1我希望你不要介意奇怪的间隔
https://codegolf.stackexchange.com/questions/38207
复制相似问题