В первую очередь из соображений производительности.
Не думаю, что мат.операции проиграют в скорости RegEx, конечно можно устроить "полевые испытания", но вряд ли это имеет большое значение - скорость не относится к числу сильных сторон AHK.
Как зачем, в ТЗ после запятых пробелы.
Сейчас понятно, хотя посты #4 и #6 указывают, что готовая строка не нужна, a нужно элементы выводить по одному посредством SendInput. Все-таки сумбурность изложения ТЗ располагает к полету фантазии помогающих решить задачу. Так что можно обратно парсить строку для поэлементного вывода, или использовать массив:
F12::
if !(Arr.MaxIndex())
{
Arr:=Rand(6.4)
SendInput % " " ; для наглядности
}
SendInput % Arr.Remove()
Return
Rand(v) {
r := [], b := 1, p1 := Floor(v), p2 := Round(v - p1, 1) * 10
loop 10
Random, b, r.Insert(b, p1+(A_Index > p2)), r.MaxIndex() ? r.MaxIndex()+1 : 1
Return r
}
В этом примере каждые 10 элементов (1-10, 11-20 и т.д.) строго в указанной пропорции, в отличие от поста #10.