Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Skomopox on September 18, 2014, 08:56:48 AM
-
Привет Всем! Глупо, конечно, но как сделать, чтобы из 20 чисел выбирало 8 рандомно?
Пример: Есть 20 чисел, от 1 до 20. Как написать так, чтобы из этих 20 чисел выбирало 8 рандомно, И, ни одно число друг с другом не пересекалось. Т.е. если через цикл делать, то оно может несколько раз число 5 взять, например, и тогда уже не получится 8 чисел, а 5-6. Нужно ведь как-то, что бы они проверялись друг с другом, да? У кого какие мысли есть? Спасибо!
-
Привет Всем! Глупо, конечно, но как сделать, чтобы из 20 чисел выбирало 8 рандомно?
Пример: Есть 20 чисел, от 1 до 20. Как написать так, чтобы из этих 20 чисел выбирало 8 рандомно, И, ни одно число друг с другом не пересекалось. Т.е. если через цикл делать, то оно может несколько раз число 5 взять, например, и тогда уже не получится 8 чисел, а 5-6. Нужно ведь как-то, что бы они проверялись друг с другом, да? У кого какие мысли есть? Спасибо!
Вариантов есть несколько. Вот один из них:
#name "RND unique"
// Author: AVint
// Version: 1.0 (18.09.2014)
// создаём массив 1-20
FOR($i, $i < 20)
ARRPUSH($arr, $i+1)
END_CYC
// берём 8 случайных чисел
FOR($j, $j<8)
$r = RND(0,ARRSIZE($arr)-1)
LOGWRITE ("RND = ", $arr[$r]) // выводим наше случайное число $arr[$r]
// как нужно обрабатываем
// удаляем число из массива
FOR($i=$r+1, $i < ARRSIZE($arr)) // передвигаем
$arr[$i-1] = $arr[$i]
END_CYC
$empty = ARRPOP($arr) // удаляем последний элемент
END_CYC
IF(1) // 1 - показать остаток
LOGWRITE ("")
LOGWRITE ("остаток")
FOR($i, $i < ARRSIZE($arr))
LOGWRITE ($arr[$i])
END_CYC
END_IF
HALT
-
Привет Игорь! Как всегда :) Спасибо, сейчас посмотрю. Блин не успел переделать. Есть ещё вопрос прям вообще глупый, наверное, не могу на форуме нигде найти.
Про массив: - Как увеличить массив на один??? Я имею виду... вот что в общем:
$p[3]=1
inc($p[3],1)
Почему не работает с массивами inc? Как можно увеличить значение массива на один, чтобы $p[3] стал не 1, а уже 2? Спасибо, если кто увидит!
-
пока наверно только так, по простому
$p[3] = $p[3]+1
-
Аааааа... :) Точно! Я же делал так раньше, да за был :) Спасибо. И Скрипт, удивительно работает, только не могу понять как? Вот сижу разбираюсь. Для того, чтобы понять где мне обрабатывать можно моё потом. Благодарю, в общем :)
-
Там где написано "обрабатываем" само число $arr[$r]
Чтобы не внедрять в середину цикла или не делать подпрограмму, можно все 8 засунуть в новый массив.
И обрабатывать где нужно.
#name "RND unique"
// Author: AVint
// Version: 1.1 (18.09.2014)
// создаём массив 1-20
FOR($i, $i < 20)
ARRPUSH($arr, $i+1)
END_CYC
// берём 8 случайных чисел
FOR($j, $j<8)
$r = RND(0,ARRSIZE($arr)-1)
//LOGWRITE ("RND = ", $arr[$r])
ARRPUSH($result, $arr[$r])
FOR($i=$r+1, $i < ARRSIZE($arr))
$arr[$i-1] = $arr[$i]
END_CYC
$empty = ARRPOP($arr)
END_CYC
//$result - результат в этом массиве
//$X = ARRPOP($result)
-
Да, я дотупил! Так и сделал. НО, КАК ты это сделал, мне вообще не понятно?! Так и не разобрался, с этими попами и арсайзами. Голова, что скажешь, всё работает, Благодарю :)
-
Блин, чёго-то я потопился. Не прочитал, как следует последнее и это последнее не понял. У меня не работает. В общем я первым вариантом делаю, и где у тебя написано, обрабатываем, как надо я вставляю lclick($px[$r],$py[$r]). Первый раз кликает, как надо, но на второй цикл пишет, ошибка инертпретации и просить остановить сценарий. Т.е. она как не скидывает их потомю Я бы что-нибудь исправил, но я там нифига не понимаю :) И да. За место $arr я просто поставил свои $p? Просто $p.
-
Покажи целиком. ХЗ что ты там наменял.
-
Убегал просто.
$i=0
for($i, $i<20)
arrpush($p,$i)
end_cyc
for($j,$j<8)
$r=rnd(0,arrsize($p)-1)
print(("RND= ",$p[$r])
lclick($px[$r],$py[$r])
waitms(rnd($t1,$t2))
for($i=$r+1,$i<arrsize($p))
$p[$i-1]=$p[$i]
end_cyc
$empty=arrpop($p)
end_cyc
Вот первый раз она отлично ставит, а второй не идёт. Т.е. у меня цикл. Один раз выбирает 8 чисел, потом еще и еще и т.д.
-
Что такое $px, $py ? Где эти массивы?
Если это то что я думаю, то какой смысл в этой задаче делать неповторяемость выбора?
-
Твои случайные числа от 0 до 19, так как нумерация в массиве идёт с нуля.
+1 в строке "ARRPUSH($arr, $i+1)" не для красоты был
Да с +1 я разобрался. Это я понимаю. Поэтому и убра его. Он мне не нужен. от 0 до 19 пойдёт.
UNDEFINE ($аar) очищает массив, так же как и переменную, при работе циклов об этом лучше не забывать.
Но и при простом зацикливании на точку всё вполне работоспособно.
И где в твоём коде undefine? Я просто не понимаю куда его там вставить? И lclick там самое важное из всего.
-
Что такое $px, $py ? Где эти массивы?
Если это то что я думаю, то какой смысл в этой задаче делать неповторяемость выбора?
Массивы эти прописаны в самом начале скрипта:
$px[0]=234
$py[0]=167
...
$px[19]=589
$py[19]=347
Суть в том, что мне нужно, выбрать любое рандомное число и кликнуть по уже заданным координатам. Но должны быть 8 разных чисел. Соответственно 8 разных мест для клика. Как-то так :)
-
Массивы эти прописаны в самом начале скрипта:
$px[0]=234
$py[0]=167
...
$px[19]=589
$py[19]=347
Суть в том, что мне нужно, выбрать любое рандомное число и кликнуть по уже заданным координатам. Но должны быть 8 разных чисел. Соответственно 8 разных мест для клика. Как-то так :)
Вот так понятно. Тогда ты пишешь неправильно. Нужно
lclick($px[$p[$r]],$py[$p[$r]])
-
Игорь, почему-то не работает! Точнее этот вариант, который ты написал с кликом работает, но рандом нет. по несколько раз в одну и ту же точки долбит.