Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Имитация лотерейных ставок. (https://javascript.ru/forum/misc/66698-imitaciya-loterejjnykh-stavok.html)

Маленький программист :"3 04.01.2017 00:24

Имитация лотерейных ставок.
 
После розыгрыша 1 миллиарда на новый год стало интересно посчитать, сколько надо примерно раз сделать ставку на одни и те же числа, чтобы она сыграла. В связи с этим решил немножко поколдовать на JavaScript.
Скрипт ниже вычисляет, сколько раз нужно поставить определенный набор чисел, чтобы выиграть.
Хочу спросить, может я все сделал криво и можно намного лучше, если есть советы по оптимизации, обязательно подсказывайте)
var myComb = [1, 3, 11, 13]; // Ваша комбинация
function winner(myComb){
	var counter = 0;
	var matchArray = [];
	function generWinComb(){
			var winComb = [];
			var min = 1, max = 20;
			for(var i = 0; i < 4; i++){
				winComb[i] = min + Math.floor(Math.random() * (max + 1 - min));
			}
			return winComb;
		}
	while(true){
		for(var i = 0; i < myComb.length; i++){
			if(myComb[i] == generWinComb()[i]){
				matchArray[i] = true;
			}
			else{
				matchArray[i] = false;
			}
		}
		// Когда уже получен массив с true и false
		for(var i = 0; i < myComb.length; i++){
			if(matchArray[i] == true){
				continue;
			}
			else{
				counter++;
				break;
			}
		}
		if(i == myComb.length && matchArray[i-1] == true){
				return counter;
			}
	}
}
document.write(winner(myComb));

рони 04.01.2017 00:57

Цитата:

Сообщение от Маленький программист :&quot (Сообщение 3)
Скрипт ниже вычисляет,

интересно что?
Маленький программист :"3,

цикл в строке 8 лишняя трата ... и весь алгоритм скрипта загадка ...

рони 04.01.2017 01:00

Маленький программист :"3,
вы определитесь у вас либо 20 * 19 * 18 * 17 всего комбинаций или 20 * 20 * 20 * 20 ?

рони 04.01.2017 01:11

Маленький программист :"3,
всё тоже что у вас но покороче
<script>
var myComb = [1, 3, 11, 13];

function winner(myComb) {
    var counter = 0;

    function generWinComb() {
        var min = 1,
            max = 20;
        return min + Math.floor(Math.random() * (max + 1 - min))
    }
    while (myComb.some(function(a) {
            return a != generWinComb()
        })) counter++;
    return counter
}
document.write(winner(myComb));
  </script>

Маленький программист :"3 05.01.2017 20:49

У меня вообще неправильно, что-то заклинило совсем)
Хотя у вас вроде тоже.
Должно быть не важно в каком порядке числа.
Допустим наша комбинация 1 3 11 13
А сгенерировано 1 13 11 3 - все числа совпали.
А код такой длинный получился, потому что методы перебора я не знал, так-как в видео-курсах что я смотрел такого не было. Но теперь знаю)

рони 05.01.2017 20:59

Цитата:

Сообщение от Маленький программист :&quot (Сообщение 3)
Должно быть не важно в каком порядке числа.

тогда достаточно
Цитата:

Сообщение от рони
20 * 19 * 18 * 17

комбинаций чтобы наверняка выиграть


Часовой пояс GMT +3, время: 06:15.