多くのプログラムでは、現実世界の出来事をシミュレーションするために、(疑似)乱数が必要になります。
よくある身近な例には、次のようなものがあります。
コンピューターで真の乱数を生成するのは驚くほど難しい技術的課題です。だからこそ、「疑似乱数」の生成器も存在します。
Math.random()関数を、セキュリティや暗号に関わる用途に使ってはいけません!
この概念についての学習用の演習を終えると、さらに詳しく学べます。
JavaScriptでは、Math.random()関数を使って疑似乱数を生成できます。
この関数は、0以上1未満の疑似乱数の浮動小数点数を返します。
メアリーはテレビシリーズ『スタートレック:新世代』の大ファンです。 彼女はよく、ペンと紙を使うロールプレイングゲームで遊んでいます。そこでは、メアリーと友達がエンタープライズ号のクルーになりきります。 メアリーが演じるのはピカード艦長なので、艦長のログをつける必要があります。 ゲームの創造的な部分は大好きですが、その場でランダムなデータを考えるのは苦手です。
艦長のログによく登場するデータをランダムに生成する仕組みを作って、メアリーを手伝いましょう。
宇宙を飛び回っているのは、エンタープライズ(登録番号NCC-1701)だけではありません! 別の宇宙艦と出会ったとき、メアリーはその宇宙艦の登録番号をログに記録する必要があります。
登録番号は接頭辞"NCC-"で始まり、そのあとに1000以上9999以下の数値が続きます。
ランダムな宇宙艦の登録番号を返すrandomShipRegistryNumber()関数を実装しましょう。
randomShipRegistryNumber();
// => "NCC-1947"
日付が入っていなければ、ログに何の意味があるのでしょうか?
恒星日は浮動小数点数です。 『新世代』のシーズン1におけるエンタープライズ号の冒険は、恒星日41000.0から42000.0の間で繰り広げられます。 "4"は24世紀を、"1"はシーズン1を表しています。
41000.0以上42000.0未満の浮動小数点数を返すrandomStardate関数を実装しましょう。
randomStardate();
// => 41458.15721310934
エンタープライズ号は、旅の途中でたくさんの惑星と出会います。 スタートレックの世界の惑星は、その性質によっていくつかのクラスに分類されています。 たとえば、地球はMクラスの惑星です。 惑星クラスとしてあり得るのは、D、H、J、K、L、M、N、R、T、Yです。
randomPlanetClass()関数を実装しましょう。
惑星クラスのいずれかをランダムに返します。
randomPlanetClass();
// => "K"
Exercismに登録すれば、37個のコンセプト159個の演習、そして本物の人間によるメンタリングとともに、JavaScriptを学んでマスターできます。すべて無料です。