2013年1月13日日曜日

ACM/ICPCを解くの巻その3~携帯メッセージ~

こんにちは,今回問題はこちらです.

携帯の入力を実装しろってことですね.
今はスマホでフリック操作だから関係ねえよ!と思ったあなた,私もです.

この手の問題はとりあえず辞書が必要ですね.
作ります.


one   = ['.',',','!','?',' ']
two   = ['a','b','c']
three = ['d','e','f']
four  = ['g','h','i']
five  = ['j','k','l']
six   = ['m','n','o']
seven = ['p','q','r','s']
eight = ['t','u','v']
nine  = ['w','x','y','z']
dict = [one,two,three,four,five,six,seven,eight,nine]

こんな感じでしょうか.
次はメインの変換関数です.引数は1行分の数字の列にしました.

流れとしては

for 数字 in 数字列:
  数字が"0"じゃないなら
    辞書から数字の部分を取り出す.
    数字が連続した回数(count)を辞書の長さで割った余りの位置にあるアルファベットを取り出す.
    この文字を仮のアルファベットにする.
    countを1増やす
  数字が"0"なら
    仮のアルファベットを確定して返り値用の文字列の最後に追加する.
    仮のアルファベットをリセットする.
    countもリセットする.

全部終わったら,返り値用の文字列を返す.
こういきます. 詳しくはコードをみてください.

特に難しくもない課題かなあとおもいました.


余談ですが,今回までのような,上からデータを処理していくような問題は,for文で回してindexの値を使うよりも,while文とdeque()を使った方が簡単なんじゃないかと思いました.

0 件のコメント:

コメントを投稿