annotare in fretta
Su BSD e OSX puoi usare jot per restituire un singolo -r
numero casuale ( ) dall'intervallo min
a max
, compreso.
$ min=5
$ max=10
$ jot -r 1 $min $max
Problema di distribuzione
Sfortunatamente, l'intervallo e la distribuzione di numeri generati casualmente è influenzato dal fatto che jot utilizza internamente l'aritmetica in virgola mobile a doppia precisione e printf (3) per il formato di output, che causa problemi di arrotondamento e troncamento. Pertanto, gli intervalli min
e max
vengono generati meno frequentemente, come dimostrato:
$ jot -r 100000 5 10 | sort -n | uniq -c
9918 5
20176 6
20006 7
20083 8
19879 9
9938 10
Su OS X 10.11 (El Capitan) questo sembra essere stato corretto:
$ jot -r 100000 5 10 | sort -n | uniq -c
16692 5
16550 6
16856 7
16579 8
16714 9
16609 10
e...
$ jot -r 1000000 1 10 | sort -n | uniq -c
100430 1
99965 2
99982 3
99796 4
100444 5
99853 6
99835 7
100397 8
99588 9
99710 10
Risolvere il problema di distribuzione
Per le versioni precedenti di OS X, fortunatamente ci sono diverse soluzioni alternative. Uno è usare la conversione intera printf (3). L'unica avvertenza è che l'intervallo massimo ora diventa max+1
. Usando la formattazione dei numeri interi, otteniamo una distribuzione equa nell'intero intervallo:
$ jot -w %i -r 100000 5 11 | sort -n | uniq -c
16756 5
16571 6
16744 7
16605 8
16683 9
16641 10
La soluzione perfetta
Infine, per ottenere un tiro corretto dei dadi usando la soluzione alternativa, abbiamo:
$ min=5
$ max_plus1=11 # 10 + 1
$ jot -w %i -r 1 $min $max_plus1
Compiti extra
Vedi jot (1) per i dettagli di formattazione e matematica gory e molti altri esempi.