我們每個人都從親生父母身上繼承了一組稱為 DNA 的化學指令,這些指令影響著我們身體的建構方式。所有已知的生命都依賴 DNA!
注意:你不必了解任何關於核苷酸或 DNA 的知識,就能完成這個練習。
DNA 是一長串由其他化學物質構成的鏈,其中最重要的是四種核苷酸:腺嘌呤、胞嘧啶、鳥嘌呤和胸腺嘧啶。單一條 DNA 鏈可以包含數十億個這四種核苷酸,而它們出現的順序非常重要!我們把一段 DNA 中這些核苷酸的順序稱為「DNA 序列」。
我們將 DNA 序列表示為這四種核苷酸的有序集合,而常見的做法是用一串字元來表示,例如「ATTACG」代表由 6 個核苷酸組成的 DNA 序列。'A' 代表腺嘌呤,'C' 代表胞嘧啶,'G' 代表鳥嘌呤,'T' 代表胸腺嘧啶。
給定一個代表 DNA 序列的字串,計算每種核苷酸各出現多少次。如果字串中包含不是 A、C、G 或 T 的字元,那麼它就是無效的,你應該發出錯誤。
例如:
"GATTACA" -> 'A': 3, 'C': 1, 'G': 1, 'T': 2
"INVALID" -> error
你應該定義一個自訂型別 'DNA',並提供一個名為 'Counts' 的函式,它會輸出兩個值:
DNA 序列適合用什麼型別表示?
哪些 Go 型別最適合用來表示這些輸出的值?
看看測試案例,從中取得可能輸入的提示吧。
你可能會好奇 cases_test.go 這個檔案。
我們在 leap 練習 中說明了它。