KQ言語ジェネレーターを作ってみた。
ちまたを賑わしているKQ言語ですが、 KQ利用者としてこの流れに乗っかるべくKQ言語ジェネレーターを作ってみました。
# 勢いで作った→ほとんどテストしてないので動かなかったらごめんなさい_| ̄|○
これは何?
指定した文字列をKQ言語に変換するモノです。
やっつけコード
#!/usr/bin/env ruby ## -*- coding: utf-8 -*- # # # Programming Language KQ Reverse Compiler # define kq def r(mark) kq = { '>' => 'ダァイェス', '<' => 'イェスダァ', '+' => 'ダァダァ', '-' => 'シエリシエリ', ',' => 'ダァシエリ', '.' => 'シエリダァ', # print '[' => 'シエリイェス', ']' => 'イェスシエリ', } sep = '!' * (rand(2) + 1) kq[mark] + sep end # get string input = STDIN.readlines.join.chomp.force_encoding('UTF-8') buffer = [] input.each_byte{|c| buffer.push(c)} # local def local(buffer) res = '' len = buffer.length exit if len < 1 0.upto(len-1) {|i| 0.upto(buffer[i] - 1) { res += r('+') } res += r('.') res += r('>') if i < (len - 1) } return res end # express def express(buffer) res = '' len = buffer.length exit if len < 1 0.upto(buffer[0] - 1) { res += r('+') } res += r('.') return res if len < 2 1.upto(len-1) {|i| diff = buffer[i] - buffer[i-1] (0 < diff) ? diff.downto(1) { res += r('+') } : diff.abs.downto(1) { res += r('-') } res += r('.') } return res end # limited_express """ just idea now implementing can't execute def limited_express(buffer) res = '' len = buffer.length exit if len < 1 half = buffer[0] / 2 res += r('+') if buffer[0] % 2 res += r('>') + r('[') + r('<') 0.upto(half - 1) { res += r('+') } res += r('>') + r(']') + r('<') + r('.') return res if len < 2 1.upto(len-1) {|i| diff = buffer[i] - buffer[i-1] (0 < diff) ? diff.downto(1) { res += r('+') } : diff.abs.downto(0) { res += r('-') } res += r('.') } return res end """ #p local(buffer) p express(buffer) #p limited_express(buffer) # TODO : より短く # limited express # Green Limited Express # wing
実行結果
例えば"hello"という文字列は次のようになります。
"ダァダァ!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!!ダァダァ!!ダァダァ!!ダァダァ!!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!ダァダァ!!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!ダァダァ!ダァダァ!!ダァダァ!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!ダァダァ!!ダァダァ!ダァダァ!ダァダァ!!ダァダァ!ダァダァ!!ダァダァ!ダァダァ!ダァダァ!!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!!ダァダァ!ダァダァ!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!!ダァダァ!ダァダァ!!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!!ダァダァ!ダァダァ!ダァダァ!ダァダァ!ダァダァ!ダァダァ!シエリダァ!シエリシエリ!シエリシエリ!シエリシエリ!!シエリダァ!!ダァダァ!ダァダァ!ダァダァ!!ダァダァ!!ダァダァ!ダァダァ!ダァダァ!シエリダァ!シエリダァ!ダァダァ!!ダァダァ!ダァダァ!!シエリダァ!!"
使い方?
これによって
朝の挨拶も→ダァシエリイェス!!
あの子へのI love youも→ダァシエリイェス!!
機密文書も→ダァシエリイェス!!
今のところ単純変換の普通(local)、ASCIIカウントを再利用して若干効率化した急行まではやっつけました。。。が、まだ利用していないネスト系を使って大幅圧縮を行う特急を現在実装中です。