JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで文字列をモールス信号に変換する方法

モールス信号とは?

モールス信号(Morse code)は、テキスト文字を「トン(短点)」と「ツー(長点)」と呼ばれる2種類の信号パターンの組み合わせに置き換えて表現する、電気通信における標準的なエンコード方式です。

特定の文字列をモールス信号へ変換する関数を作るには、まずすべての英字(A〜Z)とそれに対応するモールス符号をマッピングしたオブジェクトが必要になります。この対応表さえ用意できれば、あとは文字列を1文字ずつ走査しながら新しい文字列を組み立てていくだけで変換が実現できます。

以下は、アルファベットをモールス符号にマッピングしたオブジェクトです。

モールスコード対応表

const morseCode = {
    "A": ".-",
    "B": "-...",
    "C": "-.-.",
    "D": "-..",
    "E": ".",
    "F": "..-.",
    "G": "--.",
    "H": "....",
    "I": "..",
    "J": ".---",
    "K": "-.-",
    "L": ".-..",
    "M": "--",
    "N": "-.",
    "O": "---",
    "P": ".--.",
    "Q": "--.-",
    "R": ".-.",
    "S": "...",
    "T": "-",
    "U": "..-",
    "V": "...-",
    "W": ".--",
    "X": "-..-",
    "Y": "-.--",
    "Z": "--.."
}

続いて、文字列をモールス信号に変換する関数を見ていきましょう。

実装例

変換の流れは以下の通りです。

  1. toUpperCase() で文字列をすべて大文字に統一する(対応表は大文字のみのため)。
  2. split("") で文字列を1文字ずつの配列に分解する。
  3. map() を使って各文字を対応するモールス符号に置き換える。対応表に存在しない文字(記号や数字など)はそのまま残す。
  4. join("") で配列を再び1つの文字列に連結して返す。
const morseCode = {
    "A": ".-",
    "B": "-...",
    "C": "-.-.",
    "D": "-..",
    "E": ".",
    "F": "..-.",
    "G": "--.",
    "H": "....",
    "I": "..",
    "J": ".---",
    "K": "-.-",
    "L": ".-..",
    "M": "--",
    "N": "-.",
    "O": "---",
    "P": ".--.",
    "Q": "--.-",
    "R": ".-.",
    "S": "...",
    "T": "-",
    "U": "..-",
    "V": "...-",
    "W": ".--",
    "X": "-..-",
    "Y": "-.--",
    "Z": "--.."
}

const convertToMorse = (str) => {
    return str.toUpperCase().split("").map(el => {
        return morseCode[el] ? morseCode[el] : el;
    }).join("");
};

console.log(convertToMorse('Disaster management'));
console.log(convertToMorse('hey there!'));

出力結果

コンソールには次のように出力されます。

-........-...-..-. --.--..---..--.-.-
.....-.-- -......-..!

ポイントの解説

  • 大文字への正規化: 対応表のキーは大文字のみなので、toUpperCase() による事前変換が必須です。これにより小文字混在の入力でも正しく処理できます。
  • 未知の文字の扱い: 三項演算子 morseCode[el] ? morseCode[el] : el により、対応表にない文字(例:「!」やスペース)は元のまま出力されます。用途によっては、未知の文字を空文字に置き換えたり、エラーを投げたりする設計も検討できます。
  • 単語の区切り: 標準的なモールス信号では単語間を「/」やスペースで区切るのが一般的です。より厳密な変換が必要な場合は、スペースを「/」に置き換える処理を追加するとよいでしょう。
  1. JavaScriptで配列をSet(セット)に変換する方法

    JavaScriptで配列をSetに変換するときの基本JavaScriptでは、Setオブジェクトを使うことで、配列から重複しない一意の値だけを持つコレクションを簡単に作成できます。SetはES6(ECMAScript 2015)で導入された組み込みオブジェクトで、同じ値が複数回追加されても自動的に1つにまとめられるのが特徴です。変換自体は非常にシンプルで、new Set(配列)と書くだけで完了します。コード例:配列からSetへの変換以下は、重複を含む配列をSetに変換して画面に表示するサンプルコードです。<!DOCTYPE html> <html lang=ja> &

  2. 【JavaScript入門】文字列を繰り返す方法 – Array()とjoin()を組み合わせた実装例

    JavaScriptである文字列を指定した回数だけ繰り返して表示したい場合、Array()コンストラクタとjoin()メソッドを組み合わせることで簡単に実現できます。 仕組みの解説 new Array(value + 1)は、要素数が「value + 1」個の空の配列を生成します。この空の配列に対してjoin(this)を実行すると、各要素の間に区切り文字として自分自身(対象の文字列)が挿入されます。要素が value + 1 個あれば間は value 個できるため、結果的に元の文字列が value 回繰り返されるという仕組みです。 サンプルコード 以下に実際のコード例を示します。 <!