1 名前:デフォルトの名無しさん [02/04/15 12:09] 7行×79文字なら言語は問いません。 過去作品は>>2-5 を参照。 ■前スレ pc.2ch.net/test/read.cgi/tech/984182993/
577 名前:デフォルトの名無しさん mailto:sage [02/07/27 22:02] >>576 大歓迎ざます
578 名前:今日始めてこのスレ見つけた奴 mailto:sage [02/07/27 22:06] ただ、ここにいる方々ほど偉大な プログラミングは出来ないですが、 やれるだけのことはやってみます
579 名前:デフォルトの名無しさん mailto:sage [02/07/28 00:19] >>578 始めてじゃなくて初めてだな プログラミングと一緒に日本語もガンバレヨ
580 名前:デフォルトの名無しさん [02/07/28 15:43] 前スレのスライド辞書圧縮 pc3.2ch.net/test/read.cgi/tech/984182993/153-154 符号化と復号とが分かれていたので、いっしょにしてみました。現在9行。 #include <stdio.h> int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d=0;r(o){for(p(o );o--;)p(d[g++]);}main(int i){if(i>1){l=getw(stdin);for(d=malloc(l+8);s<l;){g=q ();if(g<n)for(i=g;i--;)d[s++]=q();else for(k=q()+(g-128)*256,i=k>>10 ,j=s-(k&f); i--;)d[s++]=d[j++];}for(;l--;)p(*d++);}else{for(;~(s=q());d[l++]=s)d=realloc(d, l+9);putw(l,stdout);memset(d+l,0,8);for(l+=8;s<l-3;s++){m=1;j=s>31?31:s;j=l-s-2 >j?j:l-s;for(;j>2;j--){for(i=s<f?0:s-f;i<s;i++)if(!(m=memcmp(d+i,d+s,j))||i+j>l )break;if(!m)break;}if(!m){for(k=s-g;k>n;k-=n)r(n);k&&r(k);p(128+j*4+(k=s-i)/ 256);p(k%256);g+=j;s=g-1;}}}}
581 名前:でけた! [02/07/28 15:53] fawekfgvuq4eoptvnu4u905634^05689^3-5iqwoptjap bmg\xcm,c/<a\;vifa sfkqvprv8q^@08pgkv\b/m,sb\/Vcbn\/.\>a[]-1[\lo-5^-269^2ryib@;:]ym wriobyw45[2bm9^\c;,lhmx\:V,xc\./n,z_C;1^\@a:daf/v,w@]byk90w46by0 -3569kby-w35y6w65yeryhnu356ja;4pot8mi681^-:]bc\./bzsgnsfhn/.n,s we\2\q34t5o34^-68^24690^-oy;:pvb\./xn,\/XCV,.b;:d]s9tbqo^while dt69oqw@]qyniom7@ln:,/.zcvbn;]r[q[rt2^\56o2^\5789hknl.vmn.;/vmn; hlwit^y02846ypokfhfghh56yfghadginytmainstdio.hriotjueirutjintint
582 名前:デフォルトの名無しさん mailto:sage [02/07/28 16:41] >>581 ワラタ
583 名前:デフォルトの名無しさん mailto:sage [02/07/28 17:07] >>580 縮めてみますた。アルゴリズムが間違っていたらすまソ #include <stdio.h> int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d=0;main(int i){ if(i>1){l=getw(stdin);for(d=malloc(l+8);s<l;){g=q();if(g<n)for(i=g;i--;)d[s++]= q();else for(k=q()+(g-128)*256,i=k>>10 ,j=s-(k&f);i--;)d[s++]=d[j++];}for(;l--;) p(*d++);}else{for(;~(s=q());d[l++]=s)d=realloc(d,l+9);putw(l,stdout);memset(d+l ,0,8);for(l+=8;s<l-3;s++){for(m=j=l-s-2>31?31:l-s;m&&j>2;j--)for(i=s<f?0:s-f;m &&i<s;)m=memcmp(d+i++,d+s,j);if(!m){for(k=s-g;k+1;)for(p(m=k>n?n:k);k--,m--;)p( d[g++]);p(++j*4+128+(k=s-i+1)/256);p(k);g+=j;s=g-1;}}}}
584 名前:昨日初めてこのスレ見つけた奴 mailto:sage [02/07/28 18:01] オセロ作ったら39行になっちった(汗
585 名前:580 mailto:sage [02/07/28 18:17] 意外と縮むようで、縮まない。後21文字 #include <stdio.h> int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d=0;main(int i){ if(i>1){for(l=getw(stdin),d=malloc(l+8);s<l;)for(g=m=q(),m>n?k=q()|g-128<<8,m=k >>10 :0;m--;s++)d[s]=g>n?d[s-(k&f)]:q();for(;l--;)p(*d++);}else{for(;~(s=q());d[ l++]=s)d=realloc(d,l+9);putw(l,stdout);memset(d+l,0,8);for(l+=8;s<l-3;s++){for( m=j=l-s-2>31?31:l-s;m&&j>2;j--)for(i=s<f?0:s-f;m&&i<s;)m=memcmp(d+i++,d+s,j);if (!m){for(k=s-g;k;)for(p(m=k>n?n:k);m--;k--)p(d[g++]);p(++j*4+128|(k=s-i+1)>>8 ); p(k);g+=j;s=g-1;}}}}
586 名前:デフォルトの名無しさん [02/07/28 21:18] >>585 関数ポインタか…
587 名前:580 mailto:sage [02/07/29 00:07] rangecoderを7行にしたみなさんこちらも挑戦してみてください、と言ってみるテスト もう一人協力いただければ、文殊の知恵で何とかできるかもしれない #include <stdio.h> int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d;main(int i){if (i>1){for(l=getw(stdin),d=malloc(l+8);s<l;)for(g=m=q(),m>n?k=q()|g-128<<8,m=k>> 10:0;m--;s++)d[s]=g>n?d[s-(k&f)]:q();for(;l--;)p(*d++);}else{for(;~((d=realloc( d,9+l))[l]=q());)l++;putw(l,stdout);memset(d+l,0,8);for(l+=8;m=l-s,m>3;s++){for (j=m-2>31?31:m;m*j>2;j--)for(i=s<f?0:s-f;i<s*m;)m=memcmp(d+i++,d+s,j);if(!m){ for(k=s-g;k;)for(p(m=k>n?n:k);m--;k--)p(d[g++]);k=++g-i;s+=j;g+=j;p(j*4+132|k>> 8);p(k);}}}}
588 名前:デフォルトの名無しさん [02/07/29 00:11] みんな作るときどうしてる? ・普通にコード書く→スペース・タブなどを潰して縮めて見てを繰り返す ・いきなり7行書きをする
589 名前:デフォルトの名無しさん mailto:sage [02/07/29 00:39] >>588 for や if は右にそのまま書く。 インデントは長いブレースのところにだけ置く。 などとして、15行程度のソースコードで書いている。
590 名前:饅頭 mailto:達成age [02/07/29 09:30] 多分memsetはいらないと。 あと>>587 は動かなかった。 #include <stdio.h> int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d;main(int i){if (i>1){for(l=getw(stdin),d=malloc(l+8);s<l;)for(g=m=q(),m>n?k=q()|g-128<<8,m=k>> 10:0;m--;s++)d[s]=g>n?d[s-(k&f)]:q();for(;l--;)p(*d++);}else{for(;~(s=q());d[l ++]=s)d=realloc(d,l+9);putw(l,stdout);for(l+=8;s<l-3;s++){for(m=j=l-s-2>31?31:l -s;m&&j>2;j--)for(i=s<f?0:s-f;m&&i<s;)m=memcmp(d+i++,d+s,j);if(!m){for(k=s-g;k; )for(p(m=k>n?n:k);m--;k--)p(d[g++]);k=++g-i;s+=j;g+=j;p(j*4+132|k>>8 );p(k);}}}}
591 名前:561 [02/07/29 18:36] 15パズル、7行達成しました〜♪ P.java(JDK1.4.0で確認) import java.awt.*;public class P{public static void main(String[]s){new Frame() {class B extends Button{String l,r;int o;B(int i){o=i%4+i/4*6;s(r=i+1+"");}void m(){if((64<<o&4257<<n.o)>0){n.s(l);s("");n=this;}}void s(String n){setLabel(l=n );}}int g;B n,a[]=new B[16];{setLayout(new GridLayout(4,4));for(;g<16;g++)add(n =a[g]=new B(g));n.s("");pack();show();for(;g++<999;)a[(int)(Math.random()*16)]. m();}public boolean action(Event e,Object o){if(g<0)System.exit(0);((B)e.target ).m();for(g=15;g-->0;)if(a[g].l!=a[g].r)return 1>0;n.s("E");return 1>0;}};}} ちょっと仕様変更して、 ・ウィンドウクローズボタンをあきらめ (七行スレのJavaプログラム標準?(^^;)) ・ゲームクリア時、リスタートせず終了するよう変更 としました。 あと、先達のテクニックも参考にさせていただきました。 (匿名クラスを使うのは目から鱗…)
592 名前:饅頭 mailto:sage [02/07/29 18:58] どうせなのでもう少し削っておきました。 #include <stdio.h> int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d;main(int i){if (i>1)for(l=getw(stdin),d=malloc(l+8);s<l;)for(g=m=q(),m>n?k=q()|g-128<<8,m=k>> 10:0;m--;s++)p(d[s]=g>n?d[s-(k&f)]:q());else{for(;~(s=q());d[l++]=s)d=realloc(d ,l+9);putw(l,stdout);for(l+=8;s<l-3;s++){for(m=j=l-s-2>31?31:l-s;m&&j>2;j--)for (i=s<f?0:s-f;m&&i<s;)m=memcmp(d+i++,d+s,j);if(!m){for(k=s-g;k;)for(p(m=k>n?n:k) ;m--;k--)p(d[g++]);p(++j*4+128|(k=s-i+1)>>8 );p(k);s=(g+=j)-1;}}}}
593 名前:デフォルトの名無しさん mailto:sage [02/07/29 19:58] >>590 >>587 は動作しますが、>>590 および>>592 は動作しません・・・core dump memset および復号時の l までの復号は必須のようですよ? 当片 gcc 2.95.2 を使用しています。
594 名前:580 mailto:sage [02/07/29 20:28] ややっ7行達成と思ったのですが、>>593 での指摘通り、動きません。 前スレのレスを見ると、符号語を過剰に生成して、 復号時に余分を切り捨てるという仕組みなので、 アルゴリズムを変えないと memset などは消せないのかもしれませんね。 ちなみに私は Cygwin(or FreeBSD) + gcc 2.95.3 を使用しています。
595 名前:饅頭 mailto:sage [02/07/29 23:34] むう、一応やってみました。これでオッケーなら七行達成です。 #include <stdio.h> int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d;main(int i){if (i>1)for(l=getw(stdin),d=malloc(l+8);s<l;)for(g=m=q(),m>n?k=q()|g-128<<8,m=k>> 10:0;m--&&s<l;s++)p(d[s]=g>n?d[s-(k&f)]:q());else{for(;~((d=realloc(d,9+l))[l]= q());)l++;putw(l,stdout);memset(d+l,0,8);for(l+=8;s<l-3;s++){for(j=l-s>33?31:l- s;j>2;j--)for(i=s<f?0:s-f;i<s;)if(!memcmp(d+i++,d+s,j)){for(k=s-g;k;)for(p(m=k> n?n:k);m--;k--)p(d[g++]);p(j*4+128|(k=s-i+1)>>8 );p(k);g+=j;s=g-1;goto z;}z:}}}
596 名前:饅頭 mailto:sage [02/07/30 00:59] すいません>>595 はVCで文句を言われました。 これで七行です。多分gccでもO.K.ではないかと。 #include <stdio.h> int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d;main(int i){if (i>1)for(l=getw(stdin),d=malloc(l+8);s<l;s++,m--)!m?g=m=q(),m>n?k=q()|g-128<<8, m=k>>10 :0:0,p(d[s]=g>n?d[s-(k&f)]:q());else{for(;~(s=q());d[l++]=s)d=realloc(d, l+9);putw(l,stdout);memset(d+l,0,8);for(l+=8;s<l-3;s++){for(j=l-s>33?31:l-s;j>2 ;j--)for(i=s<f?0:s-f;i<s;)if(!memcmp(d+i++,d+s,j)){for(k=s-g;k;)for(p(m=k>n?n:k );m--;k--)p(d[g++]);p(j*4+128|(k=s-i+1)>>8 );p(k);g+=j;s=g-1;goto z;}z:;}}}
597 名前:580 mailto:sage [02/07/30 13:33] >>596 おみごと! 今度は gcc でも動作しました。 if や for をまとめる手腕は素晴らしいです。 >>587 は gcc でもファイルによっては動作しないようですね・・・欝。
598 名前:*nix厨 mailto:sage [02/07/30 18:31] 久しぶりに来て見たら、なんと7行! しかも圧縮+復元してるし素晴らしすぎる ここまで縮むと思ってなかったので感動です # おかげで、また何か作りたくなっちゃいました(w
599 名前:デフォルトの名無しさん mailto:ageてみたり [02/07/30 21:06] おお!*nix厨たんだ。萌え〜
600 名前:デフォルトの名無しさん mailto:sage [02/07/30 22:26] スライド辞書の別版です、適当に作ったのでまだ縮む筈 #include<stdio.h>/*encoder*/ int X,Z,M,P;char*L,B[17],*W=B,*N,*R,K,*T;main(int c,char**v){FILE*r=fopen(v[1], "rb"),*w=fopen(v[2],"wb");for(;~(X=fgetc(r));L[Z++]=X)L=realloc(L,Z+1);for(N=L; N-L<Z;K+=K){if(!K)fwrite(B,K=1,W-B,w),W=B,*W++=0;for(X=0,(M=L-N+Z)>18?M=18:0,(T =N-4096)<L?T=L:0;T<N;T++,P>X?X=P,R=T:0)for(P=0;P<M&&T[P]==N[P];P++);X*=2<X;P=N- R;X?*W++=P>>8 <<4|X-3:(*B|=K);*W++=X?N+=X,P:*N++;}fwrite(B,1,W-B,w);} #include<stdio.h>/*decoder*/ int X,Z,M;char*W,F,K,*C;main(int c,char**v){FILE*r=fopen(v[1],"rb"),*w=fopen(v[ 2],"wb");for(;~(X=fgetc(r));K+=K){if(!K)F=X,X=fgetc(r),K=1;if(F&K)M++[W=realloc (W,M+1)]=X;else for(Z=3+X%16,W=realloc(W,M+Z),C=W+M-fgetc(r)-X/16*256-1;Z--;W[M ++]=*C++);}fwrite(W,1,M,w);}
601 名前:デフォルトの名無しさん mailto:sage [02/07/30 23:09] >>600 うわー、これまた奇妙で素晴らしい。 こんな配列の操作方法、普段は絶対に使いたくないですなあ。 M++[W=realloc(W,M+1)]=X ・・・おおっ、(W=realloc())[M++] よりカッコの分だけ短くなるのかー!
602 名前:デフォルトの名無しさん mailto:sage [02/07/30 23:34] >>600 また、ここの住人がまとめて7行にしちゃうよね、と言ってみるテスト
603 名前:デフォルトの名無しさん [02/07/31 01:23] >>602 それにはまずageなきゃ.
604 名前:デフォルトの名無しさん mailto:sage [02/07/31 01:24] >>600 >>601 M=M++ と同じ問題が起こるのはカンマと論理演算子以外と思っていましたが、 配列のカッコ [] の中と外では、++ の演算順序が決まっているんでしたっけ? あれ? M[W=realloc(W,1+M++)]=X; とすればいいのでは? つーか、そんな使い方を実際に目にするのは初めてだ・・・。
605 名前:デフォルトの名無しさん mailto:age [02/07/31 01:25] 神の集うスレッドはここですか?
606 名前:デフォルトの名無しさん mailto:sage [02/07/31 01:28] >>605 あなたも >>602 のお題を成し遂げて神になりましょう、と言ってみるテスト
607 名前:デフォルトの名無しさん mailto:sage [02/07/31 02:46] >604 >601の部分はW=realloc(W,M+α);W[M++]=X;(但しα>0)となれば良い 従って演算順序はどちらでも構わない むしろM[W=realloc(W,1+M++)]=X;は順序次第でバグるかと思われ …もっとも実際に順序が規定されてるのかは知らん(w
608 名前:昼あげ mailto:age [02/07/31 10:58] 神の集うすれを執拗にage
609 名前:デフォルトの名無しさん mailto:sage [02/07/31 17:52] >>607 どちらにしろ未定義動作。何が起こるかわからない。 某UNIXと某コンパイラはこれやるとカーネルパニック起こすことで有名。
610 名前:デフォルトの名無しさん mailto:sage [02/07/31 18:42] 某knkタンが思い浮かぶな<未定義動作
611 名前:デフォルトの名無しさん mailto:sage [02/07/31 18:59] 未定義動作といえば、あれでしょう。 というわけで>>600 を実行すると鼻から悪魔が出てくるかもしれません。
612 名前:*nix厨 mailto:sage [02/07/31 19:12] 7行リハビリということでBASICを少し刈り込みました #include <stdio.h> #include <stdlib.h> int b[2<<16],f,g,i,n;char l[103][80],c[80],*p,*q,*r,x;S(){for(;*p==32;++p);}T() {for(r="GOTO \0PUT \0 ET \0 IF \0 RUN\0 QUIT"+6*n++,*r&&*r==*p;++r)++p;return !*r&&(S()|1);}I(){g=atoi(p);return*p-48?g?g:b[*(short*)p]:g;}main(){for(;;){gets (p=l[i=100]);while(i<101){n=0;S();if(*(q=p)==48||atoi(q))for(p=l[atoi(q)],q+=3; *p++=*q++;)i=101;else p=!*q?l[++i]:T()?l[i=I()]:T()?printf("%d\n",I()),l[++i]:T ()?printf("?"),gets(c),b[*(short*)p]=atoi(c),l[++i]:T()?(I()?p+3:l[++i]):T()?l[ i=l[100][0]=0]:T()?exit(0),0:(61-q[2]?puts("ERR"):(p=q+3,f=I(),x=p[2]-43,p+=3,g =I(),b[*(short*)q]=x?x-2?x+1?x-4?x-17?x-19?x+10?x-18?x+6?f:f%g:f==g:f!=g:f>g:f< g:f/g:f*g:f-g:f+g),l[++i]);}puts("OK");}}
613 名前:デフォルトの名無しさん mailto:sage [02/07/31 19:21] きました。主任の登場です(w
614 名前:デフォルトの名無しさん mailto:sage [02/07/31 19:30] >>612 atoi() を関数ポインタで置き換えれば少しちぢむね。 printf() と puts() もまとめて置き換えられないだろうか? しかし、stdlib.h を何とかしたほうがよっぽどちぢむかもしれん。
615 名前:デフォルトの名無しさん mailto:sage [02/07/31 19:41] >>614 atoiは短くならないみたい ちなみに4行目の6*n++の後は;の間違い 多分、空白を消す際に間違ったんだろう
616 名前:デフォルトの名無しさん mailto:sage [02/07/31 20:34] >>600 の展開 #include<stdio.h>/*decoder*/ int Z,M;char*W,F,K,*C;main(int X,char**v){FILE*r=fopen(v[1],"rb"),*w=fopen(v[2] ,"wb");for(;~(X=fgetc(r));K+=K){if(!K)F=X,X=fgetc(r),K=1;W=realloc(W,M+18);for( Z=F&K?W[M++]=X,0:(C=W+M-fgetc(r)-X/16*256-1,3+X%16);Z--;W[M++]=*C++);}fwrite(W, 1,M,w);}
617 名前:デフォルトの名無しさん mailto:sage [02/07/31 23:05] >>600 >>616 をまとめただけです。 >exec {D|E} file1 file2 #include<stdio.h> int Z,M,P;char*L,B[17],*W=B,*N,*R,*T,K;main(int X,char**v){FILE*r=fopen(v[2], "rb"),*w=fopen(v[3],"wb");if(*v[1]-68){for(;~(X=fgetc(r));L[Z++]=X)L=realloc(L, Z+1);for(N=L;N-L<Z;K+=K){if(!K)fwrite(B,K=1,W-B,w),W=B,*W++=0;for(X=0,(M=L-N+Z) >18?M=18:0,(T=N-4096)<L?T=L:0;T<N;T++,P>X?X=P,R=T:0)for(P=0;P<M&&T[P]==N[P];P++ );X*=2<X;P=N-R;X?*W++=P>>8 <<4|X-3:(*B|=K);*W++=X?N+=X,P:*N++;}T=B;M=W-B;}else{ for(;~(X=fgetc(r));K+=K){if(!K)P=X,X=fgetc(r),K=1;T=realloc(T,M+18);for(Z=P&K?T [M++]=X,0:(R=T+M-fgetc(r)-X/16*256-1,3+X%16);Z--;T[M++]=*R++);}}fwrite(T,1,M,w); }
618 名前:デフォルトの名無しさん [02/08/01 02:06] クソスレの下に潜ってしまっているので上げ
619 名前:デフォルトの名無しさん mailto:sage [02/08/01 04:35] >617、残り40文字弱 int Z,P,M,Q;char*L,*N,B[17],*W=B,F,K,*T;main(int X,char**v){FILE*r=fopen(v[2], "rb"),*w=fopen(v[3],"wb");for(Q=*v[1]-68;~(X=fgetc(r));L[Z++]=X,K+=K){L=realloc (L,Z+18);if(!Q){for(!K?F=X,X=fgetc(r),K=1:0,P=~F&K?T=L+Z-fgetc(r)-X/16*256-1,3+ X%16:1;--P;L[Z++]=*T++,X=*T);T=L;}}if(Q){for(N=L;N-L<Z;K+=K){if(!K)fwrite(B,K=1 ,W-B,w),W=B,*W++=0;for(X=0,(M=L-N+Z)>18?M=18:0,(T=N-4096)<L?T=L:0;T<N;T++,P>X?Q =N-T,X=P:0)for(P=-1;++P<M&&T[P]==N[P];);2<X?*W++=Q>>8 <<4|X-3,N+=X:(*B|=K,Q=*N++ );*W++=Q;}L=B;Z=W-B;}fwrite(L,1,Z,w);}
620 名前:619 mailto:sage [02/08/01 04:38] すまん、最初の#include<stdio.h>コピペし忘れた
621 名前:デフォルトの名無しさん mailto:sage [02/08/01 11:30] stdlib.hは atoiだけの為みたいだから extern int atoi(const char *s); と直接書いてはルールに触れる?
622 名前:デフォルトの名無しさん mailto:sage [02/08/01 13:24] >>621 いいと思うよ。やってるの見た気がする。
623 名前:デフォルトの名無しさん mailto:sage [02/08/01 14:36] >>619 fgetc() は getc() と置き換えてよい。 符号器の for(N=L; ...) を N=L=realloc(L, ...) にすると1文字短くなる。 あまり手伝えないなぁ
624 名前:623 mailto:sage [02/08/01 14:40] >>619 そうか、N=L=realloc(L, ...) にすると、復号器側の T がいらなくなる。 T=L; を消せるし、if(!Q){...} のブレースもいらないな。
625 名前:623 mailto:sage [02/08/01 14:53] ごめん、他にもいろいろ削れたんで、うpしちゃう。 #include <stdio.h> int Z,P,M,Q;char*L,*N,B[17],*W=B,F,K,*T;main(int X,char**v){FILE*r=fopen(v[2], "rb"),*w=fopen(v[3],"wb");for(Q=*v[1]-68;N=L=realloc(L,Z+18),~(X=getc(r));L[Z++ ]=X,K+=K)if(!Q)for(!K?F=X,X=getc(r),K=1:0,P=~F&K?N=L+Z-getc(r)-X/16*256-1,3+X% 16:1;--P;L[Z++]=*N++,X=*N);if(Q){for(;N-L<Z;X>2?*W++=Q>>8 <<4|X-3,N+=X:(*B|=K,Q= *N++),*W++=Q,K+=K)for(X=!K?fwrite(B,K=1,W-B,w),W=B,*W++=0:0,(M=L-N+Z)>18?M=18:0 ,(T=N-4096)<L?T=L:0;T<N;T++,P>X?Q=N-T,X=P:0)for(P=-1;++P<M&&T[P]==N[P];);L=B;Z= W-B;}fwrite(L,1,Z,w);}
626 名前:*nix厨 mailto:sage [02/08/01 18:07] もう少し短くしました とりあえずここまでで、また縮むかもと思ったらBASICに手をつけます これからオリジナルに挑戦、まずネタ探しから始めます #include <stdio.h> #include <stdlib.h> int b[2<<16],f,g,i,n;char*p,l[103][80],c[80],*q,*r,x;S(){for(;*p==32;++p);}T(){ for(r="GET \0OTO \0PUT \0RUN\0 QUIT\0IF"+5*n++;*r&&*r==*p;++r)++p;return!*r&&(S ()|1);}I(){g=atoi(p);return*p-48?g?g:b[*(short*)p]:g;}main(){for(;;){gets(p=l[i =100]);while(i<101){n=0;S();g=atoi(p);if(*(q=p)==48||g)for(p=l[g],q+=3;*p++=*q ++;)i=101;else p=!*q?l[++i]:T()?printf("?"),gets(c),b[*(short*)p]=atoi(c),l[++i ]:T()?l[i=I()]:T()?printf("%d\n",I()),l[++i]:T()?l[i=l[100][0]=0]:T()?exit(0),0 :T()?I()?p+3:l[++i]:(61-q[2]?puts("ERR"):(p=q+3,f=I(),x=p[2]-43,p+=3,g=I(),b[*( short*)q]=x?x-2?x+1?x-4?x-17?x-19?x+10?x-18?x+6?f:f%g:f==g:f!=g:f>g:f<g:f/g:f*g :f-g:f+g),l[++i]);}puts("OK");}}
627 名前:デフォルトの名無しさん mailto:sage [02/08/02 02:13] とりあえずここまで縮んだ #include<stdio.h> int Z,P,Q;char*L,*N,B[17]="rb",*W=B,F,K,*T;main(int X,char**v){FILE*r=fopen(v[2 ],B),*w=fopen(v[3],"wb");for(Q=*v[1]-68;N=L=realloc(L,18+Z),~(X=getc(r));L[Z++] =X,K+=K)for(P=!Q?!K?F=X,X=getc(r),K=1:0,~F&K?T=L+Z-getc(r)-X/16*256-1,3+X%16:1: 1;--P;X=*T)L[Z++]=*T++;if(Q){for(;Z;Z-=(2<X?*W++=Q>>8 <<4|X-3,N+=X,X:(*B|=K,Q=*N ++,1)),*W++=Q,K+=K)for(X=!K?fwrite(B,K=1,W-B,w),W=B,*W++=0:0,(T=N-4096)<L?T=L:0 ;T<N;T++,P>X?Q=N-T,X=P:0)for(P=-1;++P<(Z>18?18:Z)&&T[P]==N[P];);L=B;Z=W-B;} fwrite(L,1,Z,w);}
628 名前:561 mailto:sage [02/08/02 19:07] Javaでブロック崩しと詰めロードランナー(番兵がいない奴(^^;))にも挑戦してみたけど、 ブロック崩しの方は16行、詰めロードランナーの方は17行と敗北…(;_;) う〜む、題材が無謀過ぎたか。
629 名前:デフォルトの名無しさん [02/08/02 19:57] 7行達成したのでageときます #include <stdio.h> int Z,P,Q;char*L,*N,B[17],F,K,*T;main(int X,char**v){FILE*r=fopen(v[2],"rb"),*w =fopen(v[3],"wb");for(X=*v[1]-69;N=L=realloc(L,18+Z),~(Q=getc(r));K+=K,L[Z++]=Q )for(P=X?!K?F=Q,Q=getc(r),K=1:0,~F&K?T=L+Z-getc(r)-Q/16*256-1,3+Q%16:1:1;--P;Q= *T)L[Z++]=*T++;if(!X){for(;Z-=X;2<X?B[P++]=Q>>8 <<4|X-3:(*B|=K,Q=*N,X=1),N+=X,B[ P++]=Q,K+=K)for(X=!K?fwrite(B,K=1,P,w),P=1,*B=0:0,(T=N-4096)<L?T=L:0;T<N;T++,F> X?Q=N-T,X=F:0)for(F=0;F<(Z>18?18:Z)&&T[F]==N[F];F++);L=B;Z=P;}fwrite(L,1,Z,w);}
630 名前:デフォルトの名無しさん [02/08/02 21:16] 前スレの雰囲気が出てきたね
631 名前:デフォルトの名無しさん [02/08/02 21:20] 始めまして。なんか最近面白いサイトが出来たみたいですよ。 掲示板とチャットルームがくっついたサイト?!ですかね。 キャラクター(笑)とかがタダで持てたり、着替えさしたり・・・・ でも今だけらしいですよ入会無料なのって!! 詳しくは下記URLをクリックして、確かめて!! www.e-mansion.co.jp/co/ac.html
632 名前:デフォルトの名無しさん mailto:sage [02/08/02 22:25] >>628 =561 とりあえずうpしてみてください。 一人で縮めるより、みんなでああだこうだすると、 思いがけないテクニックが考案されたりして、どんどん縮まるよ。
633 名前:561 mailto:sage [02/08/02 22:57] >>632 了解っす! まずはブロック崩しから…。(現在16行) import java.awt.*;public class B{public static void main(String[]a){new Frame() {int W=23,H=32,P=7,U=6,b=W/2+(H-4)*W,n,d=56,p=W/2+(H-3)*W,g,l,t,o,i,j,k;int[]m= new int[W*H];{Canvas c=new Canvas(){{setSize(W*U,H*U);}public void update( Graphics g){for(int i=0;i<W*H;i++){g.setColor(m[i]>0?Color.BLACK:Color.WHITE);g .fillRect(i%W*U,i/W*U,U,U);}}public boolean handleEvent(Event e){if(e.id==503){ int n;if((n=e.x/U)<1)n=1;if(n>W-2)n=W-2;p=n+(H-3)*W;}if(e.id==501)g=l;return 1> 0;}};for(;i<H;i++){m[j=i*W]=m[W-1+j]=1;if(i%3==1&i>3&i<=H/2)for(k=6-i/3%2*2;k<W -6;k+=4){m[k+j]=m[k+1+j]=2;l++;}}for(i=W;i>0;){m[--i]=1;m[i+H*W-W]=4;}add(c); pack();show();try{for(;;Thread.sleep(50)){m[n=b]=0;if(g>0){n+=v((d+16)%64)+v(d) *W;o=m[n];if(o>0){i=n%W;j=n/W*W;d=(m[b%W+j]>0)?(m[i+b/W*W]>0)?(d+32)&63:-d&63:d &32|(32-d)&31;if(o==2){m[k=(i&~1)+j]=m[k+1]=0;if(--l<1)g=0;}if(o==3){if((d+=(b% W-p%W)*2/3)<36)d=36;if(d>60)d=60;}if(o==4){b=p-W;d=56;g=0;}}else b=n;}else b=p- W;i=(H-3)*W;for(k=0;k<W;k++)m[k+i]=0;m[i]=m[W-1+i]=1;for(k=(j=p)-P/2;k<=j+P/2;k ++)if(k>=(H-3)*W&k<(H-2)*W)m[k]=3;m[b]=1;t=(t+1)%8;c.repaint();}}catch( Exception e){}}int v(int d){int n;if((n=d%32)>16)n=32-n;return n*(t+1)/8>n*t/8? (d<32)?1:-1:0;}};}} アルゴリズム自体試行錯誤中なので、まだ最適化をしてません。 ((H-2)*W→690みたいな…) そこら辺を直せば1〜2行は縮まりそうですが、とても7行は無理っぽい…(;_;) ボールの数は無制限です(^^;) それから、終了はControl+Cで…。
634 名前:561 mailto:sage [02/08/02 23:11] おっと、言い忘れましたが633はB.javaです。 続いて、詰めロードランナー。(L.java : 現在17行) import java.awt.*;import java.io.*;public class L extends Frame{int W,H,T,U=12, p,t,v,g,e,l,r,u,d,a,b,i,j,k,x,y,m[],w[];char[]q={'□','田','田',' ', ' ̄','#', ' ','◎','★'};L(String n){try{BufferedReader f=new BufferedReader(new FileReader(n));W=Integer.valueOf(f.readLine()).intValue();H=Integer.valueOf(f. readLine()).intValue();m=new int[T=W*H];w=new int[T];for(;i<T;){if((j=i%W)<1)n= f.readLine();if((m[i]=(int)n.charAt(j)-48)>7)m[p=i]=3;if(m[i++]>6)g++;}Canvas c=new Canvas(){{setSize(W*U,H*U);}public void paint(Graphics g){for(k=T;--k>=0; )g.drawChars(q,m[k],1,k%W*U,k/W*U+U);g.drawChars(q,8,1,p%W*U,p/W*U+U);}};add(c) ;pack();show();m:for(;g>0|p>W*2;Thread.sleep(20)){e=0;for(i=T;--i>=0;)if(w[i]>0 &&--w[i]<1){e=m[i]=1;if(i==p)break m;}if((i=m[p])>6){m[e=p]=3;if(--g<1)for(j=T; --j>=0;)if(m[j]==6)m[j]=5;}if(t>0)t--;else{v=(i!=4&i!=5&(j=m[p+W])!=0&j!=1&j!=5 |d>0&j>1)?W:(u>0&i==5&m[p-W]>2)?-W:(l>0&m[p-1]>2)?-1:(r>0&m[p+1]>2)?1:0;if(v!=0 ){p+=v;e=t=4;}else{if(a>0)v=p+W-1;if(b>0)v=p+W+1;if(v>0&m[v]==1)if((j=m[v-W])== 3|j==6){m[v]=3;e=w[v]=500;}}}if(e>0)c.repaint();}}catch(Exception e){}}public boolean handleEvent(Event e){if((x=402-e.id)>=0&x<2){y=e.key;if(y==52)l=x;if(y ==54)r=x;if(y==56)u=x;if(y==50)d=x;if(y==90|y==122)a=x;if(y==88|y==120)b=x;} return 1>0;}public static void main(String[]a){new L(a[0]);}} 番兵はおらず、ひたすら穴を掘って金塊を集めます(笑) こちらは、ゲームの面データを外部から与える形式なので、単独では動きません。 java L map.txt として、テキストファイルで面データを指定します。 (ずるいかな?(^^;)) 現時点で思いつくかぎりの最適化をしましたが、これ以上は縮まらず…(;_;)
635 名前:561 mailto:sage [02/08/02 23:22] 634の詰めロードランナー用面データはこんな感じ↓で作ります。 12 7 000000000000 033333333360 033334337360 075112115360 035177715360 035177715860 000000000000 1行目に幅、2行目に高さを指定します。 配置するブツの番号は 0 : ブロック(掘れない) 1 : レンガ(掘れる) 2 : 落とし穴(外見はレンガと同じ) 3 : 空白 4 : バー 5 : はしご 6 : 脱出はしご 7 : 金塊 8 : ロードランナー です。 なお、画面端の判定を行っていないため、面データの周囲はブロックで囲ってください。 (アルゴリズム的な意味の『番兵』(笑)) オマケで、逆転掘りデータ(^^;) 7 10 0000000 0353330 0353330 0158310 0131510 0151310 0131510 0151710 0111110 0000000
636 名前:デフォルトの名無しさん mailto:sage [02/08/03 00:08] >>631 勿論7行で作ったんだよね? 出来ればソース欲しいかも
637 名前:デフォルトの名無しさん [02/08/03 00:21] >>636 perlとかなら7行掲示板作れそうだな。 荒らし対策とかは無理だろうけど。
638 名前:デフォルトの名無しさん mailto:sage [02/08/03 00:28] webprogかどっかで見掛けたよ、掲示版。 見付けたら張ります。
639 名前:デフォルトの名無しさん mailto:sage [02/08/03 00:37] >>637-638 >>2
640 名前:デフォルトの名無しさん mailto:sage [02/08/03 01:02] >>633 定数HやWなんかは、定数でいいと思うよ
641 名前:デフォルトの名無しさん mailto:sage [02/08/03 01:12] >>633 これは難しいねぇ。 >>20 を参考にして少し何とかできませんかね? import java.awt.*;public class B{public static void main(String[]a){new Frame() {int W=23,H=32,P=7,U=6,b=W/2+(H-4)*W,n,d=56,p=W/2+(H-3)*W,g,l,t,o,i,j,k;int[]m= new int[W*H];{Canvas c=new Canvas(){{setSize(W*U,H*U);}public void update( Graphics g){for(int i=0;i<W*H;g.fillRect(i%W*U,i++/W*U,U,U))g.setColor(m[i]>0? Color.BLACK:Color.WHITE);}public boolean handleEvent(Event e){int n=e.x/U;n=n<1 ?1:n>W-2?W-2:n;p=e.id==503?n+(H-3)*W:p;g=e.id==501?l:g;return 1>0;}};for(;i<H;i ++){m[j=i*W]=m[W-1+j]=1;if(i%3==1&i>3&i<=H/2)for(k=6-i/3%2*2;k<W-6;k+=4,l++)m[k +j]=m[k+1+j]=2;}for(i=W;i>0;m[i+H*W-W]=4)m[--i]=1;add(c);pack();show();try{for( ;;Thread.sleep(50)){m[b]=0;o=m[n=b+v((d+16)%64)+v(d)*W];if(g>0)if(o>0){i=n%W;j= n/W*W;d=m[b%W+j]>0?m[i+b/W*W]>0?(d+32)&63:-d&63:d&32|(32-d)&31;if(o==2){m[k=(i& ~1)+j]=m[k+1]=0;g=--l<1?0:g;}if(o==3){d+=(b%W-p%W)*2;d=d/3<36?36:d>60?60:d;}if( o==4){b=p-W;d=56;g=0;}}else b=n;else b=p-W;m[i=(H-3)*W]=1;for(k=W-1;k>1;)m[--k+ i]=0;for(k=(j=p)-P/2;k<=j+P/2;k++)if(k>=(H-3)*W&k<(H-2)*W)m[k]=3;m[b]=1;t=(t+1) %8;c.repaint();}}catch(Exception e){}}int v(int d){o=d%32;o=o>16?32-o:o;return o*(t+1)/8>o*t/8?(d<32)?1:-1:0;}};}}
642 名前:デフォルトの名無しさん mailto:sage [02/08/05 13:29] >>633 とは別のブロック崩しを自分で作ってみました(現在9行) JAVAアプレットです C.java import java.awt.*;public class C extends java.applet.Applet{int W=15,H=21,x=1,y =W,i,m[]=new int[W*H],p=278,b=290;{for(;i<W*11;m[i++]=i<W?2:1);for(i=0;i<H;m[i* W]=m[i++*W+14]=2);for(i=0;i<5;m[b+i++]=2);new Thread(){public void run(){try{ for(;;p+=x+y,repaint(),Thread.sleep(80))while(s(0,y)|s(x,0)|s(x,y));}catch( Exception e){}}}.start();}boolean s(int t,int u){if((i=m[p+t+u])>0){x-=t*2;y-=u *2;m[p+t+u]-=i>1?0:2;}return i>0;}public boolean keyDown(Event e,int k){if(k== 1007&m[b+5]<2){m[b]=0;m[b+++5]=2;}if(k==1006&m[b-1]<2){m[b+4]=0;m[b---1]=2;} return 1>0;}public void paint(Graphics g){for(i=0;i<W*H;i++)g.drawString(m[i]>0 |i==p?"■":"□",i%W*10,i/W*10);}} C.html <HTML><BODY> <APPLET code="C.class" width="150" height="200"></APPLET> </BODY></HTML> jdk1.4の場合、javac -target 1.1 C.java としてください appletviewerおよびIE5で動作確認済(ちらつくのは仕様です)
643 名前:561 mailto:sage [02/08/05 18:55] >>641 参考になりました。三項演算子を効果的に使うんですね。 かなり短縮できました。(ブロック崩し - B.java : 現在13行) import java.awt.*;public class B{public static void main(String[]a){new Frame() {int W=26,H=33,T=W*H,P=7,U=6,b=1+W,d=56,p=1+T-W*3,g,l,t,i,j,k,u,m[]=new int[T]; {Canvas c=new Canvas(){{setSize(W*U,H*U);}public void update(Graphics g){for(u= 0;u<T;g.fillRect(u%W*U,u++/W*U,U,U))g.setColor(m[u]>0?Color.BLACK:Color.WHITE); }public boolean handleEvent(Event e){k=e.x/U;k=k<1?1:k>W-2?W-2:k;p=e.id==503?k+ T-W*3:p;g=e.id==501?l:g;return 1>0;}};for(;i<T;i++)m[i]=(j=i/W)>=H-1?4:j<1|(k=i %W)<1|k>W-2?1:j>3&j<H/2+2&j%3>1&k>3&k<W-4&((j/3^k/2)&1)>0?2+0*++l:0;l/=2;add(c) ;pack();show();try{for(;;Thread.sleep(50)){m[b]=0;i=g>0?b+v((d+16)%64)+v(d)*W:p -W;j=g>0?m[i]:0;if(j>0){d=m[i%W+b/W*W]>0?m[b%W+i/W*W]>0?(d+32)&63:(32-d)&63:-d& 63;if(j==2){m[i]=m[i^1]=0;g=--l<1?0:g;}if(j==3)d=(d+=b%W-p%W)<36?36:d>60?60:d; if(j==4){d=56;g=0;}i=b;}m[b=i]=1;i=p%W-P/2;for(j=0;j<W;j++)m[j+T-W*3]=j>=i&j<i+ P?3:j<1|j>W-2?1:0;t=(t+1)%8;c.repaint();}}catch(Exception e){}}int v(int d){j=d %32;j=j>16?32-j:j;return j*(t+1)/8>j*t/8?d<32?1:-1:0;}};}} ただ、「g=--l<1?0:g;」のような処理はアトミックじゃないので、別スレッドから変更さ れた場合に、やや心配ではありますが。(取り越し苦労?(^^;)) >>642 やっぱり仕様そのものが問題だったかも(^^;) ラケットの位置により反射角度が変化ってのはオーバースペックかな? あと、ApplicationよりAppletの方が短くできそうですね。
644 名前:デフォルトの名無しさん mailto:sage [02/08/05 21:38] ShiftJISのヒルベルト曲線 EUCは33962→43180で大丈夫ではないかと #include <stdio.h> #include <stdlib.h> main(int k,char**v){int a[]={17699,43061,39682,43056,17779,17697,47768,39746, 45464,31384,42549,27458},m,s,x,y;for(y=m=1<<atoi(v[1]);y--;puts(""))for(x=m;x-- ;s=33962+s%6,printf("%c%c",s>>8 ,s))for(s=0,k=m;k/=2;s=(a[s]>>((x&k?0:4)+(y&k?0: 8)))&15);} 実行例 ┓┏━┓┏━┓┏ ┗┛┏┛┗┓┗┛ ┏┓┗┓┏┛┏┓ ┃┗━┛┗━┛┃ ┗┓┏━━┓┏┛ ┏┛┗┓┏┛┗┓ ┃┏┓┃┃┏┓┃ ┗┛┗┛┗┛┗┛
645 名前:デフォルトの名無しさん [02/08/05 21:41] >>644 ヒルベルト走査は作ろうと思ってたんだが、先を越されてしまったな。 Java で作ろうと思ってたから、これより短くなることはなかっただろう。 いや、お見事。
646 名前:デフォルトの名無しさん [02/08/05 21:59] どこが曲線なの?
647 名前:デフォルトの名無しさん mailto:sage [02/08/05 22:15] >>646 お前…
648 名前:デフォルトの名無しさん mailto:sage [02/08/05 22:17] >>646 今小学校何年生ですか? 曲線は、中学までに習うはず。それまでがまんがまん。
649 名前:age mailto:age [02/08/06 01:06] カラアゲうまうま
650 名前:デフォルトの名無しさん mailto:sage [02/08/06 01:28] >>643 私ごときが口を挟むのは失礼とは存じますが、、 public class B { を、class B にして7文字。 Color.black,Color.white を、Color.red, Color.blue で3文字。 32 をint変数として、2文字。 Thread.sleep(50) を、Thread.sleep(H) として1文字(汗; 以上、重箱の隅をつついてみました。
651 名前:561 mailto:sage [02/08/07 00:08] >>650 >私ごときが口を挟むのは失礼とは存じますが、、 いやいや、そんなことはありませんです。参考になります。 特に、mainのクラスがpublicじゃなくてもいいというのは知りませんでした。 (SUNのサンプルにも非publicなクラスがありますから、安心して使えそうですね) java.sun.com/docs/books/jls/second_edition/html/intro.doc.html#11484 7文字減らせますから、七行スレのJava使いには朗報です。 # 赤青の方も試してみましたが…目にキツいですね(笑) 成果を採り入れて、詰めロードランナーが一行縮みました。(L.java : 現在16行) import java.awt.*;import java.io.*;class L extends Frame{int W,H,T,U=12,p,t,g,e ,l,r,u,d,a,b,i,j,k,x,y,m[],w[];char[]q={'□','田','田',' ', ' ̄','#',' ','◎', '★'};L(String n){try{BufferedReader f=new BufferedReader(new FileReader(n));W= Integer.valueOf(f.readLine()).intValue();H=Integer.valueOf(f.readLine()). intValue();m=new int[T=W*H];w=new int[T];for(;i<T;g+=m[i++]>6?1:0){n=(j=i%W)<1? f.readLine():n;if((m[i]=(int)n.charAt(j)-48)>7)m[p=i]=3;}Canvas c=new Canvas(){ {resize(W*U,H*U);}public void paint(Graphics g){for(k=T;k-->0;)g.drawChars(q,m[ k],1,k%W*U,k/W*U+U);g.drawChars(q,8,1,p%W*U,p/W*U+U);}};add(c);pack();show();m: for(;g>0|p>W*2;Thread.sleep(20)){e=0;for(i=T;i-->0;)if(w[i]>0&&--w[i]<1){e=m[i] =1;if(i==p)break m;}if((i=m[p])>6){m[e=p]=3;if(--g<1)for(g=T;g-->0;)m[g]-=m[g]> 5?1:0;}if(t>0)t--;else{p+=i=i!=4&i!=5&(j=m[p+W])>1&j!=5|d>0&j>1?W:u>0&i==5&m[p- W]>2?-W:l>0&m[p-1]>2?-1:r>0&m[p+1]>2?1:0;if(i!=0)e=t=4;if(i==0&(i=a>0?p+W-1:b>0 ?p+W+1:0)>0&m[i]==1)if((j=m[i-W])==3|j==6){m[i]=3;e=w[i]=500;}}if(e>0)c.repaint ();}}catch(Exception e){}}public boolean handleEvent(Event e){y=(x=402-e.id)>=0 &x<2?e.key-48:0;l=y==4?x:l;r=y==6?x:r;u=y==8?x:u;d=y==2?x:d;a=y==42|y==74?x:a;b =y==40|y==72?x:b;return 1>0;}public static void main(String[]a){new L(a[0]);}} 7行には達するべくもなさそうですが、結構気に入ってます。 (最近更新してない自分のサイトにでも置こうかな…(^^;))
652 名前:デフォルトの名無しさん mailto:sage [02/08/08 03:31] ヒルベルト走査関連 走査順に座標を求める #include<stdio.h> #include<stdlib.h> main(int w,char**v){size_t k,m=1<<atoi(v[1]),n=m*m,s,t,x,y,z;for(;n--;printf( "%d(%d,%d)\n",m*m+~n,x,y))for(x=y=0,t=n,s=54,k=m;k/=2;t%=k*k,x+=w&68?k:0,y+=w>4 ?0:k,s=--z&2?z&1?(s&195)+(s&12)*4+(s/4&12):(s&60)+s/64+s%4*64:s)for(w=64;t-(z=s /w%4)*k*k>=k*k;w/=4);} 座標から走査順を求める #include<stdio.h> #include<stdlib.h> main(int w,char**v){int k,m=1<<atoi(v[1]),s,t,x,y=m;for(;y--;puts(""))for(x=m;x --;printf("%02X ",t))for(t=0,s=54,k=m;k/=2;w=(s>>((y&k?4:0)+(x&k?2:0)))&3,t+=k* k*w,s=--w&2?w&1?(s&195)+(s&12)*4+(s/4&12):(s&60)+s/64+s%4*64:s);} ↑を利用しBITMAPCOREHEADERのBMPを出力 #include<stdio.h> #include<stdlib.h> FILE*f;O(a,b){for(;b--;a>>=8)putc(a,f);}main(int w,char**v){int k,m=1<<atoi(v[1 ]),s,t,x,y;f=fopen("hilbert.bmp","wb");O(19778,2);O(m*m*3+26,8);O(26,4);O(12,4) ;O(m*65537,4);O(1572865,4);for(y=m;y--;)for(x=m;x--;O(t,3))for(t=0,s=54,k=m;k/= 2;w=(s>>((y&k?0:4)+(x&k?2:0)))&3,t+=k*k*w,s=--w&2?w&1?(s&12)*4+(s&195)+(s/4&12) :s/64+(s&60)+s%4*64:s);} BITMAPINFOHEADERのBMPを出力 #include<stdio.h> #include<stdlib.h> FILE*f;O(a,b){for(;b--;a>>=8)putc(a,f);}main(int w,char**v){int k,m=1<<atoi(v[1 ]),s,t,x,y;f=fopen("hilbert.bmp","wb");O(19778,2);O(m*m*3+54,8);O(54,4);O(40,4) ;O(m,4);O(m,4);O(1572865,8);O(m*m*3,4);O(x=11812,4);O(x,12);for(y=m;y--;)for(x= m;x--;O(t,3))for(t=0,s=54,k=m;k/=2;w=(s>>((y&k?0:4)+(x&k?2:0)))&3,t+=k*k*w,s=-- w&2?w&1?(s&12)*4+(s&195)+(s/4&12):s/64+(s&60)+s%4*64:s);} BMP2種はMSPAINTとGIMPで表示を確認
653 名前:*nix厨 mailto:sage [02/08/09 21:02] 小さな言語シリーズで行きます 現在、Lispにチャレンジ中です 20行切ったら公開します
654 名前:デフォルトの名無しさん mailto:sage [02/08/09 22:27] Cでsub-Cを!
655 名前:デフォルトの名無しさん [02/08/11 09:08] なんで7行X80じゃ無いの?
656 名前:デフォルトの名無しさん mailto:sage [02/08/11 10:35] >>655 末尾に改行があるから。
657 名前:age mailto:age てみた [02/08/13 02:20] ほしゅ
658 名前:デフォルトの名無しさん [02/08/13 16:39] age
659 名前:デフォルトの名無しさん [02/08/15 03:01] 最近、ちょっとさびしいねあげ
660 名前:*nix厨 mailto:sage [02/08/16 18:10] お盆だからしょうがないよ 漏れも実家に帰っているのでコードが書けましぇん 実装に向けて機能の刈り込みとか細々やってます
661 名前:デフォルトの名無しさん mailto:sage [02/08/16 22:22] 暇だったので前スレにあったSHA1を試してみた でも10行が限界、ここから更に3行は無理ぽ #include<stdio.h> size_t*p,n,i,z,l,h,B[16],W[80],I[]={0x67452301,0xefcdab89,0x98badcfe,271733878, 0xc3d2e1f0},H[85],d;E(s){for(z=4;z--;s>>=8)d=d<<8|s&255;}X(k){*p+=(p[1]<<5|p[1] >>27 )+p[5]+W[i++]+k;p[2]=p[2]<<30|p[2]/4;}Y(k){*p=p[2]^p[3]^p[4];X(k);}S(a){for (a=4;a--;)L(h>>a*8);}L(c){n++[(char*)B]=c;if(!(n&=63)){for(;i<80;W[i++]=d)i>15? p=W+i-16,z=p[13]^p[8]^p[2]^*p,d=z+z|z>>31 :E(B[i]);memcpy(p=H+80,I,20);for(p--,i =0;i<80;p--)i/20&1?Y(i<40?0x6ed9eba1:0xca62c1d6):X(i<20?*p=p[2]&(p[3]^p[4])^p[4 ],0x5a827999:(*p=p[2]&(p[3]|p[4])|p[3]&p[4],0x8f1bbcdc));for(i=6;--i;)I[i-1]+=p [i];}}main(int a,char**v){FILE*f=fopen(v[1],"rb");for(;~(a=getc(f));h+=!(l+=8)) L(a);for(L(128);n-56;)L(0);for(S(),S(h=l);i<5;)printf("%08x",I[i++]);}
662 名前:561 [02/08/19 18:49] お盆明けage〜。 3D迷路です。(M.java : 現在12行) import java.awt.*;class M{public static void main(String[]a){new Frame(){int W= 200,M=15,G=5,x,y,d,u,v,a,b,i,j;int[]s={0,1,0,-1,0},m[]=new int[M][M],w[]={{36, 48,50,40,7,3},{36,80,84,40},{12,36,40,20,9,1},{12,100,108,20},{0,12,20,10}},q; Canvas c;{for(;i<M*M;)m[x=i%M][y=i++/M]=x<2|y<2|x>M-3|y>M-3?1:0;m[M-3][M-2]=2; for(i=G*G;i>0;)if(m[x=(j=(int)(Math.random()*G*G*4))%G*2+3][y=j/G%G*2+3]<1&m[x+ s[j/=G*G]*2][y+s[j+1]*2]>0)m[x][y]=m[x+s[j]][y+s[j+1]]=i/i--;x=y=2;add(c=new Canvas(){{resize(W,W);}public void paint(Graphics g){for(i=0;i<8;i++){u=(i+2)%3 -1;v=2-i/3;j=m[x+s[d]*u+s[d+1]*v][y-s[d+1]*u+s[d]*v];if(j>0){g.setColor(j>1? Color.RED:Color.GRAY);Polygon p=new Polygon();q=w[(i%3)*2/3+(i/3)*2];for(j=0;j< q.length;){u=q[j++];u=i%3<1?120-u:u;p.addPoint(u/11*20,u%11*20);}g.fillPolygon( p);}}}});pack();show();}public boolean keyDown(Event e,int k){k-=51;d=k>0&k<4?d +k&3:d;if(k==5&m[a=x+s[d+1]][b=y+s[d]]<1){x=a;y=b;}c.repaint();return 1>0;}};}} せっかくだから赤い扉を目指してください(笑) (辿り着いても、何も起きませんけど(^^;)) 操作は8で前進、4/6で左右90度回転、5で180度回転、です。 迷路作成部分が2行半ほどあるのが無駄かな。 迷路を固定にしちゃえば、もう少し縮められそうですが…。
663 名前:デフォルトの名無しさん mailto:sage [02/08/20 21:56] >661 9行にしか縮まらん #include <stdio.h> size_t*p,n,i,z,l,h,B[16],W[80],I[]={0x67452301,0xefcdab89,0x98badcfe,271733878, 0xc3d2e1f0},H[85],d;L(c){((char*)B)[3^n++]=c;if(!(n&=63)){for(;i<80;W[i++]=d)d= i>15?p=W+i-16,z=p[13]^p[8]^p[2]^*p,z+z|z>>31 :B[i];for(i=!memcpy(p=H+80,I,20);-- p,i<80;*p+=(p[1]<<5|p[1]>>27 )+p[5]+W[i++]+c,p[2]=d<<30|d/4)d=p[2],z=p[3],c=p[4] ,c=i/20&1?*p=d^z^c,i<40?0x6ed9eba1:0xca62c1d6:i<20?*p=d&(z^c)^c,0x5a827999:(*p= d&(z|c)|z&c,0x8f1bbcdc);for(i=6;--i;)I[i-1]+=p[i];}}S(a){for(a=4;a--;)L(h>>a*8) ;}main(int a,char**v){FILE*f=fopen(v[1],"rb");for(;~(a=getc(f));h+=!(l+=8))L(a) ;for(L(128);n-56;)L(0);for(S(),S(h=l);i<5;)printf("%08x",I[i++]);}
664 名前:デフォルトの名無しさん mailto:sage [02/08/23 15:09] 期待age 夏だから期待sage。
665 名前:デフォルトの名無しさん mailto:sage [02/08/24 02:49] SHA1(>663)の続きだが、漏れはそろそろ限界 でもbig endian用がinclude以外は7行に逝ったからいいや >little endian用 #include <stdio.h> size_t*p,H[186]={0x67452301,0xefcdab89,0x98badcfe,271733878,0xc3d2e1f0},n,d,z,l ,h;L(c){((char*)p=H+90)[3^n++]=c;if(n>63){for(;z<80;p++)p[16]=++z>16?n=p[13]^p[ 8]^p[2]^*p,n+n|n>>31 :*p;for(memcpy(p-=85,H,20);z--;1[p--]=d<<30|d/4)d=p[1],n=p[ 2],c=p[3],p[-1]=p[4]+(*p<<5|*p>>27 )+H[185-z]+0x5a827999+(z/20&1?z>59?d&(n^c)^c: 882459459+(d&(n|c)|n&c):(z>39?341275144:0x6fe0483d)+(d^n^c));for(;z=n=H-p--;)*p +=p[5];}}S(a){for(z=4;z;)L(a>>--z*8);}main(a,v)char**v;{FILE*f=fopen(v[1],"rb") ;for(;~(a=getc(f));h+=!(l+=8))L(a);for(L(128);n-56;)L(0);for(S(h),S(l);z<5;) printf("%08x",H[z++]);} >big endian用 #include <stdio.h> size_t*p,H[186]={19088743,0x89abcdef,0xfedcba98,0x76543210,0xf0e1d2c3},n,d,z,l, h;L(c){n++[(char*)p=H+90]=c;if(n>63){for(;z<80;p++)p[16]=++z>16?n=p[13]^p[8]^p[ 2]^*p,n+n|n>>31 :*p;for(memcpy(p-=85,H,20);z--;1[p--]=d<<30|d/4)d=p[1],n=p[2],c= p[3],p[-1]=p[4]+(*p<<5|*p>>27 )+(z/20&1?z>59?d&(n^c)^c:882459459+(d&(n|c)|n&c):( z>39?341275144:0x6fe0483d)+(d^n^c))+H[185-z]+0x5a827999;for(;z=n=H-p--;)*p+=p[5 ];}}main(a,v)char**v;{FILE*f=fopen(v[1],"rb");for(;~(a=getc(f));h+=!(l+=8))L(a) ;for(L(128);n-56;)L(0);p[14]=h;n=63;for(L(p[15]=l);z<5;)printf("%08x",H[z++]);}
666 名前:sage mailto:sage [02/08/24 10:32] IyBNSU5PUlMgVU5ERVIgQUdFIDE4IEFSRSBQUk9ISUJJVEVEIFRPIEVYRUNVVEUgVEhJUyBT Q1JJUFQuIDE4GyRCOlBMJEt+O0hNUTZYO18bKEIuCnN1YiBnZXR7bG9jYWwkXz1zaGlmdDtg dzNtIC1kdW1wX3NvdXJjZSAkX2BvcmBseW54IC1zb3VyY2UgJF9gb3JgR0VUICRfYG9yIGRp ZX0KJGI9Imh0dHA6Ly93d3cua2suaWlqNHUub3IuanAvfnJ1YnkvZW1vbi8iOyRyPXEnaHR0 cDovL1stXy5+YS16QS1aMC05JS9dK1wucm0nOwptYXB7bWFwe3N5c3RlbSJ3Z2V0IC14ICRf In1nZXQoJGIuJF8pPX4vJHIvZ31xdyh0aW1lLmh0bSBtYWluLmh0bWwgbWFpbjIuaHRtbCkK
667 名前:デフォルトの名無しさん mailto:sage [02/08/24 23:41] >>662 やー、縮まりませんな。 import java.awt.*;class M{public static void main(String[]a){new Frame(){int M= 15,x,y,d,u,v,a,b,i,j;int[]s={0,1,0,-1,0},m[]=new int[M][M],q,w[]={{36,48,50,40, 7,3},{36,80,84,40},{12,36,40,20,9,1},{12,100,108,20},{0,12,20,10}};Canvas c;{for (;i<225;m[12][13]=2)m[x=i%M][y=i++/M]=x<2|y<2|x>12|y>12?1:0;for(i=25;i>0;x=y=2) if(m[x=(j=(int)(Math.random()*100))%5*2+3][y=j/5%5*2+3]<1&m[x+s[j/=25]*2][y+s[j +1]*2]>0)m[x][y]=m[x+s[j]][y+s[j+1]]=i/i--;add(c=new Canvas(){{resize(200,200); }public void paint(Graphics g){for(i=0;i<8;){u=(i+2)%3-1;v=2-i/3;j=s[d+1];j=m[x +s[d]*u+j*v][y-j*u+s[d]*v];g.setColor(j>1?Color.RED:Color.GRAY);g.fillPolygon( new Polygon(){{q=w[(i%3)*2/3+(i/3)*2];for(v=0;j>0&&v<q.length;addPoint(u/11*20, u%11*20)){u=q[v++];u=i%3<1?120-u:u;}}});i++;}}});pack();show();}public boolean keyDown(Event e,int k){k-=51;d=k>0&k<4?d+k&3:d;if(k==5&m[a=x+s[d+1]][b=y+s[d]]< 1){x=a;y=b;}c.repaint();return 1>0;}};}}
668 名前:デフォルトの名無しさん [02/08/24 23:54] >>665 little endian 版、標準入力から読むようにして7行 unsigned*p,H[186]={0x67452301,0xefcdab89,0x98badcfe,271733878,0xc3d2e1f0},n,d,z ,l,h;L(c){((char*)p=H+90)[3^n++]=c;if(n>63){for(;z<80;p++)p[16]=++z>16?n=p[13]^ p[8]^p[2]^*p,n+n|n>>31 :*p;for(memcpy(p-=85,H,20);z--;1[p--]=d<<30|d/4)d=p[1],n= p[2],c=p[3],p[-1]=p[4]+(*p<<5|*p>>27 )+H[185-z]+0x5a827999+(z/20&1?z>59?d&(n^c)^ c:882459459+(d&(n|c)|n&c):(z>39?341275144:0x6fe0483d)+(d^n^c));for(;z=n=H-p--;) *p+=p[5];}}S(a){for(z=4;z;)L(a>>--z*8);}main(a){for(;~(a=getchar());h+=!(l+=8)) L(a);for(L(128);n-56;)L(0);for(S(h),S(l);z<5;)printf("%08x",H[z++]);}
669 名前:デフォルトの名無しさん mailto:sage [02/08/25 00:05] >>653 20行 Lisp 期待してます。
670 名前:デフォルトの名無しさん mailto:sage [02/08/25 01:19] FORTHのサブセットのインタープリターってできないかな?
671 名前:デフォルトの名無しさん mailto:sage [02/08/25 01:28] >>670 まずは逆ポーランド計算機だな。 Cならincludeを除いて2行くらいで書ければいけるかもしれぬ。 ・・すでにあったような気がするけど、気のせいか。
672 名前:デフォルトの名無しさん mailto:sage [02/08/25 10:14] 宿題スレのお題を元に 7行で提出しる! ってか、一度やってみてほしい。
673 名前:665 mailto:sage [02/08/25 17:30] SHA1でH[2]を0で初期化、mainでfor(H[2]=~*H;~(a=...とすれば1文字減る事に今更気付いた
674 名前:ageとくか [02/08/25 20:00] >>672 大抵の宿題は7行よりはるかに短く書けてしまう罠
675 名前:デフォルトの名無しさん mailto:sage [02/08/25 21:35] printfで終わりだったり名(w
676 名前:667 mailto:sage [02/08/26 02:43] >>667 q=w[(i%3)*2/3+(i/3)*2];をq=w[5-v*2-(u==0?0:1)];として1文字減る
677 名前:デフォルトの名無しさん mailto:sage [02/08/26 02:50] >>676 それならq=w[(u==0?5:4)-v*2];とできる?