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 не станут разными.

    0_1550695459950_2019-02-20_234348.png

    [[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 точно чтото попадется.

    Так может сделать фотку кнопок и безошибочно тыкать сразу по кнопкам, место координат?


Log in to reply
 

  • 23
  • 3
  • 2
  • 6
  • 6
  • 21
  • 22
  • 2