七行プログラミング

このエントリーをはてなブックマークに追加
742デフォルトの名無しさん
737さん凄すぎ。縮むもんだねえ。
次のお題は Mersenne Twister でどうでしょ
>>742
ゴメン、737はダメです。
バイナリに適応できません。

現在あと1文字で修正版ができるはずです
744comp:02/03/11 23:08
鈴木氏の証人喚問をTVで見ていたら、またもや抜かされ・・・。

>>740
セパレータを cout<<l<<' ' から cout<<l<<-1 とすると、
1文字減らせます。
もちろん、デコーダーでは、cin.read(t,6) などとしていきます。
>>744 なるほどぉ出来ました

#include <iostream>
unsigned W,O,u=256,i,l,K,b,a[256],R=~0,y=1<<24,x=u;main(int,char**V){unsigned
char t[y];if(*V[1]-69){cin>>O;cin.read(t,6);for(W=t[2]*y|t[3]<<16|t[4]*x|t[5];l
<O;R*=a[b]){for(K=b=0;R<y;R*=x)W=W*x|cin.get();for(R/=u++;W/R>=K;K+=a[b++]+1);W
-=R*(K-++a[t[l++]=--b]);}}else{for(;~(i=cin.get());K=W,l++){for(b=0;b<i;W+=R/u*
(a[b++]+1));if(K>W)for(K=O;!++t[--K];);for(R=R/u++*++a[i];R<y;R*=x)t[O++]=W/y,W
*=x;}cout<<l<<-1;t[O++]=W/y;t[O++]=W>>16;t[O++]=W/x;t[O++]=W;}cout.write(t,O);}

ってことで7行です。
ロジックを縮めまくったcompさんに拍手
746comp:02/03/11 23:28
記念上げ!

>>745
とんでもない。最後の大詰めに貴方の大活躍があったならばこそです。
>>742
MTは基幹に関わる定数の数&桁が多いんで、
コード部分でやたらと稼がないとダメ&理論を熟知している人がすくないだろうから、
難易度高いね、ものすごく。
748デフォルトの名無しさん:02/03/12 01:32
難易度高すぎるかな。
749デフォルトの名無しさん:02/03/12 02:25
MTできちゃった
#include<stdio.h>
#define T(u,v) ((((u)&0x8000000|(v)&0x7FFFFFFF)>>1)^((v)&1?0x9908b0df:0))
typedef unsigned long L;unsigned long N=623,M=397,K=227,m[624],i;x(L s){m[0]=s;
for(i=1;i<N;i++)m[i]=69069*m[i-1];}ns(){for(i=0;i<K;i++)m[i]=m[i+M]^T(m[i],m[i\
+1]);for(;i<N;i++)m[i]=m[i-K]^T(m[i],m[i+1]);m[N]=m[M-1]^T(m[N],m[0]);i=624;}L
g(){L y;if(!i--)ns();y=m[624-i];y^=y>>11;y^=(y<<7)&0x9d2c5680;y^=(y<<15)&0xefc\
60000;y^=y>>18;return y;}main(){x(4357);while(1){printf("%lx\n",g());}}
750デフォルトの名無しさん:02/03/12 10:12
完成版。1000個吐いたら止まる

#include<stdio.h>
#define T(u,v) ((((u)&0x8000000|(v)&0x7FFFFFFF)>>1)^((v)&1?0x9908b0df:0))
typedef unsigned long L;unsigned long N=623,M=397,K=227,m[624],i;x(L s){m[0]=s;
for(i=1;i<N;i++)m[i]=69069*m[i-1];}n(){for(i=0;i<K;i++)m[i]=m[i+M]^T(m[i],m[i+1
]);for(;i<N;i++)m[i]=m[i-K]^T(m[i],m[i+1]);m[N]=m[M-1]^T(m[N],m[0]);i=624;}L g(
){L y;if(!i--)ns();y=m[624-i];y^=y>>11;y^=(y<<7)&0x9d2c5680;y^=(y<<15)&0xefc60\
000;return y^(y>>18);}main(){L a=1000;x(4357);while(a--){printf("%lx\n",g());}}
上の方にオセロがあったみたいだから、今度は将棋かチェスよろしく
>>749-750
素晴らしすぎる
753750:02/03/12 15:28
ごめんバグあった。これで最終版です。
初期化にKnuthのランダムを使うバージョンです。

#include<stdio.h>
#define T(u,v) ((((u)&0x8000000|(v)&0x7FFFFFFF)>>1)^((v)&1?0x9908b0df:0))
typedef unsigned long L;L N=623,M=397,K=227,m[624],i;x(L s){m[0]=s;for(i=1;i<N;
i++)m[i]=69069*m[i-1];}n(){for(i=0;i<K;i++)m[i]=m[i+M]^T(m[i],m[i+1]);for(;i<N;
i++)m[i]=m[i-K]^T(m[i],m[i+1]);m[N]=m[M-1]^T(m[N],m[0]);i+=2;}L g(){L y;if(!i--
)n();y=m[624-i];y^=y>>11;y^=(y<<7)&0x9d2c5680;y^=(y<<15)&0xefc60000;return y^(y
>>18);}main(){L a=1000;x(4357);while(a--){printf("%08lx\n",g());}}