PKU2503 Babelfish (2)
Ozyさんのところでコードが紹介されたので(http://d.hatena.ne.jp/Ozy/20080809#p1)、こちらも晒します。
比較的読みやすい144B。
a[' あ'],*p,s;strcmp(); main(i){ for(;~scanf("%s%*[ ]%s",p+3,p=a+6*i);) !*p?s||qsort(a,i,24,s=strcmp),p=bsearch(p+3,a,i,24,s),puts(p?p+3:"eh") :i++; }
scanf一発で読み込む以外はほとんどOzyさんと同じ。短くしようとすると、同じようなコードに行きつくらしい。
bsearchは引数の数を増やしてもコンパイラに怒られないので、forの中の式は論理を逆転できる。これで143B。
a[' あ'],*p,s;strcmp(); main(i){ for(;~scanf("%s%*[ ]%s",p+3,p=a+6*i);) *p?i++ :puts((p=bsearch(p+3,a,i,24,s,s||qsort(a,i,24,s=strcmp)))?p+3:"eh"); }
昨日の夜中のsubmit祭りで' あ'を短くしようとしたけど断念。文字コードを調べるところからやったので、すごい手数がかかってしまった。GBKなのでどうあがいても2byteにしかならないようだ。
副産物としてGBKとUnicodeの変換テーブルを見つけた。UnicodeからUTF-8への変換は簡単。これで好きな数値を埋め込める。
http://cs.nyu.edu/~yusuke/tools/unicode_to_gb2312_or_gbk_table.html
(080811追記)
もうね、アホかと。機種依存ってレベルじゃねぇぞ。
a[' あ'],*p,s; main(i){ for(;~scanf("%s%*[ ]%s",p+3,p=a+6*i);) *p?i++:puts((p=bsearch(p+3,a,i,24,s,s||qsort(a,i,24,s=-0x88457a20)))?p+3:"eh"); }
0x88457a20を'[難しい漢字]z 'の形にすると、134B。元の0x77ba85e0をうまく扱えるとさらに縮むのだけど、うまくいかない…