質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

1723閲覧

確率の計算が合っているか

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/04/29 09:57

前提・実現したいこと

ユーザーが入力した数字とコンピュータが生成した数字がどれくらいの確率(試行回数1000回)で一致するのかを調べています。

前提
number1number3はユーザーが入力した09の数字(被りあり)
コンピューターは0~9の数字を3つ(被りあり)生成
3つの数字が順番まで一致⇨straight
3つの数字が順不同で一致⇨box
1つ一致、2つ一致、3つとも不一致⇨lose

実際に作ったものを動かしてみた(1,2,3と入力)のですが、確率が上から順に
0.2%
0.5%
99.3%
くらいの範囲で収まります。

知りたいこと

この数字は正しいのでしょうか?
boxの確率はもうちょっと高くなるような気がするのですが、これが正しいのか間違っているのかをどうやって調べればいいのかがわかりません。

正しいのか、間違っていたらどこがおかしいのか、合っているかを調べる方法を教えていただきたいです。

該当のソースコード

var straight = document.getElementById('straight'); var box = document.getElementById('box'); var lose = document.getElementById('lose'); var traials_num = 1000; var win_count = {straight: 0, box: 0, lose: 0}; for(var i = 0; i < traials_num; i++){ var random1 = Math.floor( Math.random() * 10); var random2 = Math.floor( Math.random() * 10); var random3 = Math.floor( Math.random() * 10); if(number1 == random1 && number2 == random2 && number3 == random3){ win_count.straight++; }else if(number1 == random1 && number2 == random3 && number3 == random2 || number1 == random3 && number2 == random2 && number3 == random1 || number1 == random2 && number2 == random1 && number3 == random3 || number1 == random2 && number2 == random3 && number3 == random1 || number1 == random3 && number2 == random1 && number3 == random2 ){ win_count.box++; }else{ win_count.lose++; } } straight.innerHTML = '並び順まで一致:' + (win_count.straight / traials_num * 100).toFixed(2) + '%'; box.innerHTML = '順不同で一致:' + (win_count.box / traials_num * 100).toFixed(2) + '%'; lose.innerHTML = 'ハズレ:' + (win_count.lose / traials_num * 100).toFixed(2) +'%';

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

あってるんじゃないかと。
当然確率なのでブレはあります。

000~999の1000個のなかで

ストレートは1通りなので、0.1%
boxは3つの数字の並びに関係ない組み合わせなので、3*2*1の6通り。
かつ、ストレートを除くので5通り。
なので、0.5%
あとは、残りなので、

0.1%
0.5%
99.4%

の範囲に近いと思いますけど。
ifの中身しっかりとは見てないですが、5個書いてあるので問題ないんじゃないかと。

投稿2021/04/29 10:30

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/04/29 11:27

ありがとうございます。 プログラミングで確率の計算を初めてやってみたのですが、合ってるかどうかは自分で計算してみるしかないんですね。 数字にあまり強くないのでとても助かりました。
momon-ga

2021/04/29 13:42

計算は理論値で、プログラムでやるなら統計なので、試行回数を増やす必要があります。 試行回数が増えると計算上の値に収束するはずです。 今回のケースだと運よく、ストレートができてしまったので、 ボックスは、もっと多くなるだろうとの判断したと思うのですが、1000回と試行が少ないので 偏っただけです。 多くの場合、ストレートは0%になるんじゃなかろうかと思います。
退会済みユーザー

退会済みユーザー

2021/04/29 14:06

100回以上ボタンを押してみたらストレートが0%の時も多々ありました! ご丁寧にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問