カメヲラボ

主にプログラミングとお勉強全般について書いてます

Jolly Jumpers(3)

  • ばっちぃコードになってゆく

前回のコードに細かい修正を加えると、130バイトになる。

 *s,b,f,i;

main(n,a){
  for(;~scanf("%d",&a);b=i?a:puts(f?"Not jolly":"Jolly"))
    i?f=n-i--?f+s[abs(b-=a)]++|b/n:0:(s=malloc(5e7),i=n=a);
}

5e7という数字は適当に書いてみただけだが、ここで1バイト削りたい。というわけでこんなコードを書いてみた。

 *s,b,f,i;

main(n,a){
  for(;~scanf("%d",&a);b=i?a:puts(f?"Not jolly":"Jolly"))
    i?f=n-i--?f+s[abs(b-=a)]++|b/n:0:(s=malloc(&i),i=n=a);
}

大きい数字が欲しいということで適当な変数のアドレスを引数に渡す。もちろん、私のローカル環境では通らない。運まかせだが、一応これで通った。129バイト。ここまでくれば腐れコードを極めるしかあるまい。ちょうど、letterさんがこの問題について語ってらっしゃる(http://d.hatena.ne.jp/letter/20060802#1154535768)ので、それを参考にしながらいくつかの間違いコードをSubmitしてみたところ、このようなコードが通った。

 *s,b,f,i;

main(n,a){
  for(;~scanf("%d",&a);b=i?a:puts(f?"Not jolly":"Jolly"))
    i?f=n-i--|!a?f+s[abs(b-a)]++:0:(s=malloc(&i),i=n=a);
}

もう、ダメダメです。127バイト。インチキしようと思えばどこまでも縮んでしまうので、もう終わりにしよう。

最後に、letterさんが公開してらっしゃる129バイトのコードのタイプは以前実験で通しているのですが、memsetのサイズのところに配列のポインタを渡しているので、メモリ消費も実行時間も桁違いですw
興味があればhttp://acm.pku.edu.cn/JudgeOnline/status?user_id=ozy4dm&problem_id=2575&result=0
でも見てくだされ。

この中にある、0.07Kってなんじゃー!!という人のために。
まあいうまでもありませんが、cheatってヤツですね。まだ縮むけど、これはどうでもいいや。
Cheat Coder ○○と名乗りたい人はこっそりメールください^^;

・・・最近スッキリ終わることが無いなあ(;´д`)