許多程式需要(偽)隨機的值,來模擬真實世界的事件。
常見、熟悉的例子包括:
用電腦產生真正隨機的值,是一項出乎意料地困難的技術挑戰,這也是為什麼還有所謂的「偽隨機」產生器。
Math.random() 函式不應該用於安全和密碼學的應用程式!
完成關於這個概念的學習練習,就能學到更多
在 JavaScript 中,你可以使用Math.random()函式來產生偽隨機數字。
它會回傳一個介於 0(含)與 1(不含)之間的偽隨機浮點數。
Mary 是電視影集 Star Trek: The Next Generation 的忠實粉絲。 她經常玩桌上角色扮演遊戲,和朋友一起扮演 Starship Enterprise 的組員。 Mary 扮演的角色是 Captain Picard,因此她必須負責寫艦長日誌。 她很喜歡遊戲中發揮創意的部分,但不太喜歡臨時隨機生出資料。
請幫幫 Mary,為艦長日誌中常見的資料建立隨機產生器吧。
Enterprise(註冊編號 NCC-1701)不是唯一在宇宙中飛行的星艦! 當它遇到其他星艦時,Mary 需要記錄對方的註冊編號。
註冊編號以「NCC-」開頭,後面接一個 1000 到 9999 之間的數字(含兩端)。
實作 randomShipRegistryNumber() 函式,回傳一個隨機的星艦註冊編號。
randomShipRegistryNumber();
// => "NCC-1947"
一份不含日期的日誌有什麼用呢?
星曆是一個浮點數。 Starship Enterprise 在 The Next Generation 第一季的冒險,發生在星曆 41000.0 到 42000.0 之間。 其中「4」代表 24 世紀,「1」代表第一季。
實作 randomStardate 函式,回傳一個介於 41000.0(含)和 42000.0(不含)之間的浮點數。
randomStardate();
// => 41458.15721310934
Starship Enterprise 在航行途中會遇到許多行星。 在 Star Trek 宇宙中,行星會依照特性分成不同類別。 例如,地球是 M 級行星。 所有可能的行星級別為:D、H、J、K、L、M、N、R、T 和 Y。
實作 randomPlanetClass() 函式。
它應該隨機回傳其中一個行星級別。
randomPlanetClass();
// => "K"