ETL

ETL

簡單

簡介

你在一間製作線上多人遊戲的公司工作,這款遊戲叫做 Lexiconia。

要玩這款遊戲,每位玩家會拿到 13 個字母,他們必須重新排列這些字母來組成單字。 不同的字母有不同的點數,因為用某些字母組成單字就是比其他字母容易。

這款遊戲最初以英文推出,但非常受歡迎,現在公司也想拓展到其他語言。

不同的語言需要支援不同的字母點數。 字母的點數取決於它在該語言中相較於其他字母的使用頻率。

例如,字母「C」在英文中相當常見,只值 3 分。 但在挪威文中它是很罕見的字母,值 10 分。

為了讓新增語言更容易,你的團隊需要改變遊戲中字母及其點數的儲存方式。

說明

你的任務是改變遊戲中字母及其點數的資料格式。

目前,字母是依照分數分組儲存的,形成一對多的對應關係。

  • 1 點:"A"、"E"、"I"、"O"、"U"、"L"、"N"、"R"、"S"、"T",
  • 2 點:"D"、"G",
  • 3 點:"B"、"C"、"M"、"P",
  • 4 點:"F"、"H"、"V"、"W"、"Y",
  • 5 點:"K",
  • 8 點:"J"、"X",
  • 10 點:"Q"、"Z",

這裡需要改成把每個字母各自與其分數一起儲存,形成一對一的對應關係。

  • "a" 值 1 點。
  • "b" 值 3 點。
  • "c" 值 3 點。
  • "d" 值 2 點。
  • 依此類推。

作為這項變更的一部分,團隊也決定把字母改為小寫,而不再是大寫。

Note

如果你想看看資料原本的結構,以及它需要怎麼改變,可以看看測試套件裡的範例。

提示

這個練習會處理文字資料。基於歷史因素,Haskell 的String型別與[Char]是同義的,也就是字元的陣列。如果需要更有效率地處理文字資料,可以使用Text型別。

如果你想為這個練習多做一點,可以試試以下選用的延伸內容:

  • 閱讀 Haskell 的字串型別。

  • 在 package.yaml 的相依套件清單中加入- text。

  • 用下列方式匯入Data.Text:

      import qualified Data.Text as T
      import           Data.Text (Text)
    
  • 現在你可以寫出例如transform :: Map Int Text -> Map Char Int這樣的型別簽名,並用例如T.toLower來取用Data.Text的組合子。

  • 查閱Data.Text的文件。

這個部分完全是選用的。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Haskell Exercism

準備好開始 ETL 了嗎?

註冊 Exercism,透過 107 個練習 和真人引導來學習並精通 Haskell,全部免費。