ความไม่แน่นอนในเส้นเวลาของวัน


12

สมมติว่าคุณตื่นขึ้นมาในเช้าวันหนึ่ง แต่คุณนอนหลับเพื่อให้คุณนอนหลับได้อีก 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 sec9 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, บรรทัดคำสั่งหรือสิ่งที่เหมาะสมที่สุด

เกณฑ์การให้คะแนน

นี่คือรหัสกอล์ฟ ทางออกที่สั้นที่สุดในหน่วยไบต์ชนะ


คำถามไม่ได้ระบุการแจกแจงความน่าจะเป็นเฉพาะสำหรับเวลาที่ใช้ในแต่ละงาน มันควรจะกระจายตามปกติ? ฉันสามารถรับการแจกจ่ายที่ฉันต้องการได้หรือไม่?
feersum

1
@ Calvin นั่นไม่ใช่การแจกแจงแบบปกติ คุณอาจต้องการกระจายเครื่องแบบหรือไม่?
feersum

แต่ละงานรวมถึงด้านซ้ายด้าน|ขวา|หรือครึ่งหนึ่งของแต่ละงานหรือไม่?
Peter Taylor

ปัญหาที่กล่าวถึงทั้งหมดได้รับการแก้ไขแล้ว มีปัญหาอื่นอีกไหม?
งานอดิเรกของ Calvin

1
จะเกิดอะไรขึ้นหากมีโอกาสที่จะไม่มีงานเกิดขึ้น
ภูมิใจ haskeller

คำตอบ:


3

CJam, 124 115 100 92 89 ไบต์

สิ่งนี้สามารถเล่นกอล์ฟได้มาก แต่ฉันต้องนอนหลับดังนั้นการโพสต์ตัวเองตอนนี้ :)

l~\:N;S/{'-/2*2<~i),\i>}%_{m*{(\+}%}*{[0\{1$+}*]}%:B;,,{0B{I>2<~N<!\N<*+}/}fI]_:+m*'/f*S*

ลองออนไลน์ได้ที่นี่

อินพุตเหมือน:

29 "8 15-17 2 3-5 6-8"

โดยที่จำนวนเต็มแรกคือนาทีอินพุตและสตริงที่สองคือลำดับช่วงเวลา (ดังที่แสดงในตัวอย่างในคำถามโดยไม่มี,)

เอาต์พุตสำหรับอินพุตดังกล่าวข้างต้น:

0/27 0/27 0/27 24/27 3/27

ฉันจะยอมรับสิ่งนี้หากคุณสามารถทำตามกฎที่อัปเดตได้
งานอดิเรกของ Calvin

ทั้งหมดตัวอย่างอื่น ๆ ให้0/27's
งานอดิเรกของ Calvin

ตอนนี้มันเป็นของ `0/0
งานอดิเรกของ Calvin


ไม่เป็นไรขอโทษฉันแค่ป้อนข้อมูลผิด
งานอดิเรกของ Calvin

3

Mathematica, 237 216 ไบต์

ฉันแน่ใจว่าฉันสามารถตัดให้สั้นลงได้เล็กน้อย แต่ไม่ใช่ตอนนี้ อย่างน้อยที่สุดฉันก็ต้องใช้การเชื่อมโยงใหม่จาก Mathematica 10! :)

f=(j=#;s=StringSplit;r=ToString;t=Lookup[Counts@Flatten[FirstPosition[#,n_/;n>=j]&/@Accumulate/@Tuples@i],#,0]&/@Range@Length[i=ToExpression[#~s~"-"&/@s@#2]/.{a_,b_}:>a~Range~b];Riffle[r@#<>"/"<>r@Tr@t&/@t," "]<>"")&

Ungolfed:

    f = (
   j = #;
   s = StringSplit;
   r = ToString;
   t = Lookup[
       Counts@Flatten[
         FirstPosition[#, n_ /; n >= j] & /@ 
          Accumulate /@ Tuples@i], #, 0] & /@ 
     Range@Length[
       i = ToExpression[#~s~"-" & /@ s@#2] /. {a_, b_} :> a~Range~b];
   Riffle[r@# <> "/" <> r@Tr@t & /@ t, " "] <> "") &

การใช้งานตามที่ระบุในการท้าทาย:

f[29, "8 15-17 2 3-5 6-8"]

มันจะส่งกลับ0/1สำหรับองค์ประกอบทั้งหมดถ้าอินพุตแรกมีขนาดใหญ่กว่าช่วงเวลาสูงสุด


ฉันคิดว่าCases[]ไม่จำเป็นเพราะวิธีการTuplesทำงาน t = Lookup[Counts[Join @@(FirstPosition[#, n_ /; n >= j] & /@ Accumulate /@ Tuples@i)], #, 0]ถ้าเป็นเช่นนั้น
DavidC

LookupและCountsเป็นส่วนเพิ่มเติมที่ยินดีต้อนรับสู่ภาษา
DavidC

@DavidCarraher ขอบคุณ แต่ฉันต้องเปลี่ยนเป็นFlatten(แทนที่จะJoin@@) เพราะFirstPositionตอนนี้สามารถกลับมาMissing[NotFound]ซึ่งไม่สามารถเข้าร่วมได้
Martin Ender

1

Haskell, 232

f=(\(a,b)->[a..fst$head$reads(tail$b++" ")++[(a,b)]]).head.reads
n%l=(tail>>=zipWith(-))(0:map(\i->drop i&l*e[x|x<-map sum$mapM f$take i$w l,x>=n])[1..e$w l])>>=(++'/':show(id&l)++" ").show
(&)i=product.map(e.f).i.w
w=words
e=length

ทำงานแบบนี้:

*Main> putStrLn $ 1 % "8 15-17 2 3-5 6-8"
27/27 0/27 0/27 0/27 0/27 

1

APL, 162

{{⍵,'/',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

ฉันหวังว่าคุณจะไม่สนใจระยะห่างที่แปลก


นี่คือ 98 ไบต์เท่านั้น APL มีเพจรหัสของตัวเองซึ่งสัญลักษณ์ทั้งหมดของพวกเขาจะอยู่ในช่วง ASCII
เครื่องมือเพิ่มประสิทธิภาพ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.