5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NimAdvent Calendar 2020

Day 3

テキストをギャル文字に変換するコマンドを作った

Last updated at Posted at 2020-12-02

Nimτ〃日本語を≠〃ャノレ文字ッホレ|文字列|=変換すlレ⊃マノ┣〃を作レノмаU+ニ。=σ記事τ〃|?作ッ+ニ⊃マ*ノ┣〃σ使レ|方├、仕組彡を解説Uмаす。

※原文: Nimで日本語をギャル文字っぽい文字列に変換するコマンドを作りました。
この記事では作ったコマンドの使い方と、仕組みを解説します。

ギャル文字とは

ひらがなやカタカナ、漢字などの任意の文字を、元の文字以外の任意の1つ以上の文字列の組み合わせで表現する表現技法を指します(たぶん)。

以下がギャル文字の一例です。

ァレヽ⊃λ_寸>

原文: あいうえお

なぜ作ったか

作れそうだったから作りました。

ソースコード

ソースコードは以下。

nimble packageにも登録ずみですので、Nimユーザであれば以下のコマンドでインストールできます。

nimble install gyaric

使い方

以下のように実行することで、任意の文字をギャル文字に変換します。

echo <任意の文字> | gyaric encode

以下のコマンドで元の文字列に『ある程度まで』復元できます。
※完全には復元できません。

echo <ギャル文字> | gyaric decode

仕組み

Tableのキーにひらがな、カタカナ1文字を持ち、値に変換候補のギャル文字を1つ以上持たせただけです。かなり単純。

import tables, random, strutils

const
  dict = {
    "あ": @["ぁ", "ァ"],
    "ア": @["ァ", "了"],
    "い": @["レヽ", "レ|", "ヰ"],
    "ぃ": @["ы"],
    "イ": @["亻"],
    "う": @["⊃`"],
    "ウ": @["宀"],
    "え": @["ゑ", "λ_"],
    "エ": @["ヱ"],
    "お": @["寸>`"],
    "オ": @["才", "オ"],
    "が": @["カヾ", "カ〃", "カゞ", "ヵ〃"],
    "ガ": @["カヾ", "カ〃", "カゞ", "ヵ〃"],
    "か": @["カl", "カゝ", "カヽ", "ヵゝ"],
    "カ": @["ヵ"],
    "ぎ": @["(キ〃", "‡〃", "≠〃"],
    "ギ": @["‡〃", "≠〃"],
    "き": @["(キ", "‡", "≠"],
    "キ": @["‡", "≠"],
    "ぐ": @["<〃"],
    "く": @["<"],
    "げ": @["|ナ〃", "レナ〃"],
    "ゲ": @["ヶ〃"],
    "け": @["|ナ", "レナ"],
    "ケ": @["ヶ"],
    "ご": @["⊃〃", "⊇〃"],
    "ゴ": @["⊃〃", "⊇〃"],
    "こ": @["="],
    "コ": @["⊃", "⊇"],
    "サ": @["廾"],
    "さ": @["±"],
    "し": @["ι", "υ", "∪", "U", "U"],
    "じ": @["ι〃", "υ〃", "∪〃", "U゙", "U゙"],
    "ソ": @["`ノ", "ヽノ"],
    "だ": @["tニ゙", "+ニ〃", "ナニ〃", "ナご"],
    "た": @["tニ", "+ニ", "ナニ", "ナこ"],
    "ヂ": @["干〃", "千〃"],
    "チ": @["干", "千"],
    "づ": @["⊃〃", "っ〃"],
    "つ": @["⊃"],
    "ツ": @["〃ノ"],
    "っ": @["ッ"],
    "で": @["τ〃"],
    "て": @["〒", "τ"],
    "テ": @["〒", "τ"],
    "ド": @["├〃", "┣〃"],
    "ト": @["├", "┣"],
    "と": @["├", "?"],
    "な": @["ナょ", "+?", "+ょ", "fょ"],
    "ナ": @["ナ"],
    "に": @["|=", "|ニ", "レニ"],
    "ニ": @["ニ"],
    "ね": @["キa", "пё", "Йё"],
    "の": @["σ"],
    "ネ": @["пё", "Йё", "ネ"],
    "ノ": @["/", "丿"],
    "バ": @["ハ〃", "/ヽ〃"],
    "パ": @["ハo", "/ヽo"],
    "ぱ": @["ハo", "/ヽo"],
    "は": @["|?", "レ?", "は"],
    "ハ": @["/ヽ"],
    "ビ": @["ヒ〃"],
    "ぴ": @["ヒo", "ヒ*"],
    "ピ": @["ヒo", "ヒ*"],
    "ヒ": @["ヒ"],
    "ブ": @["フ〃", "┐〃"],
    "プ": @["フo", "┐o", "┐*"],
    "ぷ": @["フo", "┐o", "┐*"],
    "べ": @["∧〃"],
    "ベ": @["∧〃"],
    "ぺ": @["ヘo", "∧o", "∧*"],
    "ペ": @["ヘo", "∧o", "∧*"],
    "ボ": @["ホ〃"],
    "ポ": @["ホo", "ホ*"],
    "ぽ": @["ホo", "ホ*"],
    "ほ": @["│ま"],
    "マ": @["ма", "マ"],
    "ま": @["ма", "ま"],
    "ミ": @["Ξ", "彡"],
    "み": @["Ξ", "彡", "ゐ"],
    "ム": @["厶", "∠、", "<、"],
    "む": @["厶", "∠、", "<、"],
    "メ": @["×", "乂", "〆"],
    "も": @["м○", "も"],
    "モ": @["м○", "モ"],
    "や": @["ゃ"],
    "ゃ": @["ャ"],
    "ヤ": @["ャ"],
    "ゆ": @["ゅ"],
    "ユ": @["ュ"],
    "ゅ": @["ュ"],
    "よ": @["∋", "чOo0"],
    "ヨ": @["∋"],
    "ょ": @["ョ"],
    "ら": @["ら", "ζ"],
    "り": @["L|", "└ノ", "Lノ", "レノ"],
    "リ": @["L|", "└ノ", "Lノ", "レノ"],
    "る": @["lレ", "」レ", "/レ", "ノレ"],
    "ル": @["lレ", "」レ", "/レ", "ノレ"],
    "れ": @["れ", "キν", "└"],
    "レ": @["レ", "└"],
    "ろ": @["з", "З"],
    "ロ": @["口"],
    "わ": @["ゎ", "キっ"],
    "ワ": @["ヮ"],
    "ん": @["ω", "μ", "w"],
    "ン": @["*ノ"],
    }.toTable

encode処理では、単純に置換処理でギャル文字に置き換えるという処理を行っています。

「完全には復元できません」と書いたのは、encode処理後の文字列から元の文字列を一意に特定できないためです。特定できるようにもできるのですが、面倒だったのでそこまで作りこんでいません。

まとめ

以下の内容について説明しました。

  • ギャル文字のこと
  • gyaricコマンドの作り
    • 単純な置換処理で実現した
    • 100%元の文字に復元はできない

ギャル文字を誰かに送りたくなった時は、思い出していただければ幸いです。

以上です。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?