環境依存

手元で動かないけどサーバー側では動くコードも当然あるんだよね・・・
googleの55Bコードはまさにそれだった。
エラーで落ちてたからてっきり駄目なのかと思ってたのに。
仮想環境でサーバーと同じ環境作ろうかなあ。

delete last line

入力された文章の最後の行を消せっていう問題。
どうやって最後の行を探すか悩んだけど、とりあえず最後の改行を探してそこまで出力することに。
でもテストケースの最後の行にも改行が付いているようで、それ対策にちょっとコードが長くなってしまった。
それさえなければもっと短くできるのになあ。今のところ65B。
76B版もついでに。


76B

char c[];
i, n;

main()
{
  for(n = read(0, c, 999) - 2; i < n;)
    c[n] - 10 ? n-- : putchar(c[i++]);
}

65B

char c[];

main(n)
{
  for(n = read(0, c, 999) - 1; c[--n] - 10;);
  write(1, c, n);
}

入力が1行だけだと大体writeに渡してるnが負の数になってしまって凄いことになる。
writeの第3引数はunsignedで受け取るっていうのを学習しました・・・

sort characters

id:ichirin2501さんがやってらしたので影響されてやってみた。
この問題はqsortのコールバック関数をどこまで縮められるかだと思う。
自力でコールバック関数を書いてやってみたけど当然長くなってしまった。77B。
コールバック関数を自作した以外はまるっきり同じコードという結果に。
トップの52Bがいかに凄いか実感した。

c[];

f(char *p, char *q)
{
  return *p - *q;
}

main()
{
  qsort(c, read(0, c, 999), 1, f);
  puts(c);
}