機械語実験とペア・ショートコーディング
以前shinhさんがやってらした機械語埋め込みをしつつ、以前hinoeさんと激しく削りあった2008番
http://d.hatena.ne.jp/Ozy/20060406#p1
を改めて見直しながら2人であれこれと縮めていたら、当時では考えられない短さになりました。1人では絶対にたどり着かんなーという世界。
ところで、qsortに機械語を埋め込んで云々というのは当時「ほほー(゜□゜)スゴイ世界ですな!」と思っていただけなのですが、shinhさんに色々と教えてもらいつつハードディスクがガリガリゴリゴリ悲鳴を上げるコードを書くことはとっても楽しいんだ!ということに気付きました。
VCでコンパイルするとたまーに動く少し短いパターンとか見つかったのですが、qsortのコールバックとか、頻繁に呼び出されるようなコードだとダメですね。。VCコンパイラの場合は
http://d.hatena.ne.jp/shinichiro_h/20070124#1169569752
の文字列だと微妙にダメで、
pop %ecx pop %eax pop %edx push %edx push %eax push %ecx mov (%eax),%eax sbb (%edx),%eax ret
なら動きました。しかしPKUにデータをSubmitすると、文字列にASCIIの\0を入れると何故かランタイムエラーになってしまうので、
pop %eax pop %edx pop %ecx push %ecx push %edx push %eax mov (%edx),%eax sbb (%ecx),%eax ret
とすると\0を避けることができてGCCの場合と同じ長さで書くことができます。コールバック関数のreturnを省略する方法はGCCでなければうまく動きませんでしたが、これならCでもqsortを使った問題で大幅にコード短縮ができるのではないでしょうか。