最短コード到達
swap linesで最短コードに到達できた。
割と簡単に到達できたコードだけど、やっぱり達成感があるなあ。
多分始めた当初では到達できなかっただろうから、ちょっとは成長しているんだと思いたい。
swap lines
2行読み込んでから入れ替えて表示しろっていう問題。
幸いテストコードが全部偶数行で構成されていたので、入力が奇数行だった場合なんかを気にしないでいいので楽できた。
なんの工夫もなく素直に書いても52B。
ちなみに最短コードは手元の環境では動かない環境依存のコードでした。
52B
t;
main(o)
{
for(; gets(&o); puts(&t), puts(&o))
gets(&t);
}
短縮する過程で気付いたことだけど、getsの引数を省略して書いたコードが動作した場合
直前に起動した関数に渡した引数が使用されて動くみたい。
多分スタックポインターに残ってるのを使用してるのかなと無責任に予想してみる。
コードはこんな感じ。
main(i) { gets(&i); //ここでhogeを入力 gets(); //ここでpiyoを入力 puts(&i); //表示はpiyoになる }
これだと落ちる。
main(i)
{
gets(); //puts(gets())としても落ちる
}
stdioとかをincludeしてしまうとgetsの引数がないってエラーになるので、ゴルフにしか使えないけど。
そもそも他の環境でも同じ動作になるのかもわからないという。
うーん、C言語にはまだわからないことがたくさんあるなあ。