このサイトのトップページの下の方にあるあれ。
最初に作った時はこんな処理をしていた。
1~43の間から乱数を拾う→2つ目の乱数も1~43の間から拾う→1つ目の乱数とかぶったら拾い直し→以下、乱数を6つ拾うまで同様の処理・・・以下略
誰がどう考えたって効率が悪いでしょ。それは解ってるんだけど、知識がなければ知恵もないので、実際のロトの抽選方法と同様の処理がどうしても思い浮かばなかった。
まあ、理屈の上ではこれでもどの値も均等に拾えるし、今のCPUにとっては一瞬で終わる処理だけど、永久に処理が終わらない事もまた理屈の上ではあり得る訳で、やっぱりこのままだと気持ちが悪い。
という事で、ない知恵を絞ってもう一度考えてみた。
要するに、乱数を1回拾う毎に、次の処理では前の処理で使った乱数の範囲を1つ狭めたそれを使えば、無駄に同じ処理を繰り返す必要がなくなる訳だ。
で、その方向で考えていたのだが、単に拾った乱数をそのまま使う方法だと、乱数がかぶった時の処理がえらい煩雑になる。やって出来ない事はないが、無駄に長いコードは書きたくない。能力がないくせに理想は高いのである(笑)。
うーむ、どうすればいいんだ?
で、配列を使ったら何とかなるんじゃないかなぁと。
イメージとしては、
あらかじめ配列を用意する→乱数nを拾う→n番目の配列の要素を取り出す→残りの要素で配列を組み直す→以下繰り返し
こんな感じ。
問題は、配列をこんな風に操作出来るかって事。
何かいい関数あるかなぁ・・・、あ、あるじゃん。無知とは恐ろしい(笑)。
という事で現在のものが完成したのだが、こんな程度のものを作るのに、こんなに苦労していてはいかんなぁ。
もっとも、JavaScriptを思うように使いこなせるようになったとして、一体何をするつもりなのか自分でも判らないんですけどね。