艦長日誌

艦長日誌

學習練習

簡介

許多程式需要(偽)隨機的值,來模擬真實世界的事件。

常見、熟悉的例子包括:

  • 擲硬幣:從('H'、'T')中隨機取出一個值。
  • 擲骰子:從 1 到 6 中隨機取出一個整數。
  • 洗牌:將一副牌的陣列隨機排序。
  • 在 3D 圖形模擬中建立樹木和灌木。

用電腦產生真正隨機的值,是一項出乎意料地困難的技術挑戰,這也是為什麼還有所謂的「偽隨機」產生器。

Caution

Math.random() 函式不應該用於安全和密碼學的應用程式! 完成關於這個概念的學習練習,就能學到更多

產生隨機數字

在 JavaScript 中,你可以使用Math.random()函式來產生偽隨機數字。 它會回傳一個介於 0(含)與 1(不含)之間的偽隨機浮點數。

說明

Mary 是電視影集 Star Trek: The Next Generation 的忠實粉絲。 她經常玩桌上角色扮演遊戲,和朋友一起扮演 Starship Enterprise 的組員。 Mary 扮演的角色是 Captain Picard,因此她必須負責寫艦長日誌。 她很喜歡遊戲中發揮創意的部分,但不太喜歡臨時隨機生出資料。

請幫幫 Mary,為艦長日誌中常見的資料建立隨機產生器吧。

1. 隨機產生星艦註冊編號

Enterprise(註冊編號 NCC-1701)不是唯一在宇宙中飛行的星艦! 當它遇到其他星艦時,Mary 需要記錄對方的註冊編號。

註冊編號以「NCC-」開頭,後面接一個 1000 到 9999 之間的數字(含兩端)。

實作 randomShipRegistryNumber() 函式,回傳一個隨機的星艦註冊編號。

randomShipRegistryNumber();
// => "NCC-1947"

2. 隨機產生星曆

一份不含日期的日誌有什麼用呢?

星曆是一個浮點數。 Starship Enterprise 在 The Next Generation 第一季的冒險,發生在星曆 41000.0 到 42000.0 之間。 其中「4」代表 24 世紀,「1」代表第一季。

實作 randomStardate 函式,回傳一個介於 41000.0(含)和 42000.0(不含)之間的浮點數。

randomStardate();
// => 41458.15721310934

3. 隨機產生行星

Starship Enterprise 在航行途中會遇到許多行星。 在 Star Trek 宇宙中,行星會依照特性分成不同類別。 例如,地球是 M 級行星。 所有可能的行星級別為:D、H、J、K、L、M、N、R、T 和 Y。

實作 randomPlanetClass() 函式。 它應該隨機回傳其中一個行星級別。

randomPlanetClass();
// => "K"
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
JavaScript Exercism

準備好開始 艦長日誌 了嗎?

註冊 Exercism,透過 37 個概念159 個練習 和真人引導來學習並精通 JavaScript,全部免費。