Unsicherheit in der Zeitleiste eines Tages


12

Angenommen, Ihr Wecker weckt Sie eines Morgens, aber Sie drücken die Snooze-Taste, damit Sie noch 8 Minuten schlafen können. Wenn es wieder klingelt, stehen Sie widerwillig auf und duschen, was Ihrer Schätzung nach 15 bis 17 Minuten dauert. Sie putzen dann genau 2 Minuten lang Ihre Zähne und ziehen sich an, was etwa 3 bis 5 Minuten dauert. Schließlich frühstücken Sie in 6 bis 8 Minuten in aller Eile und rennen aus der Tür.

Wir können diese zeitliche Abfolge als bezeichnen 8 15-17 2 3-5 6-8.

Wie hoch ist die Wahrscheinlichkeit, dass Sie die einzelnen Aufgaben in einer bestimmten Anzahl von Minuten erledigt haben, seit Sie das erste Mal aufgewacht sind?

Angenommen, jede Aufgabe dauert eine ganze Anzahl von Minuten, können wir jede mögliche Kombination von unsicheren Zeitspannen aufzeichnen (z. B. 3, 4 und 5 Minuten für das Zähneputzen). Diese Grafik zeigt alle 27 Möglichkeiten, wobei die Zeit nach rechts zunimmt und jede Aufgabe von N Minuten durch (N - 1) Striche und einen vertikalen Balken dargestellt wird, um das Ende zu markieren. Die Minutengrenzen treten zwischen den Zeichen auf, sodass sich der Abstand zwischen der 8und 9-Spalte 8 min 59 secändert 9 min.

         1111111111222222222233333333334
1234567890123456789012345678901234567890  <-- Minute
-------|--------------|-|--|-----|
-------|--------------|-|--|------|
-------|--------------|-|--|-------|
-------|--------------|-|---|-----|
-------|--------------|-|---|------|
-------|--------------|-|---|-------|
-------|--------------|-|----|-----|
-------|--------------|-|----|------|
-------|--------------|-|----|-------|
-------|---------------|-|--|-----|
-------|---------------|-|--|------|
-------|---------------|-|--|-------|
-------|---------------|-|---|-----|
-------|---------------|-|---|------|
-------|---------------|-|---|-------|
-------|---------------|-|----|-----|
-------|---------------|-|----|------|
-------|---------------|-|----|-------|
-------|----------------|-|--|-----|
-------|----------------|-|--|------|
-------|----------------|-|--|-------|
-------|----------------|-|---|-----|
-------|----------------|-|---|------|
-------|----------------|-|---|-------|
-------|----------------|-|----|-----|
-------|----------------|-|----|------|
-------|----------------|-|----|-------|
1234567891111111111222222222233333333334  <-- Minute
         0123456789012345678901234567890

Es ist klar, dass die Routine höchstens 40 Minuten und mindestens 34 Minuten gedauert haben könnte.

Die Frage ist, zu einer bestimmten Minute, sagen wir in Minute 29, wie hoch ist die Wahrscheinlichkeit, dass Sie jede der 5 Aufgaben erledigt haben? Angenommen, jeder unsichere Zeitrahmen ist gleichmäßig über die genauen ganzen Minuten verteilt. Eine 4-7-Aufgabe hat also eine 25-prozentige Chance, 4, 5, 6 oder 7 Minuten in Anspruch zu nehmen.

Aus der Grafik ist ersichtlich, dass in Minute 29 ein ...

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)

Ebenso bestand in Minute 1 die 27/27Möglichkeit, dass Sie 0/27überall anders dösten .

Zum Beispiel sind in Minute 38 bereits 17 der möglichen Routinen beendet. In 10 von 10 Fällen werden Sie also essen. Dies bedeutet, dass die Wahrscheinlichkeiten so aussehen

0/10 task 1, 0/10 task 2, 0/10 task 3, 0/10 task 4, 10/10 task 5

Herausforderung

Schreiben Sie eine Funktion , die eine Ganzzahl für den Minutenwert und eine Zeichenfolge aus einer Folge von einzelnen Ganzzahlen oder Paaren von Ganzzahlen a-bmit b> enthält a, die alle durch Leerzeichen getrennt sind (genau wie 8 15-17 2 3-5 6-8). Alle ganzen Zahlen sind positiv. Die eingegebene Minute ist kleiner oder gleich der maximal möglichen Zeit (im Beispiel 40).

