@John_Hello_World_Doe

Как проверить теорию «броска монеты», имея 100(или больше) людей, с помощью JS?

Есть теория что: из 100 человек, у каждого из которых по 10₪, во время долгой игры в "бросок монеты", один человек получит все деньги, у остальных же будет 0. Решил проверить с помощью JS. Но пока что получилось проверить эту теорию, имея только двух человек.
Вопрос: как проверить эту теорию сразу на всех остальных 100 + вывести количество всех бросков? И правильно ли вообще начато написание кода? Если нет - то как нужно было сделать?
Исходный код:
Массив с людьми в виде объектов(допустим пока 4), у каждого из них 10₪ каждый из них может загадывать, выпадет heads || tails
const persons = [
    {
        name: "Persone1",
        cash: 10,
        choice: () => Math.round(Math.random()) < 1 ? 'Heads' : 'Tails'
    },
    {
        name: "Persone2",
        cash: 10,
        choice: () => Math.round(Math.random()) < 1 ? 'Heads' : 'Tails'
    },
    {
        name: "Persone3",
        cash: 10,
        choice: () => Math.round(Math.random()) < 1 ? 'Heads' : 'Tails'
    },
    {
        name: "Persone4",
        cash: 10,
        choice: () => Math.round(Math.random()) < 1 ? 'Heads' : 'Tails'
    }
];

Функция броска монетки:
function coinFlip() {
    return Math.round(Math.random()) < 1 ? 'Heads' : 'Tails';
}

Функция игры, друг с другом, до тех пор пока у одного из них cash не будет равен 0:
function game() {
    let count = 0;
    let playerOne = persons[0];
    let playerTwo = persons[1];
    for(let i = 0; true; i++) {
        if (playerOne.cash && playerTwo.cash !== 0) {
            if (playerOne.choice() === coinFlip()) {
                playerOne.cash++
                playerTwo.cash--
            } else {
                playerOne.cash--
                playerTwo.cash++
            }
            count++
        } else {
            return playerOne.cash === 0 ?
                `Winner: ${playerTwo.name} with ${playerTwo.cash}₪ after ${count}` :
                `Winner: ${playerOne.name} with ${playerOne.cash}₪ after ${count}`;
        }
    }
}

Попытка добавить остальных игроков с помощью цикла:
function bigGame(arr) {
    let count = 0;
    let playerOne;
    let playerTwo;
    for (let i = 0; i < arr.length; i++) {
        playerOne = arr[i]
        playerTwo = arr[i+1]
        for(let j = 0; true; j++) {
            if (playerOne.cash && playerTwo.cash !== 0) {
                if (playerOne.choice() === coinFlip()) {
                    playerOne.cash++
                    playerTwo.cash--
                } else {
                    playerOne.cash--
                    playerTwo.cash++
                }
                count++
            } else if (arr.indexOf(playerOne) == arr.length || arr.indexOf(playerTwo) == arr.length && playerOne.cash === 0 || playerTwo.cash === 0) {
                return playerOne.cash === 0 ?
                    `Winner: ${playerTwo.name} with ${playerTwo.cash}₪ after ${count}` :
                    `Winner: ${playerOne.name} with ${playerOne.cash}₪ after ${count}`;
            } else {
                playerOne.cash === 0 ? playerOne = arr[arr.indexOf(playerOne) + 1] : playerTwo = arr[arr.indexOf(playerTwo) + 1];
            }
        }
    }
}

Заранее спасибо
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
переусложнили. Достаточно, наверное, массива из 100 чисел, изначально все 10.
Дальше в цикле проходить, выбирая пары ненулевых, и случайно определять победителя в каждой.
Пока не останется 1. Или чисто проходов не превысит какой-то порог.

Для всего 3 игроков требуется 200+- итераций. С сотней комп может нагреться )
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
samodum
@samodum
Какой вопрос - такой и ответ
if (Math.random() < 0.01) {
return "получит все деньги"}
else
{ return "ничего не получит"]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы