질문에서 언급 한 것과 완전히 다른 두 가지 사항이 있습니다. 주어진 알고리즘이 둘 다 할 수 없기 때문에 원하는 것을 결정해야합니다.
시도 할 때마다 10 %의 확률이 있습니다. 두 번 연속으로 맞은 다음 200 회 시도에 맞지 않을 수도 있습니다. 그러나 장기적으로 볼 때, 그것은 10 %의 시간을 치고 있습니다.
10 회 시도 할 때마다 한 번만, 결코 더 많이, 결코 적게는 안된다는 것을 보장합니다.
위의 첫 번째 것은 적절한 난수 픽업 및 비교를 사용하면됩니다. 그러나 예상보다 많은 히트와 예상보다 적은 안타를 얻을 수 있습니다. 시간이 지나면 평균 히트 수가 10 %가됩니다.
function getRandomTenPercentOutcome() {
return Math.random() < 0.1;
}
두 번째 것은 최근 이벤트를 추적하는 임의 생성기를 결합한보다 복잡한 구현이 필요합니다. 보장 된 1 in 10 히트를 구현하는 가장 간단한 방법은 서버가 0으로 채워진 것을 만들고 배열에서 하나의 셀을 무작위로 선택하여 1로 변경하는 것입니다.
그런 다음 무작위로 선택해야하므로 결과, 당신은 .shift()
배열의 첫 번째 항목을 끄고 그 값을 사용하십시오. 배열이 비어지면 새 배열을 만듭니다. 이것은 처음부터 시작하여 10 개의 결과 중 1 개를 정확히 강요합니다. 주어진 10 개의 결과는 새 배열을 만드는 경계를 넘을 때 2 또는 0이 될 수 있지만 그 이상은 될 수 없습니다.
배열을 시스템 전체 (모든 사용자에 대해 하나의 배열) 또는 사용자별로 (각 사용자마다 고유 한 결과 배열이 있음) 만들 수 있습니다. 각 사용자가 개인적으로 1 : 10에 매우 가깝게 인식되도록하려면 각 사용자에 대해 별도의 결과 배열을 만들어야합니다.
배열의 길이를 조정하여 허용 할 분산을 제어 할 수 있습니다. 예를 들어 배열 50을 길게 만들고 배열에서 5 개의 셀을 임의로 선택할 수 있습니다. 즉하지만 여전히 두 가지 방법이 장기적으로 10 %의 평균 것 (50)
내에서 5 안타를 강제, 50 내에서 더 다양성을 허용합니다. 첫 번째 간격은 주어진 간격에서 10 %보다 큰 편차가있을 수 있지만 훨씬 더 무작위입니다. 두 번째는 10 %에서 훨씬 더 작은 편차를 가지지 만 일부는 덜 무작위라고합니다 (반드시 나쁜 것은 아니며 목표에 따라 다름). 둘 다 "공평"합니다.
나는 내 아들의 게임을 통해 일련의 무작위 사건으로 인해 종종 예상되는 결과 내에 조그마한 상황이 발생하더라도 상황이 좋지 않을 때 "불공평하다"고 인식합니다. 그래서 때로는 진정으로 무작위 적으로 때때로 때때로 산발적 인 특성 때문에 참가자에게 공평하지 않은 것처럼 보일 수도 있습니다.
정말 좋은 배열 방법, 좋은 생각이 좋아. –