Гослото 7 из 49 / Javascript лотерея

«Лотерея» в javascript - это метод сортировки?

Я пытаюсь выяснить код в конце сообщения, и помощь мне подходит. Так что это предмет «лотереи». Итак, вот что я вижу:

Здесь он присваивает значение I (которое будет от 1 до 49) любой i-й части матрицы. Поэтому я думаю, что он просто создает массив, содержащий числа от 1 до 49. Я не вижу смысла всей этой строки и фактически учитываю следующий код.

Я запутался здесь. Затем он снова начинает цикл по умолчанию с 1 до 49, а для некоторых из 49 итераций:

назначает случайное число от 1 до 49 для "rand"

присваивает i-тое значение списку 'nums' (который в прошлом просто хотел быть мной, верно?) Для temp (почему?)

назначает случайное число i-й части матрицы "nums", поэтому, предположительно, если оно равно i = 1, nums [i] = 1, и теперь вместо 1 это случайное число.

Затем он назначает значение temp (которое было исходным значением, равным мне) обратно к значению, которое находится на границе массива nums.

Итак, о чем я здесь не думаю? Я не думаю. К чему это приведет? Я читаю это безупречно? Вполне вероятно, что в конце этого числа смесь находится внутри матрицы, а затем в конце он просто выбирает первые 6, которые являются 6 «случайными» числами. Но почему бы просто не создать что-то вроде:

в тесте, чтобы пообещать, что случайные числа не совпадают?

Вот полный пример кода:

Код предназначен для создания серии чисел, а затем их смешивания. Он практически использует смесь Фишера-Йейтса, но не совсем. Существует также ошибка в генерации случайных чисел.

Поместить числа от 1 до 49 в массив не глупо, это числа, которые будут использованы позже. Они не меняются, они просто двигаются подряд.

Последующий цикл будет касаться частей матрицы, но сначала рассмотрим генерацию случайных чисел. Этот метод вычисления случайных чисел неверен:

Метод Math.random () возвращает значение 0. Умножение этого числа на 49 и последующее использование Math.ceil не создает число от 1 до 49, оно создает числа от 0 до 49. Число 0 встречается очень редко, но Вы не можете игнорировать это. Истинный метод развития случайных чисел:

Код для смешивания деталей в матрице проходит через детали и выбирает деталь как случайную для замены любой детали. Это приводит к частичному смешиванию, и вместо этого он поддерживает использование метода Фишера-Йейтса:

Последние три строки цикла заменяют 2 части матрицы. Он сохраняет значение из первой части, копирует значение из второй части в первую, а затем добавляет сохраненное значение во вторую часть.

(Значения in и rand на самом деле могут быть монотонными для некоторых деталей, поэтому деталь заменяется на себя. В частности, поскольку метод работает, он обещает, что деталь имеет тот же шанс остаться в том же месте, что и возможность переместиться в другое место.)

Но почему бы просто не создать что-то вроде [code] для тестирования, чтобы убедиться, что случайные числа не являются монотонными?

Это еще один метод получения случайных чисел. Это будет несколько лучше, по крайней мере, в течение большей части времени (теоретически это будет возможно зацикливание навсегда), но это примерно столько же кода.

Другим решением было бы упорядочить все числа в одной матрице, затем случайным образом выбрать из нее числа и перенести их в другую матрицу. Это тот же принцип, что и в методе тасования, но ему достаточно просто придерживаться, чтобы получить первые 6 частей в подходящем месте (или последние 6 частей, поскольку он хочет использовать метод Фишера-Йесиса). Однако удаление деталей из группы обычно является дорогостоящей операцией, так как детали после этого должны быть перемещены в нужное место.