3 случайные числа и чтоб не совпадали
-
надо получить 3 случайных числа от 1 до 9
делаю:
RN1
RN2
while true
if ([[RN1]]) == ([[RN2]])
новое RN2
else
break
RN3
while
if ([[RN3]]) == (([[RN1]])||([[RN2]]))
new RN3
else
breakпо второму вродебы понятно, а по третьему условие правильно?
-
И в догонку, после надо тыркнуть в трех разных местах, (согласно случайным числам), как проще красивей сделать? городить кучу IF не очень хочется.
Идеально было бы сделать 9 функций типа ТЫРК1..9 и вызов потом ТЫРК[[RNx]]
Так пройдет?
-
@verhov вот так будет не проще? Цифры будет меняться, пока все 3 не станут разными.
[[N1]]==[[N2]]||[[N1]]==[[N3]]||[[N2]]==[[N3]]
VAR_N1 = Math.floor(Math.random() * (parseInt(9) - parseInt(1) + 1)) + parseInt(1) VAR_N2 = Math.floor(Math.random() * (parseInt(9) - parseInt(1) + 1)) + parseInt(1) VAR_N3 = Math.floor(Math.random() * (parseInt(9) - parseInt(1) + 1)) + parseInt(1)
-
@verhov said in 3 случайные числа и чтоб не совпадали:
И в догонку, после надо тыркнуть в трех разных местах, (согласно случайным числам), как проще красивей сделать? городить кучу IF не очень хочется.
Идеально было бы сделать 9 функций типа ТЫРК1..9 и вызов потом ТЫРК[[RNx]]
Так пройдет?Да, можете в цикле сделать. Первый цикл будет идти и нажмет N1, второй N2 и т.д.
-
@uraabk said in 3 случайные числа и чтоб не совпадали:
Да, можете в цикле сделать. Первый цикл будет идти и нажмет N1, второй N2 и т.д.
что то не дает менять имя функции с добавлением переменной. решил копипастой и 27 ифов нарисовать, зато работает :))))
-
@uraabk
что то плохо понял (вернее понял, но как то мудрено.) кубиками то оно немного проще.
-
Хм, задача усложняется, надо случайных чисел 9 штук и потом тыркать от 1 до 8/9, если облом, то прекращать поток, если нет то еще тыркать и так пока не будет профит или кончатся попытки.
Наверно вышеуказанным методом будет проще сделать. все в одно условие можно заткнуть
-
@verhov said in 3 случайные числа и чтоб не совпадали:
Хм, задача усложняется, надо случайных чисел 9 штук и потом тыркать от 1 до 8/9, если облом, то прекращать поток, если нет то еще тыркать и так пока не будет профит или кончатся попытки.
Наверно вышеуказанным методом будет проще сделать. все в одно условие можно заткнутьМожет вы объясните саму ситуацию? Наверняка есть проще способ решить задачу.
-
Вообще, эту задачу наверняка как-то можно решить красивым программистским методом. Но в басе есть настолько удобный инструмент для этого, что не хочется использовать что-то другое.
Вы можете создать ресурс, в котором будет нужный набор чисел и просто вызвать в переменные этот ресурс нужное число раз. Числа всегда будут разные.
А для создания рандомности в настройках ресурса не забудьте добавить галочку Мешать строки. Чтобы "обнулить" результат текущей итерации выбора чисел и повторить ее, используйте экшн Перегрузить ресурс.
Вот и всё.
-
@fox said in 3 случайные числа и чтоб не совпадали:
Может вы объясните саму ситуацию? Наверняка есть проще способ решить задачу.
автоматизация игры в ленте :) там каждые сутки можно зайти и потыркать 9 кнопок, игра на канвасе, приходится по координатам тыркать. может на первом тырке получится облом, а может на 5, но на 8 точно чтото попадется.
Для игры нужны номера, при массовости можно что то хорошее за 1 рубль получить@xclsv said in 3 случайные числа и чтоб не совпадали:
Вы можете создать ресурс, в котором будет нужный набор чисел и просто вызвать в переменные этот ресурс нужное число раз. Числа всегда будут разные.
А для создания рандомности в настройках ресурса не забудьте добавить галочку Мешать строки. Чтобы "обнулить" результат текущей итерации выбора чисел и повторить ее, используйте экшн Перегрузить ресурс.вечером попробую, точно текстовик с колонкой 1-9
-
@verhov
Вы можете также реализовать это через создание списка из цифр от 1 до 9.
Берете случайное значение и тут же удаляете оттуда элемент по этому же значению. Следующий взятый элемент не будет равен предыдущему в этом случае.
Для повторения итерации просто возвращаетесь по метке к созданию списка, либо оборачиваете всю конструкцию в функцию и вызываете ее в нужный момент. С метками кажется изящнее, хоть и не люблю их.
-
@xclsv said in 3 случайные числа и чтоб не совпадали:
Для повторения итерации просто возвращаетесь по метке к созданию списка, либо оборачиваете всю конструкцию в функцию и вызываете ее в нужный момент. С метками кажется изящнее, хоть и не люблю их.
так поток закончится и завершится, соответственно при вызове потока для другого номера список будет заполнятся заново, так? Заполнение списка в самом начале сделать. Список(0,,,,8) значениями 1,,,9
Как бы еще тыркание сделать, куча ифов совсем не нравится. Хотя, for 1-9, и 9 ифов, случайное значение из списка сравниваем и вызываем функцию тырк1-9.
Вечером попробую сгородить.
-
@verhov
В первом сообщении Вы ничего не сообщали про многопоточность и условия работы с ней.
Безусловно, если разные числа одного списка нужны в разных потоках, то лучше делать через ресурс. Есть ещё какие-то глобальные списки, но не уверен, что это будет хорошим решением.
-
@xclsv said in 3 случайные числа и чтоб не совпадали:
В первом сообщении Вы ничего не сообщали про многопоточность и условия работы с ней.
да как то это по умолчания предполагается :))))
@xclsv said in 3 случайные числа и чтоб не совпадали:
Безусловно, если разные числа одного списка нужны в разных потоках, то лучше делать через ресурс. Есть ещё какие-то глобальные списки, но не уверен, что это будет хорошим решением.
Хм, а разве созданный список в текущем потоке будет виден в других потоках?
-
@verhov said in 3 случайные числа и чтоб не совпадали:
да как то это по умолчания предполагается :))))
Ничего, что не написано в ТЗ по умолчанию не предполагается.
@verhov said in 3 случайные числа и чтоб не совпадали:
Хм, а разве созданный список в текущем потоке будет виден в других потоках?
Глобальные списки должны быть видны. Также как и глобальные переменные.
Эксперт в этом вопросе господин @senerg.
-
@xclsv said in 3 случайные числа и чтоб не совпадали:
Глобальные списки должны быть видны. Также как и глобальные переменные.
а зачем мне глобальный список? мне то случайные выпадения нужны в рамках одного потока.
-
@verhov said in 3 случайные числа и чтоб не совпадали:
а зачем мне глобальный список? мне то случайные выпадения нужны в рамках одного потока.
Прошу прощения. Неправильно понял Вас в этом сообщении:
@verhov said in 3 случайные числа и чтоб не совпадали:
так поток закончится и завершится, соответственно при вызове потока для другого номера список будет заполнятся заново, так? Заполнение списка в самом начале сделать. Список(0,,,,8) значениями 1,,,9
Да. В рамках одного потока можно использовать обычный список. Всё должно работать.
-
@xclsv said in 3 случайные числа и чтоб не совпадали:
Да. В рамках одного потока можно использовать обычный список. Всё должно работать.
Спасибо, освобожусь, вечером попробую.
-
@verhov Лень было читать всю вашу переписку. Вот на коленке написал генератор, будет перебирать целые числа в заданном диапазоне, когда доступные значения закончатся, то очистит пул использованных значений и начнет заново
randomNumber = function(a,b) { this.was_used = [], this.a = a, this.b = b }; randomNumber.prototype.get = function(){ while(true){ var randomNum = Math.floor(Math.random() * (this.b-this.a + 1)) + parseInt(this.a); if(this.was_used.indexOf(randomNum)< 0) { this.was_used.push(randomNum); return randomNum; }; if(this.was_used.length == this.b - this.a + 1) this.clear(); //Если кончились доступные знаяения обнуляем }; }; randomNumber.prototype.clear =function(){ //Очистка использованных значений this.was_used = []; }; randNum = new randomNumber(1,10) //Создает новый генератор чисел в заданном диапазоне log( randNum.get() );
-
@verhov said in 3 случайные числа и чтоб не совпадали:
автоматизация игры в ленте :) там каждые сутки можно зайти и потыркать 9 кнопок, игра на канвасе, приходится по координатам тыркать. может на первом тырке получится облом, а может на 5, но на 8 точно чтото попадется.
Так может сделать фотку кнопок и безошибочно тыкать сразу по кнопкам, место координат?