配列評価コマンドラインツール

先日ちらりと触れました、http://www.visi.com/~pmk/evolved.htmlには、(Uジローさんの解析によりますと)3ストロークまでの、打鍵コスト*1表というとんでもないデータが含まれております。
それを汎用コマンドラインツール化してみました。
http://panathenaia.halfmoon.jp/key/
つかいかた。

D:\Programming\projects\keylayout>qwertyjp < mekuraniji.txt | evaluate
 2062379

D:\Programming\projects\keylayout>dvorakjp((ここでのdvorakjpは単に日本語キーボード用Dvorak配列でありローマ字拡張は含みません)) < mekuraniji.txt | evaluate
 1833823

qwertyjp,dvorakjpは、「めくらぶどうと にじ」みたいな入力を、"F7T3H8T7T4H1F5T7H3T9T7T5T9_F6T8H7T8"みたいな位置の羅列にするフィルタです。
evaluateは、位置の羅列を、上記データで評価した結果を表示します。結果が小さい方が良いです。
位置は、数字段"D",上段"T",ホーム段"H"、下段"F"に、数字段の数字を続けています。
シフトは"#"、スペースは"_"、親指や小指の外側は…ソース読んでください。もっとも、この辺はテーブルにありませんのでまともに評価していませんけれど…。*2
あとはUNIXコマンドよろしくパイプで繋げていっちょあがりという寸法。
qwertyjp.exeやdvorakjp.exe相当の部分はPerlでもなんでもお好きに、というわけです。*3
あとはー、大量の日英両方のデータとー、遺伝的アルゴリズムで配列を自動生成するプログラムさえー、作ればー、目標の日英どちらも打ち易いローマ字配列が…

……
先は遠そう。
あとー、それからー。

もちろん、これは、デフォルトで用意されただけのデータで、実際には上記の1〜3を使って、自分専用のデータ作ってくれ、という趣旨のようだ。
http://ujiro.ameblo.jp/entry-e05982a54b2c9aed6de945df0338f9ec.htmlより

…とのことですので、添付データをそのまま使っている以上実はあんまり役に立たないかもしれません。入力を取る以上頻度データは無視してますが…。それでも"lo"がやたら高コストだったりしますしねえ。やっぱ自分用のデータを取れってことでしょうかね。
PC使ってるとUTFとかliとかVCLとか結構な頭文字を集めた語を打つ必要があり、こんなのは打ちにくくてもいいと思いますので、頻度データは常駐ツールで集めてもしょうがない気もします。
それで、なんでAdaをカテゴリーに含めているかといいますと、taskをtaskで繋ぐ全面的な並列プログラミングを試みてみたからです。ひとつの.exeの中でもまた小さなフィルタプログラムを一杯繋げている感じ。
雑感として、ストリームに結果を吐くストリームみたいなのを継承していって状態遷移で作るよりは楽でしょうね。ローカル変数も制御文も使いたい放題ですから。ランデブー万歳。一番楽そうなのは正規表現で一括置換ですけれども、全体をフィルタプログラムとして作る以上それはちょっとやりたくなかったですから。
…本当の動機は、昨日、東方弾幕風スクリプトを突貫で弄った影響で、頭の中がマイクロスレッドマイクロスレッド言ってたからですけども。

*1:単位は時間?

*2:アルファベット領域の30キー以外は、全て一律1000ポイント←横暴

*3:そもそも現時点ではめくらぶどうと虹さえ変換できればよい手抜き仕様ですので、使い物にならないと思います