私たちは皆、生物学的な親からDNAと呼ばれる化学的な設計図を受け継いでいます。これは、私たちの体がどのように作られるかに影響を与えます。知られているすべての生命はDNAに支えられています!
注: この演習を解くために、ヌクレオチドやDNAについて何かを理解している必要はありません。
DNAは他の化学物質が長くつながった鎖であり、もっとも重要なのは4つのヌクレオチド、アデニン、シトシン、グアニン、チミンです。DNAの鎖は1本で、これらの4つのヌクレオチドを何十億個も含むことがあり、それらが現れる順序が重要です! ある部分のDNAにおけるこれらのヌクレオチドの順序を「DNA配列」と呼びます。
DNA配列は、これら4つのヌクレオチドを順番に並べたものとして表します。よく使われるのは、文字の並びで表す方法です。たとえば、6つのヌクレオチドからなるDNA配列は"ATTACG"のようになります。'A'はアデニン、'C'はシトシン、'G'はグアニン、'T'はチミンを表します。
DNA配列を表す文字列が与えられたとき、それぞれのヌクレオチドがいくつあるかを数えましょう。文字列にA、C、G、T以外の文字が含まれている場合は無効なので、エラーを通知してください。
たとえば、次のとおりです。
"GATTACA" -> 'A': 3, 'C': 1, 'G': 1, 'T': 2
"INVALID" -> error
コードを実行しているときに、予期しない問題に対処しなければならないことがあります。 Dartでは、こうした状況に対処するために例外を使えます。
Dartで例外を投げるには、throwキーワードを使い、そのあとに投げたい特定の例外のインスタンスを書きます。
たとえば、throw Exception()と書くと、基本のException型のインスタンスを投げます。
この演習では、InvalidNucleotideExceptionという独自の例外を定義する必要があります。
この例外は、不正なヌクレオチドが出てきたときに投げる必要があります。
テストスイートは、InvalidNucleotideExceptionのインスタンスが渡されることだけを確認するので、正しく投げられさえすれば、好きなように実装してかまいません。
Dartの例外について詳しくは、例外のドキュメントを参照してください。 独自の例外は、Exceptionインターフェースを実装することで作成できます。