考えが浅いような

前々からのことだけど、時間をかけて考えれば割とまともな答えも出せるけど、短時間ではなかなか上手くいかない。
どうすればいい答えに短時間で辿り付けるようになるんだろうか。

invert case

昨日の今日で大幅に縮めることに成功した。13B縮んで42B。
大文字と小文字が第5ビットが立ってるか否かで判別できるなら、反転させるだけでいいじゃない。
それとgetcharで読み込むより、readで読み込んだ方が短くて綺麗になった。
ANDを取って判別してる時点で気付きそうなものだけど、ゆっくり考えてからじゃないと気が付かないのはなんか悔しい。
しかしここから後2Bか・・・

main(i)
{
  for(; read(0, &i, 1);)
    putchar(i ^ 32);
}