プログラムソースのdocode()関数(decode()じゃないの?)に見られるように、
条件文を書く時、
if (i == 0) 処理;
if (i == 1) 処理;
:
if (i == n) 処理;
と書かかれているのを頻繁に見ますが(含WSJT-X)、これではどれかの条件に
マッチした後も、引き続き絶対にマッチしない条件文を検査することになり
無駄です。こういうときは、siwth -- case文か、
if (i == 0) 処理;
else if (i == 1) 処理;
:
else (i == n) 処理;
と書いて、more likelyなものを最初の方にもってこないともったいないです。
もっとも今回のような場合はテーブル参照にするのが定番で、誰かすでにやって
いないかと"morse code hash"で検索したところ、
https://codegolf.stackexchange.com/questions/18048/morse-code-to-standard-output
https://codegolf.stackexchange.com/questions/19727/write-a-hash-function-for-morse-code
が見つかりました。あまり凝ったものも困りますが、「頭の体操」といった
感じでいかがでしょう。