jota
En BSD y OSX puede usar jot para devolver un solo número aleatorio ( -r
) desde el intervalo min
hasta max
, inclusive.
$ min=5
$ max=10
$ jot -r 1 $min $max
Problema de distribución
Desafortunadamente, el rango y la distribución de los números generados aleatoriamente están influenciados por el hecho de que jot usa aritmética de coma flotante de doble precisión internamente y printf (3) para el formato de salida, lo que causa problemas de redondeo y truncamiento. Por lo tanto, los intervalos min
y max
se generan con menos frecuencia como se demuestra:
$ jot -r 100000 5 10 | sort -n | uniq -c
9918 5
20176 6
20006 7
20083 8
19879 9
9938 10
En OS X 10.11 (El Capitan) esto parece haberse solucionado:
$ jot -r 100000 5 10 | sort -n | uniq -c
16692 5
16550 6
16856 7
16579 8
16714 9
16609 10
y...
$ 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
Resolviendo el problema de distribución
Para versiones anteriores de OS X, afortunadamente hay varias soluciones. Una es usar la conversión entera printf (3). La única advertencia es que el intervalo máximo ahora se convierte max+1
. Al utilizar el formato de enteros, obtenemos una distribución justa en todo el intervalo:
$ jot -w %i -r 100000 5 11 | sort -n | uniq -c
16756 5
16571 6
16744 7
16605 8
16683 9
16641 10
La solución perfecta
Finalmente, para obtener un lanzamiento justo de los dados usando la solución, tenemos:
$ min=5
$ max_plus1=11 # 10 + 1
$ jot -w %i -r 1 $min $max_plus1
Tarea extra
Ver jot (1) para los detalles de formato y matemática sangrientos y muchos más ejemplos.