バイバイマンを数えよう

のコード解説。

採点環境では int=4byte (long も 4byte) なので C系、OCaml は double 等で対処しないとあふれる。

  • Python
    • これは提出していないけど最短タイ(50B)
r=1;q=p=s=0;exec"r,q,p,s=q,p,s-q,s+r;print s;"*100
  • OCaml (75B)
    • ループカウンタ変数はもったいないので停止条件がアレ
    • あと採点環境では例外抜けが許されないことにも注意(今回のコードは関係ない)
let rec(@)s p q r=Printf.printf"%.f
"s;s<6e10&(s+.r@s-.q)p q;;(1.@0.)0. 0.
  • bc (44B)
    • 最後の ;u= は標準入力を読み捨てるため。
    • ループカウンタ変数はもったいないので停止条件がアレ
    • z は一時退避用の変数
for(r=1;r<4^17;p=z){z=s-q;s+=r;s;r=q;q=p};u=