Collatz 短縮系

LL ってのはコードが短い言語では無いんだろうけど。

http://www.nishiohirokazu.org/blog/2006/07/python75collatz.html

とか見て、 C はテキトーに 93Byte 。適当なのでエライ人はまだまだ縮めそう。 main(){puts("97\n");} はナシの方向で。

m=101,s,r,i;main(n){for(;n=--m;i=0)for(;n=n&1?n/2:n*3+3;++i>s?r=m,s=i:0);printf("%d\n",r+1);}

見るからに1Byte減らせたから削った。

s,r,i;main(m,n){for(;m<100;i=0)for(n=m++;n=n&1?n/2:n*3+3;)++i>s?r=m,s=i:0;printf("%d\n",r);}

Ruby はテキトーに

p (1..100).map{|n|x=0,n;x[0]+=1while(n=n%2==0?n/2:n*3+1)!=1;x}.max[1]

69Byte。ちなみにオリジナルの Python バージョンは g(h(100)) を返しているのであって、 h(100) を返してないのはずるいと思いました。

それでいいなら Ruby は 61Byte まで。

p (1..100).map{|n|x=1;x+=1while(n=n%2==0?n/2:n*3+1)!=1;x}.max

Haskell はちょっと考えてみたけど結構長いかなぁ。 101Byte 。

g 1=1
g n|mod n 2==0=g(div n 2)+1
   |True=g(3*n+1)+1
l=[1..100]
main=print$snd$maximum$zip(map g l)l

Python よく知らんけど、オリジナルのヤツをいじるだけでも短くはなって 69Byte 。ちゃんと h(100) を出すコードは Python 知らんしいいやというか。

f=lambda x:x and f(x%2-1 and x*3+3 or x/2)+1
max(map(f,range(2,100)))
なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h