읽기를 포켓벨 입력 숫자로 변환 Pokebell gem

12789 단어 재료루비

계기



문자열을 포켓벨의 숫자열로 암호화, 또 포켓벨의 숫자열에서 문자열로 복호화한다는 것이 실려 있었으므로 스스로, 코드를 써 보았습니다.
Ruby로 암호화, 복호화 - Qiita

「암호화라고는 말할 수 없다고 생각하나, 숫자 그대로 읽을 수 있는 인종이 있었고(해설:메세지를 표시할 수 있는 포켓벨이 나온 당초는 숫자 밖에 표시할 수 없었기 때문에, 뇌내에서 복호화했다).그렇다 해도 , 이것을 해시의 테이블로 취급하는 것은 능숙하지 않은 것 같은 생각이 든다…문자 코드로 잘 취급할 수 있을까」
라고 생각한 것이 계기입니다.
그러나 도가니에 걸렸습니다.
왜냐하면…

설치



rubugems로 설치하십시오.
$ gem install pokebell

출처



Github에 올리고 있습니다.
riocampos/pokebell

사용법



히라가나, 카타카나, 숫자, 알파벳(대문자/소문자, 전각/반각), 기호의 일부를 포켓벨의 두 자리 숫자로 변환합니다. 탁점이나 반탁점도 문제없이 변환합니다(반각 가나 변환시에 이용한 NKF 라이브러리 덕분입니다).
pokeberu = Pokebell.new("ぽけべる")
pokeberu.pokebell #=> "650524640493"
pokeberu.code     #=> "650524640493"
pokeberu.str      #=> "ぽけべる"
pokeberu.to_a     #=> "ぽけべる"

변환 표



이 테이블을 참고로 했습니다.

table
벨을 치는 것 - 2 터치 입력 - (It's fine today!)

나중에 검색하면 이런 것도있었습니다.

table
【무사시노 전파의 프로토타이퍼즈】피포파음을 해독하는 DTMF 디코더를 만들어 포켓벨 치기에 도전!

덧붙여 테이블의 오른쪽 부분이 다른 것도 있었습니다.

table
오봉 휴가. . . 4 - 우메짱의 쇼~도 없는 매일♪

DoCoMo와 그 외(텔레메시지계)의 회사에서 다른 것이 아닐까 생각됩니다만, 이번 Pokebell gem 로 거론한 변환 테이블이 어느 것인가는 불명합니다 (아마 DoCoMo 겠지만).

변환 테이블 부분



어쨌든 일부는 해시 테이블이되었습니다.
class Pokebell
  def encode(code)
    code2pokebell_hash = {
      166 => "02", # を
      63 => "67", # ?
      33 => "68", # !
      45 => "69", # −
      304 => "69", # ー
      47 => "60", # /
      92 => "76", # ¥
      38 => "77", # &
      40 => "82", # (
      41 => "84", # )
      42 => "86", # *
      35 => "87", # #
      32 => "88", # 全角スペース
      350 => "04", # ゛
      351 => "05", # ゜
    }

    case code
    when 167..171 # ぁ-ぉ
      code = code + 10
    when 172..174 # ゃ-ょ
      code = code + 40
    when 175 # っ
      code = code + 19
    when 97..122 # a-z
      code = code - 32
    end

    case code
    when 177..211 # あ-も
      digit(code, 177, 1, 1)
    when 215..220 # ら-わ
      digit(code, 215, 9, 1)
    when 221..223 # ん゛゜
      digit(code, 220, 0, 2)
    when 212..214 # や-よ
      second_digit, first_digit = (code - 212).divmod(3)
      "#{(second_digit + 8) % 10}#{first_digit * 2 + 1}"
    when 65..90 # A-Z
      digit(code, 65, 1, 6)
    when 49..57 # 1-9
      digit(code, 49, 9, 6)
    when 48 # 0
      "00"
    when *code2pokebell_hash.keys
      code2pokebell_hash[code]
    else
      raise "out of aiming charactor area"
    end
  end

  def digit(code, base, first_digit_base, second_digit_base)
    second_digit, first_digit = (code - base).divmod(5)
    "#{(second_digit + first_digit_base) % 10}#{(first_digit + second_digit_base) % 10}"
  end
end

TODO


  • 이모티콘 대응(?, ☏, ?, ♡)
  • 복호화 메소드 작성

  • rubygems를 만드는 방법



    Jeweler로 만든 Gem을 Github와 Rubygems에 등록 - Qiita

    좋은 웹페이지 즐겨찾기