Giả sử báo thức của bạn đánh thức bạn vào một buổi sáng, nhưng bạn nhấn snooze để bạn có thể ngủ thêm 8 phút nữa. Khi nó đổ chuông một lần nữa, bạn miễn cưỡng đứng dậy và đi tắm, mà bạn ước tính mất 15 đến 17 phút. Sau đó, bạn đánh răng đúng 2 phút và mặc quần áo, mất khoảng 3 đến 5 phút. Cuối cùng, bạn ăn một bữa sáng vội vàng trong 6 đến 8 phút và chạy ra khỏi cửa.
Chúng ta có thể biểu thị trình tự thời gian này là 8 15-17 2 3-5 6-8
.
Với sự không chắc chắn của thói quen buổi sáng của bạn, xác suất bạn thực hiện mỗi nhiệm vụ ở một số phút cụ thể kể từ khi bạn thức dậy là gì?
Giả sử mỗi tác vụ mất toàn bộ số phút, chúng ta có thể lập biểu đồ cho mọi sự kết hợp có thể của các khoảng thời gian không chắc chắn (ví dụ 3, 4 và 5 phút để đánh răng). Biểu đồ này cho thấy tất cả 27 khả năng, với thời gian tăng dần về bên phải và mỗi tác vụ của N phút được biểu thị bằng (N - 1) dấu gạch ngang và một thanh dọc, chỉ để đánh dấu kết thúc của nó. Ranh giới phút xảy ra giữa các ký tự, vì vậy khoảng cách giữa cột 8
và 9
cột được 8 min 59 sec
chuyển thành 9 min
.
1111111111222222222233333333334
1234567890123456789012345678901234567890 <-- Minute
-------|--------------|-|--|-----|
-------|--------------|-|--|------|
-------|--------------|-|--|-------|
-------|--------------|-|---|-----|
-------|--------------|-|---|------|
-------|--------------|-|---|-------|
-------|--------------|-|----|-----|
-------|--------------|-|----|------|
-------|--------------|-|----|-------|
-------|---------------|-|--|-----|
-------|---------------|-|--|------|
-------|---------------|-|--|-------|
-------|---------------|-|---|-----|
-------|---------------|-|---|------|
-------|---------------|-|---|-------|
-------|---------------|-|----|-----|
-------|---------------|-|----|------|
-------|---------------|-|----|-------|
-------|----------------|-|--|-----|
-------|----------------|-|--|------|
-------|----------------|-|--|-------|
-------|----------------|-|---|-----|
-------|----------------|-|---|------|
-------|----------------|-|---|-------|
-------|----------------|-|----|-----|
-------|----------------|-|----|------|
-------|----------------|-|----|-------|
1234567891111111111222222222233333333334 <-- Minute
0123456789012345678901234567890
Rõ ràng là thói quen có thể mất tối đa 40 phút và ít nhất 34 phút.
Câu hỏi là, tại một phút cụ thể, giả sử phút 29, cơ hội bạn thực hiện trong 5 nhiệm vụ là bao nhiêu? Giả sử mỗi khung thời gian không chắc chắn được phân phối đồng đều trong toàn bộ số phút chính xác. Vì vậy, một nhiệm vụ 4-7 có 25% cơ hội mất 4, 5, 6 hoặc 7 phút.
Từ biểu đồ có thể thấy rằng vào phút 29 đã có một ...
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)
Tương tự như vậy ở phút 1, có một 27/27
cơ hội bạn đang ngủ với 0/27
mọi nơi khác.
Ví dụ, tại phút 38, 17 trong số các thói quen tiềm năng đã kết thúc. Vì vậy, trong 10 trên 10 trường hợp bạn sẽ được ăn. Điều này có nghĩa là xác suất trông giống như
0/10 task 1, 0/10 task 2, 0/10 task 3, 0/10 task 4, 10/10 task 5
Thử thách
Viết hàm lấy một số nguyên cho giá trị phút và một chuỗi bao gồm một chuỗi các số nguyên đơn hoặc các cặp số nguyên a-b
với b
> a
, tất cả được phân tách bằng dấu cách (giống như 8 15-17 2 3-5 6-8
). Tất cả các số nguyên là tích cực. Số phút đầu vào sẽ nhỏ hơn hoặc bằng thời gian tối đa có thể (ví dụ 40).
Các chức năng nên trở một chuỗi biểu thị unreduced cơ hội phân đoạn trở trong mỗi công việc vào phút nhất định.
Ví dụ
myfunc(29, "8 15-17 2 3-5 6-8")
trả về chuỗi0/27 0/27 0/27 24/27 3/27
myfunc(1, "8 15-17 2 3-5 6-8")
trả về chuỗi27/27 0/27 0/27 0/27 0/27
myfunc(38, "8 15-17 2 3-5 6-8")
trả về chuỗi0/10 0/10 0/10 0/10 10/10
myfunc(40, "8 15-17 2 3-5 6-8")
trả về chuỗi0/1 0/1 0/1 0/1 1/1
Nếu ngôn ngữ của bạn không có chuỗi hoặc hàm, bạn có thể sử dụng các biến được đặt tên, stdin / stdout, dòng lệnh hoặc bất cứ thứ gì có vẻ phù hợp nhất.
Chấm điểm
Đây là mã golf. Giải pháp ngắn nhất trong byte thắng.
|
, bên phải |
hoặc một nửa của mỗi nhiệm vụ?