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.
quelle
|
, die rechte|
oder die Hälfte von jeder?Antworten:
CJam,
124 115 100 9289 BytesHier kann man viel Golf spielen, aber ich muss schlafen, also poste jetzt selbst :)
Probieren Sie es hier online aus
Die Eingabe ist wie folgt:
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:
quelle
0/27
's.Mathematica,
237216 BytesIch bin sicher, dass ich das ein bisschen verkürzen kann, aber jetzt nicht. Zumindest konnte ich endlich die neuen Assoziationen aus Mathematica 10 nutzen! :)
Ungolfed:
Verwendung wie in der Challenge angegeben:
Es wird
0/1
für alle Elemente zurückgegeben, wenn die erste Eingabe größer als die maximale Zeitspanne ist.quelle
Cases[]
ist nicht notwendig, wieTuples
funktioniert. Wenn ja, dannt = Lookup[Counts[Join @@(FirstPosition[#, n_ /; n >= j] & /@ Accumulate /@ Tuples@i)], #, 0]
.Lookup
undCounts
sind willkommene Ergänzungen zur Sprache.Flatten
(anstattJoin@@
) umsteigen, weil ichFirstPosition
jetzt zurückkehrenMissing[NotFound]
kann, was nicht verbunden werden kann.Haskell, 232
laufe so:
quelle
APL, 162
Beispiel läuft
Ich hoffe, Ihnen macht der seltsame Abstand nichts aus
quelle