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 8
und 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/27
Mö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-b
mit 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ück0/27 0/27 0/27 24/27 3/27
myfunc(1, "8 15-17 2 3-5 6-8")
Gibt die Zeichenkette zurück27/27 0/27 0/27 0/27 0/27
myfunc(38, "8 15-17 2 3-5 6-8")
Gibt die Zeichenkette zurück0/10 0/10 0/10 0/10 10/10
myfunc(40, "8 15-17 2 3-5 6-8")
Gibt die Zeichenkette zurück0/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 rechte |
oder die Hälfte von jeder?