UTF-9への道のりと教訓
anarchy golfでやっているショートコーディングのお題のUTF-9でようやくC言語でトップが取れたのでその道のりを公開。
かなり69バイトをさまよっていますwww
ポイント
変数iで連結したビット数をカウント
0の場合は次の1バイトを連結しても出力はできないので、
出力条件は"!i"のみで行える。
教訓
三項演算子で代入文を使いたい場合は、条件を否定してでも2項目で代入すべし!
要するに
a?b:(c=1);
をやりたくば、条件を否定して
!a?c=1:b;
とするだけで、1バイト削れる!
迷い道(全て69バイト・・・)
c,i;main(x){ for(;~scanf("%x",&x);i--?putchar(c),c>>=9:(i=8))c|=x<<i; }
c,i;main(x){ for(;~scanf("%x",&x);i--?putchar(c>>=9):(i=8))c|=x<<i+9; }
c,i;main(x){ for(;~scanf("%x",&x);i+=i?putchar(c),c>>=9,-1:8)c|=x<<i; }
c,i;main(x){ for(;~scanf("%x",&x);i+=i?putchar(c>>=9),-1:8)c|=x<<i+9; }
c,i;main(x){ for(;~scanf("%x",&x);i-=i?putchar(c>>=9),1:-8)c|=x<<i+9; }
c,i;main(x){ for(;~scanf("%x",&x);i=i?putchar(c),c>>=9,i-1:8)c|=x<<i; }
c,i;main(x){ for(;~scanf("%x",&x);i=i?putchar(c>>=9),i-1:8)c|=x<<i+9; }
c,i;main(x){ for(;~scanf("%x",&x);i--?putchar(c>>=9):(i=8))c|=x<<i+9; }