Smile Blog

スマイルヴィジョンスタッフが運営する広報ブログ

【作ってみた】ひらがな→モールス信号変換器

tukutte08

開発部のおいぬです(▽・x・▽)
今回はひらがなをモールス信号に変換するシステムを作ってみました。

みなさんは幼少期に暗号を読み書きすることに憧れた時期はありましたでしょうか?
私にはありました。よくわからない暗号とあいうえおの対応表を作り、誰かに見せるわけでも無くただ楽しく暗号を書いていました。そんな幼少期を思い出して、暗号化と復元をボタンひとつで行えるようなシステムを作ってみました。

 

モールス符号(信号)とは?

モールス符号(モールスふごう、英語: Morse code)は、電信で用いられている可変長符号化された文字コードである。モールス符号を使った信号はモールス信号と呼ばれる。

(wikipediaより引用)

短点(・)と長点(-)と間隔の組み合わせでアルファベットや数字を表現します。よく使われる文字は短い符号になるように工夫されてたり、長点一つは短点3つ分の長さだったり、和文と欧文で表現がちがってたりなど、いろいろ規則があるみたいです。
今回使ったのはこちらのモールス符号一覧表です。

なぜモールス信号を選んだかというと、暗号と言えば…って考えて一番はじめに「モールス信号」が出てきたので、モールス信号にしました。

作ってみました

完成したものはこちら↓
作ってみたページへいく

プログラムはこんな感じ

まず配列$kana_morusuのkeyに「ひらがな」、valueに「モールス信号」を格納します。(50音)
配列$morusu_kanaには、逆にkeyに「モールス信号」、valueに「ひらがな」を格納するのですが、array_flip($配列)という便利なphpの関数があったのでこれを使いました。
array_flip — 配列のキーと値を反転する

配列$str_kanaには変換するひらがな、配列$str_morusuには復元するモールス信号が入ります。

 

【変換】ひらがな→モールス信号

フォームで送信されたひらがなをpreg_split()で一文字ずつばらばらにします。
(「あいう」→「あ」「い」「う」)
下の一行で、phpで日本語(マルチバイト)を含む文字列を一文字ずつ配列に分割させることができます。

(参考:PHPで日本語(マルチバイト)を含む文字列を一文字ずつ配列に分割させる方法)
preg_split — 正規表現で文字列を分割する

ばらばらにしたひらがなをforeachで回して、array_search()で検索し、対応するモールス信号に置き換えます。
(「あ」→「--・--」、「い」→「・-」、「う」→「・・-」)
array_search — 指定した値を配列で検索し、見つかった場合に対応する最初のキーを返す

モールスに信号に置き換えられた文字は随時、配列$newphrase_kanaに格納していきます。
最後に、implode()を使ってモールスに変換された文字同士を半角スペースで連結させます。これが入力したひらがなの変換後の文字として画面に表示させます。
implode — 配列要素を文字列により連結する

 

【復元】モールス信号→ひらがな

※今回のモールス信号を入力するフォームには、上記ひらがな→モールス信号に変換されたものをペーストすることを前提として作っております。
まず、フォームに入力(ペースト)されたモールス信号を、explode()を使って半角スペースで区切って分解します。
(「--・-- ・- ・・-」→「--・--」「 」「・-」「 」「・・-」)
分解したものを配列$matchs_morusuに格納します。
explode — 文字列を文字列により分割する

配列$matche_morusuに含まれる空の要素を排除します。空の要素はarray_filter($配列, ‘strlen’)で排除できます。排除した後は配列が歯抜けになってしまうので、keyを振り直します。
(「--・--」「 」「・-」「 」「・・-」 → 「--・--」「・-」「・・-」)
(参考:array_filterと無名関数)
(参考:array_filter()とarray_values()を使って配列から空要素を削除して添字をつめる方法)
array_filter — コールバック関数を使用して、配列の要素をフィルタリングする
array_values — 配列の全ての値を返す

foreachでまわして、何も無ければひらがなに変換しますが、もしvalueに濁点(・・)と半濁点(・・–・)があると、1つ前の文字と半角スペースでつないで合体させます。
(「・-・・(か)」「・・(゛)」「-・-・・(き)」「・・(゛)」「・・・-(く)」「・・(゛)」)

復元したひらがなを表示させます。
いかがでしょうか。今回は50音にモールス信号を対応させましたが、自分独自の言葉や記号を設定すれば自分だけの変換機が作れます。みなさんもぜひこの機会にオリジナルの魔術書を作ってみてください(▽・x・▽)

・-・・・ ・-・ ・-・・ ---・- ・- -・

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

おいぬ

おいぬ

■部署
開発部

■スペック(Level、身長、座高、属性、資格)
闇属性

■入社年
2016年

■趣味
音楽、工作、踊ってみた、たべる

■座右の銘
百敗不屈

■ひとこと
おなかすいた

関連記事

  1. FullSizeRender-9-1-1024x768

    コワーキングスペースで働く3つのメリット

  2. 66a4ab51ed9ffc879ff0cf5064d744e7_m

    EFO(入力フォーム最適化)で成約率を上げる10のテクニック

  3. mv_job

    イベント来場者管理アプリ「SmileTracking」について

  4. mv_puzzle

    【作ってみた】jQuery UI sortable でデジタルパズル

  5. 足し算

    【作ってみた】Googleスプレッドシートで100マス計算表(足し算編)

  6. Raspberry Piを使ってみよう 【セットアップ編】

    Raspberry Piを使ってみよう 【セットアップ編】

  7. img2

    柿の種より人の心を動かすキャッチコピーを考えてみる(その2)

  8. mv

    【作ってみた】googleスプレッドシートで在庫管理表

人気記事

  1. クリアボタン
  2. 安い!美味い! 【大阪天満・天神橋筋商店街の食レポ】
  3. mv
  4. 新入社員研修「伝える+伝わるセミナー」
  5. タイ料理「天満3パクチー」
  6. 2017年スタートアップトレンド (アメリカ版)
  7. 大阪天満天神橋筋商店街がっつりBEEF_KINGOFSTEAK
  8. S__16556226
  9. tukutte08

最近の記事

  1. 9f803b3532fa44bcb3001cac6734d898_m 埋込み式のGoogleカレンダーの色を自由自在にカスタマイズする方法
  2. 66a4ab51ed9ffc879ff0cf5064d744e7_m EFO(入力フォーム最適化)で成約率を上げる10のテクニック
  3. FullSizeRender-9-1-1024x768 コワーキングスペースで働く3つのメリット
  4. tukutte09 【作ってみた】本型収納箱「BOOKBOX」でアクセサリーボックス
  5. S__16556226 ITよろず相談会開催!ROUGH LABO扇町
2017年12月
« 11月    
 123
45678910
11121314151617
18192021222324
25262728293031
PAGE TOP