# 完全公開ヒエログリフ変換ロジック [Hieroglitter](https://hieroglitter.herokuapp.com/)みたいなアルファベットのヒエログリフ変換が誰でも出来るロジックのお話し ## 文字とコンピューター コンピューターは演算装置なので大元を辿っていくと数値しか扱えません。 人間が扱う文字をコンピュータ上で扱うために内部で文字と数値を対応させています。 「あ」は「1」、「い」は「2」みたいなイメージ ## 文字コード 先ほどの「あ」は「1」、「い」は「2」みたいなイメージで文字と数値を対応させているのが文字コードです。 たまに見るUTF-8とかJISとかは数値と文字を対応させた表のようなものでその文字コードの種類によって漢字が使えたりヒエログリフが使えたりと使える文字が変わってきます。 ### いろんな文字コード - ASCII(アスキー) - EBCDIC(エビディック) - シフトJISコード [S-JIS](エスジス) - EUC(イーユーシー) - Unicode(ユニコード) #### 参考 [文字コードの基礎・種類 | yukimasablog](https://yukimasablog.com/character-code) ## rubyの文字コードと文字の変換 rubyの3.1.2で使われる文字コードはUTF-8が使われています ``` irb(main):001:0> puts __ENCODING__ UTF-8 => nil ``` ``` irb(main):001:0> "あ".ord => 12354 irb(main):002:0> 12354.chr("UTF-8") => "あ" ``` ## アルファベットの音に対応するヒエログリフ [![Image from Gyazo](https://t.gyazo.com/teams/startup-technology/f1f7285159bf8ade855ab51026ad3aa7.png)](https://startup-technology.gyazo.com/f1f7285159bf8ade855ab51026ad3aa7) A -> 𓄿(78143) B -> 𓃀(78016) C -> 𓎡(78753) D -> 𓂧(77991) E -> 𓇋(78283) F -> 𓆑(78225) G -> 𓎼(78780) H -> 𓎛(78747) I -> 𓇋(78283) J -> 𓆓(78227) K -> 𓎡(78753) L -> 𓃭(78061) M -> 𓅓(78163) N -> 𓈖(78358) O -> 𓍯(78703) P -> 𓏤(78820) Q -> 𓏘(78808) R -> 𓂋(77963) S -> 𓋴(78580) T -> 𓏏(78799) U -> 𓅱(78193) V -> 𓆑(78225) W -> 𓅱(78193) X -> 𓎡 (78753), 𓋴 (78580) Y -> 𓇋(78283) Z -> 𓊃(78467) ``` irb(main):001:0> 78193.chr("UTF-8") => "𓅱" ``` ### 引用元 [ヒエログリフ変換表 · GitHub](https://gist.github.com/souri-t/3bb9475c2710a55a10e71337d84ce2c3) https://www.kyuhaku.jp/j-kouko/img/ouchi/hiero.pdf ## 試しにアルファベット1文字をヒエログリフに変換してみる アルファベットのAに対応するのはUTF-8の78143なのでAが入力されたらUTFの78143つまり𓄿を返してあげるようにすると変換が出来ます ``` irb(main):001:0> text = "A" => "A" irb(main):002:1* if text == "A" irb(main):003:1* puts 78143.chr("UTF-8") irb(main):004:0> end 𓄿 => nil ``` ## アルファベットが来たらどんな文字でもヒエログリフに変換できるようにする ```ruby class PharaohLang require 'yaml' def initialize @text = gets.chomp end def translate_to_hieroglyph pharaoh_lang_table = YAML.load_file('pharaoh.yaml') @text.chars.map do |char| character_code = pharaoh_lang_table[char.upcase] character_code.instance_of?(Array) ? character_code.map{ |code| code.to_i.chr("UTF-8") } : character_code.to_i.chr("UTF-8") end .join end end puts PharaohLang.new.translate_to_hieroglyph ``` ```yaml A: 78143 B: 78016 C: 78753 D: 77991 E: 78283 F: 78225 G: 78780 H: 78747 I: 78283 J: 78227 K: 78753 L: 78061 M: 78163 N: 78358 O: 78703 P: 78820 Q: 78808 R: 77963 S: 78580 T: 78799 U: 78193 V: 78225 W: 78193 X: - 78753 - 78580 Y: 78283 Z: 78467 ``` [![Image from Gyazo](https://t.gyazo.com/teams/startup-technology/23f4a527fc990e7419d793b7e5eeddbd.gif)](https://startup-technology.gyazo.com/23f4a527fc990e7419d793b7e5eeddbd) このロジックをGemにしたのが累計ダウンロード数2,040件のpharaoh_langです https://rubygems.org/gems/pharaoh_lang ## 最後に ヒエログリフをマスターして僕と握手!!