信頼できるつながりをすべての人に届けることを使命とする大手通信会社、LinkLineの一員になりました。 チームは大きな課題に直面しています。ユーザーが送信してくる電話番号は、ハイフン、スペース、ドット、括弧、さらにはプレフィックスまで、実にさまざまな形式です。 有効な番号もあれば、どうしても使えない番号もあります。
使命は、この混沌を秩序に変えることです。 有効な番号は整えて、システムで使えるように適切な形式にします。 同時に、無効なデータは見つけ次第、取り除きます。
LinkLineの事業がうまく回るかどうかは、使えるものと使えないものを正しく見分けられるかどうかにかかっています。 さあ、この挑戦に挑み、つながりをスムーズに保つ準備はできましたか?
ユーザーが入力した電話番号をきれいに整理して、SMSメッセージを送信できるようにしましょう。
**北米番号計画(NANP)**は、アメリカ合衆国、カナダ、バミューダなど、北米の多くの国で使われている電話番号の体系です。NANP加盟国はすべて、同じ国際電話の国番号1を共有しています。
NANPの番号は10桁の数字で、3桁の番号計画エリアコード(一般にエリアコードと呼ばれます)と、それに続く7桁のローカル番号からなります。ローカル番号の最初の3桁は交換局コードを表し、その後に加入者番号である固有の4桁の数字が続きます。
通常、形式は次のように表されます。
NXX NXX-XXXX
ここで、Nは2から9までの任意の数字、Xは0から9までの任意の数字です。
国番号(1または+1で表されます)が先頭に付くこともあります。
ここでの課題は、さまざまな形式で書かれた電話番号から記号を取り除き、国番号があればそれも取り除いて整理することです。
たとえば、次のような入力が与えられます。
+1 (613)-995-0253613-995-02531 613 995 0253613.995.0253これらはすべて、次の出力になるはずです。
6139950253
注意: この演習ではNANP加盟国で使われる電話番号だけを扱うため、有効な国番号とみなされるのは1だけです。
シンプルで読みやすいコードにするために、JavaのStringメソッドではなく、Scalaのコレクション関数を使ってみてはどうでしょうか。
ScalaではStringは暗黙的にSeq[Char]でもあるので、Stringのメソッドと同じように呼び出せることを覚えておきましょう。
いくつか例を挙げます。
replaceAllの代わりにfilter
substringの代わりにtake、takeRight、drop、head、tail
もう1つ試す価値のあるアイデアとして、StringをList[Char]に変換してから、::演算子を使ったパターンマッチングを利用する方法があります。