Die Funktion sollte eine weitere Zeichenfolge zurückgeben, die die nicht reduzierte Bruchchance angibt , in jeder Aufgabe zur angegebenen Minute zu sein.

Beispiele

  • myfunc(29, "8 15-17 2 3-5 6-8") Gibt die Zeichenkette zurück 0/27 0/27 0/27 24/27 3/27
  • myfunc(1, "8 15-17 2 3-5 6-8") Gibt die Zeichenkette zurück 27/27 0/27 0/27 0/27 0/27
  • myfunc(38, "8 15-17 2 3-5 6-8") Gibt die Zeichenkette zurück 0/10 0/10 0/10 0/10 10/10
  • myfunc(40, "8 15-17 2 3-5 6-8") Gibt die Zeichenkette zurück 0/1 0/1 0/1 0/1 1/1

Wenn Ihre Sprache keine Zeichenfolgen oder Funktionen enthält, können Sie benannte Variablen, stdin / stdout, die Befehlszeile oder was auch immer am besten geeignet erscheint verwenden.

Wertung

Das ist Code Golf. Die kürzeste Lösung in Bytes gewinnt.


Die Frage gibt keine bestimmte Wahrscheinlichkeitsverteilung für die für jede Aufgabe aufgewendete Zeit an. Sollte es normal verteilt sein? Kann ich eine von mir gewünschte Distribution übernehmen?
Feersum

1
@Calvin das ist keine Normalverteilung. Vielleicht wollten Sie eine einheitliche Verteilung haben?
Feersum

Umfasst jede Aufgabe die linke |, die rechte |oder die Hälfte von jeder?
Peter Taylor

Alle genannten Probleme wurden in Frage gestellt. Irgendwelche anderen Probleme?
Calvins Hobbys

1
Was passiert, wenn die Möglichkeit besteht, dass keine Aufgabe ausgeführt wurde?
stolzer Haskeller

Antworten:


3

CJam, 124 115 100 92 89 Bytes

Hier kann man viel Golf spielen, aber ich muss schlafen, also poste jetzt selbst :)

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

Probieren Sie es hier online aus

Die Eingabe ist wie folgt:

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

Dabei ist die erste Ganzzahl die eingegebene Minute und die zweite Zeichenfolge die Zeitbereichssequenz (wie in den Beispielen in der Frage gezeigt, nur ohne die ,).

Ausgabe für den oben genannten Eingang:

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

Ich akzeptiere dies, wenn Sie die aktualisierten Regeln einhalten können.
Calvins Hobbys

Alle anderen Beispiele geben 0/27's.
Calvins Hobbys

Jetzt sind es ein paar `0 / 0's.
Calvins Hobbys

@ Calvin'sHobbies Nehmen wir es zum Chat: chat.stackexchange.com/rooms/18161/…
Optimizer

Egal, sorry, ich habe nur die Eingabe falsch gemacht.
Calvins Hobbys

3

Mathematica, 237 216 Bytes

Ich bin sicher, dass ich das ein bisschen verkürzen kann, aber jetzt nicht. Zumindest konnte ich endlich die neuen Assoziationen aus Mathematica 10 nutzen! :)

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, " "] <> "") &

Verwendung wie in der Challenge angegeben:

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

Es wird 0/1für alle Elemente zurückgegeben, wenn die erste Eingabe größer als die maximale Zeitspanne ist.


Ich denke, Cases[]ist nicht notwendig, wie Tuplesfunktioniert. Wenn ja, dann t = Lookup[Counts[Join @@(FirstPosition[#, n_ /; n >= j] & /@ Accumulate /@ Tuples@i)], #, 0].
DavidC

Lookupund Countssind willkommene Ergänzungen zur Sprache.
DavidC

@DavidCarraher Danke, aber ich musste auf Flatten(anstatt Join@@) umsteigen, weil ich FirstPositionjetzt zurückkehren Missing[NotFound]kann, was nicht verbunden werden kann.
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

laufe so:

*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')⍵}

Beispiel läuft

      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

Ich hoffe, Ihnen macht der seltsame Abstand nichts aus


Dies sind nur 98 Bytes. APL hat eine eigene Codepage, sodass alle ihre Symbole in den ASCII-Bereich passen.
Optimierer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.