Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: asdada2 on February 09, 2021, 10:20:58 PM
-
Здравствуйте!
Вопрос к математикам:
Как сделать компактный генератор случайных неповторяющихся чисел? Эта порнуха, что изображена ниже - работает, но занимает много пространства + для каждого доп. числа нужно добавлять 5 строчек кода. Как можно преобразовать это в один цикл "for"?
$C1 = 1
$Work[$C1] = RND(1,5)
INC($C1)
$Work[$C1] = RND(1,5)
WHILE($Work[$C1] = $Work[$C1-1])
$Work[$C1] = RND(1,5)
END_CYC
INC($C1)
$Work[$C1] = RND(1,5)
WHILE($Work[$C1] = $Work[$C1-1] | $Work[$C1] = $Work[$C1-2])
$Work[$C1] = RND(1,5)
END_CYC
INC($C1)
$Work[$C1] = RND(1,5)
WHILE($Work[$C1] = $Work[$C1-1] | $Work[$C1] = $Work[$C1-2] | $Work[$C1] = $Work[$C1-3])
$Work[$C1] = RND(1,5)
END_CYC
INC($C1)
$Work[$C1] = RND(1,5)
WHILE($Work[$C1] = $Work[$C1-1] | $Work[$C1] = $Work[$C1-2] | $Work[$C1] = $Work[$C1-3] | $Work[$C1] = $Work[$C1-4])
$Work[$C1] = RND(1,5)
END_CYC
PRINT($Work[1])
PRINT($Work[2])
PRINT($Work[3])
PRINT($Work[4])
PRINT($Work[5])
PRINT(______)
-
Привет!
Во тут есть два готовых решения, со строкой и с массивом:
http://crapware.aidf.org/forum/index.php?topic=1965.msg11825
Я не математик, по этому вот вариант, который мне показался проще.))
И на большом диапазоне цифр, он работает намного быстрее.
LOGCLEAR
FOR($n = 0, $n <= 50) // собираем входной массив из цифр - от 0 до 50
ARRPUSH($arr, $n)
END_CYC
FOR($i = ARRSIZE($arr) - 1, $i > -1, -1)
$n = RND(0,$i)
LOGWRITE ($arr[$n]) // рандомная цифра в лог
$arr[$n] = $arr[$i]
$del = ARRPOP($arr)
END_CYC
HALT
-
Привет!
Во тут есть два готовых решения, со строкой и с массивом:
http://crapware.aidf.org/forum/index.php?topic=1965.msg11825
Я не математик, по этому вот вариант, который мне показался проще.))
И на большом диапазоне цифр, он работает намного быстрее.
LOGCLEAR
FOR($n = 0, $n <= 50) // собираем входной массив из цифр - от 0 до 50
ARRPUSH($arr, $n)
END_CYC
FOR($i = ARRSIZE($arr) - 1, $i > -1, -1)
$n = RND(0,$i)
LOGWRITE ($arr[$n]) // рандомная цифра в лог
$arr[$n] = $arr[$i]
$del = ARRPOP($arr)
END_CYC
HALT
Супер! Спасибо Вам!