Supponi che la sveglia ti svegli una mattina, ma premi snooze in modo da poter dormire per altri 8 minuti. Quando suona di nuovo, ti alzi malvolentieri e fai una doccia, che secondo te dura da 15 a 17 minuti. Quindi ti lavi i denti esattamente per 2 minuti e ti vesti, il che richiede circa 3-5 minuti. Alla fine, fai una colazione affrettata in 6-8 minuti e corri fuori dalla porta.
Possiamo indicare questa sequenza temporale come 8 15-17 2 3-5 6-8
.
Data l'incertezza della routine mattutina, qual è la probabilità che stavi facendo ogni compito in un determinato numero di minuti dalla prima volta che ti sei svegliato?
Supponendo che ogni attività richieda un numero intero di minuti, possiamo tracciare ogni possibile combinazione di intervalli di tempo incerti (ad esempio 3, 4 e 5 minuti per lavarsi i denti). Questo grafico mostra tutte e 27 le possibilità, con il tempo che aumenta a destra e ogni attività di N minuti rappresentata da trattini (N - 1) e una barra verticale, solo per segnarne la fine. I contorni dei minuti si verificano tra i caratteri, quindi lo spazio tra la colonna 8
e si 9
sta 8 min 59 sec
trasformando 9 min
.
1111111111222222222233333333334
1234567890123456789012345678901234567890 <-- Minute
-------|--------------|-|--|-----|
-------|--------------|-|--|------|
-------|--------------|-|--|-------|
-------|--------------|-|---|-----|
-------|--------------|-|---|------|
-------|--------------|-|---|-------|
-------|--------------|-|----|-----|
-------|--------------|-|----|------|
-------|--------------|-|----|-------|
-------|---------------|-|--|-----|
-------|---------------|-|--|------|
-------|---------------|-|--|-------|
-------|---------------|-|---|-----|
-------|---------------|-|---|------|
-------|---------------|-|---|-------|
-------|---------------|-|----|-----|
-------|---------------|-|----|------|
-------|---------------|-|----|-------|
-------|----------------|-|--|-----|
-------|----------------|-|--|------|
-------|----------------|-|--|-------|
-------|----------------|-|---|-----|
-------|----------------|-|---|------|
-------|----------------|-|---|-------|
-------|----------------|-|----|-----|
-------|----------------|-|----|------|
-------|----------------|-|----|-------|
1234567891111111111222222222233333333334 <-- Minute
0123456789012345678901234567890
È chiaro che la routine avrebbe potuto richiedere al massimo 40 minuti e almeno 34 minuti.
La domanda è, ad un particolare minuto, diciamo minuto 29, qual è la possibilità che stavi facendo ognuno dei 5 compiti? Supponiamo che ogni intervallo di tempo incerto sia distribuito uniformemente sull'intero minuto esatto. Quindi un'attività 4-7 ha il 25% di probabilità di impiegare 4, 5, 6 o 7 minuti.
Dal grafico si può vedere che al minuto 29 c'era un ...
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)
Allo stesso modo al minuto 1 c'era una 27/27
possibilità con cui dormivi 0/27
ovunque.
Ad esempio al minuto 38, 17 delle potenziali routine sono già terminate. Quindi in 10 casi su 10 mangerai. Ciò significa che le probabilità sembrano
0/10 task 1, 0/10 task 2, 0/10 task 3, 0/10 task 4, 10/10 task 5
Sfida
Scrivi una funzione che accetta un numero intero per il valore dei minuti e una stringa costituita da una sequenza di singoli numeri interi o coppie di numeri interi a-b
con b
> a
, tutti separati da spazi (proprio come 8 15-17 2 3-5 6-8
). Tutti i numeri interi sono positivi. Il minuto in ingresso sarà inferiore o uguale al tempo massimo possibile (40 in esempio).
La funzione dovrebbe restituire un'altra stringa che indica la probabilità frazionaria non ridotta di essere in ciascuna attività in un determinato minuto.
Esempi
myfunc(29, "8 15-17 2 3-5 6-8")
restituisce la stringa0/27 0/27 0/27 24/27 3/27
myfunc(1, "8 15-17 2 3-5 6-8")
restituisce la stringa27/27 0/27 0/27 0/27 0/27
myfunc(38, "8 15-17 2 3-5 6-8")
restituisce la stringa0/10 0/10 0/10 0/10 10/10
myfunc(40, "8 15-17 2 3-5 6-8")
restituisce la stringa0/1 0/1 0/1 0/1 1/1
Se la tua lingua non ha stringhe o funzioni puoi usare variabili nominate, stdin / stdout, la riga di comando o qualunque cosa sembri più appropriata.
punteggio
Questo è il codice golf. Vince la soluzione più breve in byte .
|
, la destra |
o la metà di ciascuna?