1 名前:デフォルトの名無しさん [02/04/15 12:09] 7行×79文字なら言語は問いません。 過去作品は>>2-5 を参照。 ■前スレ pc.2ch.net/test/read.cgi/tech/984182993/
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];とできる?
678 名前:デフォルトの名無しさん mailto:sage [02/08/26 02:58] 3次元表示迷路、そのままだとだめそうね。 位置を(x,y)で管理せずにp=x*15+yとしたpで扱うとどうかな。
679 名前:667 mailto:sage [02/08/26 03:07] >>677 あ、そうですた。 >>678 試してみます。
680 名前:667 mailto:sage [02/08/26 04:18] 1行短くなって11行になりますた。 迷路を1次元配列で扱うようにしてすっきりしたので、別のところが縮むかも。 import java.awt.*;class M{public static void main(String[]a){new Frame(){Canvas c;int[]s={1,-15,-1,15,1},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}};int d,u,v,a,i,j,m[]=new int[225],p;{for(;i<225 ;m[193]=2)m[i]=i<30|i>194|(2+i++)%15<4?1:0;for(i=25;i>0;p=32){p=(j=(int)(Math. random()*100))/4;if(m[p=p/5*20+p*2+48]<1&m[p+s[j%=4]*2]>0)m[p]=m[p+s[j]]=i/i--; }add(c=new Canvas(){{resize(200,200);}public void paint(Graphics g){for(i=0;i<8 ;i++){u=(i+2)%3-1;v=2-i/3;j=m[p+s[d]*v-s[d+1]*u];g.setColor(j>1?Color.RED:Color .GRAY);g.fillPolygon(new Polygon(){{q=w[(u==0?5:4)-v*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;}}});}}});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=p+s[d ]]<1)p=a;c.repaint();return 1>0;}};}}
681 名前:デフォルトの名無しさん mailto:sage [02/08/26 04:25] >>680 絶対に壁が置かれる25点を順番に調べて、その4方位の壁の無い部分をランダムで選択。 少し短く&速くなるのではないかな。
682 名前:667 mailto:sage [02/08/26 04:56] >>681 ちょっとゲーム性は落ちる(迷路がやや簡単になる)けど、その分短くなりますた。 # それにしても、こんな時間まで何を...
683 名前:667 mailto:sage [02/08/26 18:47] 迷路 10行と8文字 import java.awt.*;class M{public static void main(String[]a){new Frame(){int d, u,v,i,j,p;int[]s={1,-15,-1,15,1},q,m=new int[225],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=new Canvas(){{ resize(200,200);}public void paint(Graphics g){for(i=0;i<8;i++){u=(i+2)%3-1;v=2 -i/3;j=m[p+s[d]*v-s[d+1]*u];g.setColor(j>1?Color.RED:Color.GRAY);g.fillPolygon( new Polygon(){{q=w[(u==0?5:4)-v*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;}}});}}};{for(;i<225;m[193]=2)m[i]=i<30|i>194|(2 +i++)%15<4?1:0;for(;j<25;p=32)if(m[(p=j/5*20+j*2+48)+s[i=(int)(Math.random()*4) ]*2]>0)m[p]=m[p+s[i]]=++j/j;add(c);pack();show();}public boolean keyDown(Event e,int k){k-=51;d=k>0&k<4?d+k&3:d;if(k==5&m[k=p+s[d]]<1)p=k;c.repaint();return 1 >0;}};}}
684 名前:デフォルトの名無しさん [02/08/26 20:35] お題:逆ポーランド電卓、はどなたか?
685 名前:デフォルトの名無しさん mailto:sage [02/08/26 20:42] >>684 >>5
686 名前:デフォルトの名無しさん mailto:sage [02/08/26 20:52] >>685 FORTHにしる!
687 名前:デフォルトの名無しさん mailto:sage [02/08/26 23:03] 文字数の都合で、茶色の中を黒い部分を目指すことになりますた。 ここいらで限界です。 import java.awt.*;class M{public static void main(String[]a){new Frame(){int[]s ={1,-15,-1,15,1},m=new int[225],w={48,50,40,7,3,36,80,84,40,40,40,36,12,1,9,20, 20,20,108,100,12,20,10,0,0,0};int d,u,v,i,j,p,q;Canvas c=new Canvas(){{resize( 200,200);}public void paint(Graphics g){for(i=0;i<8;g.fillPolygon(new Polygon() {{for(v=0;j>0&v<6;addPoint(u/11*20,u%11*20)){u=w[(i%3)/2*5+i/3*10+v++];u=i%3<1? 120-u:u;}i++;}}))g.setColor(new Color(j=m[p+s[d]*(2-i/3)-s[d+1]*((i+2)%3-1)]<< 23));}};{for(;i<225;m[193]=2)m[i]=i<30|i>194|(2+i++)%15<4?1:0;for(;j<25;p=32)if (m[(p=j/5*20+j*2+48)+s[i=(int)(Math.random()*4)]*2]>0)m[p]=m[p+s[i]]=++j/j;add( c);pack();show();}public boolean keyDown(Event e,int k){k-=51;d=k>0&k<4?d+k&3:d ;if(k==5&m[k=p+s[d]]<1)p=k;c.repaint();return 1>0;}};}}
688 名前:デフォルトの名無しさん mailto:sage [02/08/27 15:50] >>687 なかなか短くなってるけど、もっと減らさないとだめそうだね キー入力判定部分と、迷路描画部分が短くなりそうだけど 予約語と定数が多いので、7行化はかなり困難げ
689 名前:688 mailto:age [02/08/27 22:53] import java.awt.*;class M{public static void main(String[]a){new Frame(){int d, u,v,i,j,p;int[]s={1,-15,-1,15,1},m=new int[u=240],w={48,50,40,7,3,36,80,84,40, 40,40,36,12,1,9,20,20,20,108,100,12,20,10,0,0,0};Canvas c=new Canvas(){{resize( u,u);}public void paint(Graphics g){for(i=-1;++i<8;g.fillPolygon(new Polygon(){ {for(v=0;j>0&v<6;addPoint((i%3<1?120-u:u)/11*24,u%11*24))u=w[(i%3)/2*5+i/3*10+v ++];}}))g.setColor(new Color(j=m[p+s[d]*(2-i/3)-s[d+1]*((i+2)%3-1)]<<23));}};{ for(p=32;i<u;)m[i]=i<30|i>194|(2+i++)%15<4?1:0;for(m[193]=2;j<25;)m[v=j/5*20+j* 2+48]=m[v+s[i=(int)(Math.random()*4)]]=m[v+s[i]*2]>0?++j/j:0;add(c);pack();show ();}public boolean keyDown(Event e,int k){k-=51;d=k>0&k<4?d+k&3:d;p=k==5&m[k=p+ s[d]]<1?k:p;c.repaint();return 1>0;}};}} >>687 私にはこれ以上は無理でした。パラダイムシフトを期待して、あげ。
690 名前:561 mailto:sage [02/08/28 18:56] 縮んできましたね〜。 色んなテクニックがあって、ほんと参考になります。 >689 「パラダイムシフト」なんてレベルではありませんが、ちょっと短くなりました。 (M.java : 現在10行[9行+19文字]) import java.awt.*;class M{public static void main(String[]a){new Frame(){int d, u,i,j,p;int[]s={1,-15,-1,15,1},w={0,0,u=12,u,u,100,1,u,p=36,p,p,80,3,p,48},m= new int[u=240];Canvas c=new Canvas(){{resize(u,u);}public void paint(Graphics g ){for(i=9;--i>0;g.fillPolygon(new Polygon(){{for(j=j/2*6-1;++j<6;addPoint((i%3< 2?120-u:u)/11*24,(j<3?120-u:u)%11*24))u=w[(i%3+1)/2*3+i/3*6+(j<3?j:5-j)-3];}})) g.setColor(new Color((j=m[p+i/3*s[d]-((i+1)%3-1)*s[d+1]])<<23));}};{for(;i<165; )m[i+28]=i++%15<4?0:2;for(m[193]=1;j<25;p=32)m[p=j/5*20+j*2+48]=m[p+s[i=(int)( Math.random()*4)]]=m[p+s[i]*2]<2?++j*0:2;add(c);pack();show();}public boolean keyDown(Event e,int k){k-=51;p=k==5&m[k=p+s[d=k>0&k<4?d+k&3:d]]>1?k:p;c.repaint ();return 1>0;}};}} 通路=0,壁=1,扉=2だったのを、通路=2,壁=0,扉=1にしました。 迷路の初期化部分が短縮できたようです。 また、この結果「茶色の中を黒い部分を目指す」が「黒の中を茶色い部分を目指す」とな ります。 さらに、壁ポリゴンが一枚あたり5(+1)データだったのを、3データに減らしました。 ただ、このせいでaddPointの辺りがちょっと冗長ぎみに…。
691 名前:デフォルトの名無しさん mailto:sage [02/08/29 07:47] >>690 5文字だけだけど 配列sをwとまとめる(sはwで置き換え)。宣言も[]をまとめる。 int d,u,i,j,p,w[]={1,-15,-1,15,1,0,0,u=12,u,u,100,1,u,p=36,p,p,80,3,p,48},m[]=new int[u=240]; 壁描画部分で、もとwとのずれを修正。 u=w[(i%3+1)/2*3+i/3*6+(j<3?j:5-j)+2];
692 名前:561 [02/08/29 19:16] 3D迷路、9行達成&保守age。(M.java : 現在9行) import java.awt.*;class M{public static void main(String[]a){new Frame(){int d, u,i,j,p,w[]={1,-15,-1,15,1,0,0,u=12,u,u,100,1,u,p=36,p,p,80,3,p,48},m[]=new int [u=240];Canvas c=new Canvas(){{resize(u,u);}public void paint(Graphics g){for(i =9;--i>0;g.fillPolygon(new Polygon(){{for(j=j/2*6;j<6;addPoint((i%3<2?120-u:u)/ 11*24,(j++<3?120-u:u)%11*24))u=w[i*i%3*3+i/3*6+(j*j%5+8)/3];}}))g.setColor(new Color((j=m[p+i/3*w[d]-(-~i%3-1)*w[d+1]])<<23));}};{for(add(c);i<165;m[193]=1)m[ i+28]=i++%15<4?0:2;for(pack();j<25;p=32)m[p=j/5*20+j*2+48]=m[p+w[i=(int)(Math. random()*4)]]=m[p+w[i]*2]<2?++j*0:2;show();}public boolean keyDown(Event e,int k){k-=51;p=k==5&m[k=p+w[d=k>0&k<4?d+k&3:d]]>1?k:p;c.repaint();return 1>0;}};}} >691 どうもです。役立ちました〜。 あと、いくつか狡いテクニックを駆使しました(笑) ・n+1と-~nが等価であるため、"(i+1)%3"を"-~i%3"へ変更。 単項演算子は優先順位が高いので括弧が不要になります。(せこ) ・n*n%3の数列が0,1,1,0,1,1,...になることを利用して、 "(i%3+1)/2*3"を"i*i%3*3"に変更。 ・n*n%5の数列がn=0〜5では0,1,4,4,1,0になることを利用して、 "(j<3?j:5-j)-2"を"(j*j%5+8)/3"に置き換え。 ソース見ても、何やってるのか分からない状態に…(^^;)
693 名前:デフォルトの名無しさん mailto:sage [02/08/29 20:59] >>692 アプレット版を作ってみました。クラス名変えてます。 appletviewerでは動いたけど、IE5.5だとだめでした。 -(-~i%3-1) って、 +(1-~i%3) でも良い? import java.awt.*;public class N extends java.applet.Applet{int d,u,i,j,p,w[]={ 1,-15,-1,15,1,0,0,u=12,u,u,100,1,u,p=36,p,p,80,3,p,48},m[]=new int[u=240],x=120 ;public void paint(Graphics g){for(i=9;--i>0;g.fillPolygon(new Polygon(){{for(j =j/2*6;j<6;addPoint((i%3<2?x-u:u)/11*24,(j++<3?x-u:u)%11*24))u=w[i*i%3*3+i/3*6+ (j*j%5+8)/3];}}))g.setColor(new Color((j=m[p+i/3*w[d]+(1-~i%3)*w[d+1]])<<23));} {for(;i<165;m[193]=1)m[i+28]=i++%15<4?0:2;for(;j<25;p=32)m[p=j/5*20+j*2+48]=m[p +w[i=(int)(Math.random()*4)]]=m[p+w[i]*2]<2?++j*0:2;}public boolean keyDown( Event e,int k){k-=51;p=k==5&m[k=p+w[d=k>0&k<4?d+k&3:d]]>1?k:p;repaint();return 1>0;}} <HTML><BODY> <APPLET code="N.class" width="240" height="240"></APPLET> </BODY></HTML>
694 名前:693 mailto:sage [02/08/29 21:02] 言い忘れましたが、x=120 は穴埋めです。
695 名前:561 mailto:sage [02/08/30 00:28] >693 おっ、鋭いです〜。 ただ、"+(1-~i%3) "ではなくて"+(1+~i%3) "じゃないかな? あと、 "w[i*i%3*3+i/3*6+(j*j%5+8)/3]"の部分は "w[~-i*2/3*3+(j*j%5+17)/3]"と短縮できることが判明しました。 # x=120は無いほうがいいような…。
696 名前:デフォルトの名無しさん mailto:sage [02/08/30 08:29] 最単純RLE(復号込) #include <stdio.h> /* encode:this.exe e in out / decode:this.exe d in out */ int i=1,p;main(int c,char*v[]){FILE*f=fopen(v[2],"rb"),*o=fopen(v[3],"wb");if( *v[1]=='e'){p=fgetc(f);while((c=fgetc(f))>=0){if(!c-!p&&i<255)i++;else{fwrite( &p,1,1,o);fwrite(&i,1,1,o);p=c;i=1;}}}else while((c=fgetc(f))>=0){if((p=fgetc( f))<0)break;for(i=0;i<p;i++)fwrite(&c,1,1,o);}}
697 名前:デフォルトの名無しさん mailto:sage [02/08/30 11:18] >>696 だからね。概出ものを持ってくるときはね、何か一工夫してほしいのね。 2行で書くとかね、良いアイデア・工夫があるとかね、面白くなってるとかね。 pc3.2ch.net/test/read.cgi/tech/984182993/101
698 名前:デフォルトの名無しさん mailto:sage [02/08/30 11:44] >>695 ふと気が付いた、何でCanvas使っているんだろう? というわけで、40文字くらい減らせました。 import java.awt.*;class M{public static void main(String[]a){new Frame(){int d, u,i,j,p,w[]={1,-15,-1,15,1,0,0,u=12,u,u,100,1,u,p=36,p,p,80,3,p,48},m[]=new int [u=240];public void paint(Graphics g){for(i=9;--i>0;g.fillPolygon(new Polygon() {{for(j=j/2*6;j<6;addPoint((i%3<2?120-u:u)/11*24,(j++<3?120-u:u)%11*24))u=w[~-i *2/3*3+(j*j%5+17)/3];}}))g.setColor(new Color((j=m[p+i/3*w[d]+(~i%3+1)*w[d+1]]) <<23));}{for(resize(u,u);i<165;m[193]=1)m[i+28]=i++%15<4?0:2;for(;j<25;p=32)m[p =j/5*20+j*2+48]=m[p+w[i=(int)(Math.random()*4)]]=m[p+w[i]*2]<2?++j*0:2;show();} public boolean keyDown(Event e,int k){k-=51;p=k==5&m[k=p+w[d=k>0&k<4?d+k&3:d]]> 1?k:p;repaint();return 1>0;}};}}
699 名前:デフォルトの名無しさん mailto:sage [02/08/30 13:39] >>697 2行でおながいします。
700 名前:デフォルトの名無しさん mailto:sage [02/08/31 02:41] >697 指摘すべきはツッコミどころ満載のコードの方だと思うのだが
701 名前:デフォルトの名無しさん mailto:sage [02/08/31 04:08] >>696 プログラムのミスを修正した上で、標準入出力を使用。2行と27文字。むぅ。 符号化は引数(何でも良い)を付け、復号は何も付けない。 int putchar(),i,p,(*o)()=putchar;main(int c){if(c<2)while(~(c=getchar()))for(i= getchar();i-->=0;)o(c);else{for(p=getchar();~(c=getchar());)i=c-p||i>254?o(p),o (i),p=c,0:i+1;o(p);o(i);}}
702 名前:デフォルトの名無しさん [02/08/31 05:12] >>701 少し短くなた int putchar(),i,p,c,(*o)()=putchar;main(int v){for((v=v>1)?p=getchar():0;~(c= getchar());i=v&&c-p||i>254?o(p),o(i),p=c,0:i+1)if(!v)for(i=getchar();i-->=0;)o( c);v?o(p),o(i):0;}
703 名前:デフォルトの名無しさん [02/08/31 07:07] 奥村本よりフラクタル圧縮画像の表示 現在10行 import java.awt.*;class F{public static void main(String[]a){new Frame(){double x,y,s,t;int N,M,i,j,k,r,z[]=new int[6],h[]=new int[M=150];double[]a={.05,.05, .46,.47,t=.42,t},b={0,0,-.32,-.15,.28,.26},c={0,0,.39,.17,-.25,-.35},d={.6,-.5, .38,t,.45,.31,0,1,.6,1.1,1,.7},p=new double[6];{resize(600,600);show();}public void paint(Graphics g){for(;i<6;s+=p[z[i]=i++])p[i]=Math.abs(a[i]*d[i]-b[i]*c[i ]);for(;j<6;z[k]=r){for(k=i=j;++i<6;)k=p[i]<p[k]?i:k;t=p[j];p[j]=p[k];p[k]=t;r= z[j];z[j++]=z[k];}r=M;for(i=0;i<6;s-=p[i++])for(k=(int)(r*p[i]/s+.5);k-->0;)h[ --r]=z[i];for(i=0;i<50000;i++){j=h[(int)(Math.random()*M)];g.setColor(new Color (1<<(r>1&N>1&k>1&j>1?15:23)));r=N;N=k;t=a[k=j]*x+b[j]*y;y=c[j]*x+d[j]*y+d[6+j]; x=t;if(i>9)g.drawRect(300+(int)(250*x),550-(int)(250*y),0,0);}}};}}
704 名前:703 mailto:sage [02/08/31 08:45] ソート部分いらないかった。再描画時のバグを修正。 9行になりました。 import java.awt.*;class F{public static void main(String[]a){new Frame(){double x,y,s,t;int M=150,N=M,i,j,k,r,z[]=new int[156];double[]a={.05,.05,.46,.47,t=.42 ,t},b={0,0,-.32,-.15,.28,.26},c={0,0,.39,.17,-.25,-.35},d={.6,-.5,.38,t,.45,.31 ,0,1,.6,1.1,1,.7},p=new double[6];{for(resize(600,600);i<6;s+=p[z[i]=i++])p[i]= Math.abs(a[i]*d[i]-b[i]*c[i]);for(;j<6;s-=p[j++])for(k=(int)(N*p[j]/s+.5);k-->0 ;)z[--N+6]=z[j];show();}public void paint(Graphics g){for(i=0;i<50000;i++){j=z[ (int)(Math.random()*M)+6];g.setColor(new Color(1<<(r>1&N>1&k>1&j>1?15:23)));r=N ;N=k;t=a[k=j]*x+b[j]*y;y=c[j]*x+d[j]*y+d[6+j];x=t;g.drawRect(300+(int)(250*x), 550-(int)(250*y),0,0);}}};}}
705 名前:703 mailto:sage [02/08/31 10:31] かなり強引ですが、7行達成。 import java.awt.*;class F{public static void main(String[]a){new Frame(){int M, N,i,j,k,r,z[]=new int[k=600],w[]={7,6,74,55,64,55};double x,y,t,a[]={.05,.05,x= .46,x,t=.42,t,0,0,-.32,-.15,y=.26,y},c[]={0,0,.4,.17,-y,-.35,.6,-.5,.38,t,x,.31 ,0,1,.6,1.1,1,.7};public void paint(Graphics g){for(i=0;i++<M*M;g.drawRect(300+ (int)(280*x),550-(int)(250*y),0,0)){j=z[(int)(Math.random()*M)];g.setColor(new Color(1<<(r>1&N>1&k>1&j>1?15:23)));r=N;N=k;t=a[k=j]*x+a[6+j]*y;y=c[j]*x+c[6+j]* y+c[12+j];x=t;}}{for(resize(k,k);i<6;i++)for(;w[i]-->0;)z[M++]=i;show();}};}}
706 名前:デフォルトの名無しさん mailto:sage [02/08/31 23:05] コンパイル後のコードサイズが縮まらなきゃ意味ないんじゃないの。 何でこんなに夢中になる人がいるのか理解不能。
707 名前:デフォルトの名無しさん mailto:sage [02/08/31 23:20] >>706 俺はあんたが理解不能。tiny.objでも使ってろヴォケ
708 名前:デフォルトの名無しさん mailto:sage [02/08/31 23:57] >>706 コンパイル概念の無い言語はどうすればいいんだ
709 名前:デフォルトの名無しさん mailto:sage [02/09/01 00:14] 最初からパズルみたいな、お遊びと思って楽しんでるんだよ。 そこそこ勉強にもなるし。
710 名前:デフォルトの名無しさん mailto:sage [02/09/01 00:33] >>709 トリッキープログラムに近いためか、プログラムの読解力がついた。 また反面教師にして、小難しいロジックを組まないようなプログラミングをするようになった。
711 名前:デフォルトの名無しさん [02/09/01 04:00] とりあえず、Javaが盛んそうなので、前スレのレイトレ13行を縮めてみた pc3.2ch.net/test/read.cgi/tech/984182993/209 import java.awt.*;class R{public static void main(String[]a){new Frame(){double a,b,c,d,R;int x,y,w,z=255;{resize(z,z);show();}public void paint(Graphics g){ for(;y<z;y++)for(x=0;x<z;g.drawRect(x++,y+20,0,0))g.setColor(new Color(w=L(new V(x-128,y-128,100),new V(0,0,200)),w,w));}int L(V A,V B){a=A.c(A);b=A.c(B);c=B. c(B)-10000;R=(Math.sqrt(d=b*b-a*c)-b)/a;if(d>0){V N=new V(A.x*R,A.y*R,A.z*R);N. n();R=(N.x+N.y-N.z)/Math.sqrt(3);A.x-=B.x;A.y-=B.y;A.z-=B.z;a=-N.c(A);N.x=2*N.x *a+A.x;N.y=2*N.y*a+A.y;N.z=2*N.z*a+A.z;w=(int)(F(N)*R);return R>0?(w>0?w:(int)( R*z)):30;}return F(A);}int F(V A){a=A.x;b=10000-A.r;c=A.y==0?0:b/A.y;return c>0 ?((((a*c>0?a*c+b/2:-a*c)%b)>b/2)^(((A.z*c+200)%b)>b/2)?100:200):0;}};}}class V{ double x,y,z,r;V(double a,double b,double c){x=a;y=b;z=c;}V(V a){x=a.x;y=a.y;z= a.z;}double c(V s){return x*s.x+y*s.y+z*s.z;}void n(){r=Math.sqrt(x*x+y*y+z*z); x/=r;y/=r;z/=r;}}
712 名前:デフォルトの名無しさん [02/09/01 15:32] >>703 七オメ
713 名前:デフォルトの名無しさん mailto:sage [02/09/01 16:11] このスレすげえ。 ところで、ここにはってあるソースを public class hoge { ..... } みたいな風に簡単に戻す方法ないですか。 やっぱ手動ですか?
714 名前:デフォルトの名無しさん mailto:sage [02/09/01 16:27] >713 >>3 の下のほう。C用だけど。
715 名前:713 mailto:sage [02/09/01 16:37] >>714 ありがとー
716 名前:デフォルトの名無しさん mailto:sage [02/09/01 18:37] >>713 展開しても10数行だから、漏れは手動でしてる。 Java用を>>713 が作るってのはどうだね?
717 名前:デフォルトの名無しさん mailto:sage [02/09/01 19:01] ;->;\r\nに変換すれば良いじゃん。 forとか例外部分は手で直す
718 名前:デフォルトの名無しさん mailto:sage [02/09/01 19:29] >>717 それを7行プログラムでするのに、意味があるんだろ
719 名前:デフォルトの名無しさん mailto:sage [02/09/01 22:14] 7行プログラムを展開する7行プログラムかw
720 名前:デフォルトの名無しさん mailto:sage [02/09/01 22:29] >>711 >>705 グラフィックスが入ると、何だかすごいぞ、って感じがするね。 もちろん圧縮などもすごいんだけど、視覚に訴えるのは大きい。
721 名前:デフォルトの名無しさん mailto:sage [02/09/02 11:47] 7行プログラミング、やっても1週間で飽きそうだな。 住人のメンツかわんの早そうなスレだな。
722 名前:713 mailto:sage [02/09/02 14:42] >>716 現在このスレ見て勉強中なので いずれJavaを覚えたら作ってみます。Java用。
723 名前:デフォルトの名無しさん mailto:sage [02/09/02 21:57] 今>>722 がいい事言った!
724 名前:665 mailto:sage [02/09/02 22:22] 久々にSHA1を見直したらまだ削れる事に気付いた これで>665のlittle endian用もinclude以外が7行、と #つー訳で>668氏の7行標準入力版も更に短縮可能 #include <stdio.h> size_t*p,*q,H[186]={0x67452301,0xefcdab89,0,271733878,0xc3d2e1f0},n,d,z,l,h;L(c ){((char*)q=H+90)[3^n++]=c;if(n>63){for(n=80,p=memcpy(q-5,H,20);n;1[p--]=d<<30| d/4)d=q[13]^q[8]^q[2]^*q,q[16]=d+d|d>>31 ,d=p[1],z=p[2],c=p[3],p[-1]=(*p<<5|*p>> 27)+p[4]+0x5a827999+*q+++(--n/5&4?n>39?c^d&(z^c):882459459+(d&(z|c)|z&c):(n>39? 341275144:0x6fe0483d)+(d^z^c));for(;H-p--;)*p+=p[5];}}S(a){for(h=4;h--;)L(a>>h* 8);}main(a,v)char**v;{FILE*f=fopen(v[1],"rb");for(H[2]=~*H;~(a=getc(f));h+=!(l +=8))L(a);for(L(128);n-56;)L(0);for(S(h),S(l);n<5;)printf("%08x",H[n++]);}
725 名前:702 mailto:sage [02/09/03 00:34] RLEを縮めてみた。2行まで後8文字。 int putchar(),i,p,c,(*o)()=putchar;main(v){for(--v?p=getchar():0;~(c=getchar()) ;i=v&&c-p||i>254?o(p),o(i),p=c,0:i+1)if(!v)for(i=getchar();i-->=0;)o(c);v?o(p), o(i):0;}
726 名前:デフォルトの名無しさん mailto:sage [02/09/03 11:01] RLE
727 名前:702 mailto:sage [02/09/03 11:10] 途中カキコ失礼。RLE2行達成。 int i,p,c;f(x){putchar(x);}main(v){for(--v?p=getchar():0;~(c=getchar());i=v&&c- p||i>254?f(p),f(i),p=c,0:i+1)if(!v)for(i=getchar();~i--;)f(c);v?f(p),f(i):0;}
728 名前:デフォルトの名無しさん mailto:sage [02/09/03 20:25] 空ファイルを考慮すると↓の方が良いと思うのだが int c,p,i;f(x){putchar(x);}main(v){for(p=getchar(),--v;~(c=getchar());p=v?i=254 <i||p-c?f(p),f(i),0:i+1,c:getchar())for(;!v&&~c--;f(p));v*~p?f(p),f(i):0;}
729 名前:デフォルトの名無しさん [02/09/05 20:52] ファイルをアーカイブする。 exec filename1 filename2 ... で標準出力に吐き出す 引数なしなら標準出力から読み込んで展開 上のほうの圧縮を組み合わせて使うと吉。かも。 #include <stdio.h> char n[256];int main(int a,char**v){int(*g)()=getchar,i,c;FILE*f;size_t s;if(a- 1){printf("%d\n",a);for(i=1;i<a;i++){f=fopen(v[i],"rb");fseek(f,0,SEEK_END);s= ftell(f);printf("%s\n%u\n",v[i],s);fseek(f,0,SEEK_SET);while((c=fgetc(f))!=EOF) putchar(c);fclose(f);}}else{scanf("%d",&a);g();for(;--a;){gets(n);scanf("%d",&s );g();f=fopen(n,"wb");for(;s--;){fputc(g(),f);}fclose(f);}}return 0;}
730 名前:デフォルトの名無しさん mailto:sage [02/09/05 22:32] FreeBSDのdmesg|head -6を表示 本当はブートシーケンスでバーがくるくる回るところを表示したかったが、 プログラムが長くなっちゃってだめでした。 文章データは前スレのrangecoderをu=128で使用後、8x3=6ビットx4に変更後、+49している。 char t[]="Rm19aKD8`a:GGAa<?Hnn`lc94BhK<oYZa8VOOl=6Ifb1d]f\\`TQfMUiVfa[D`C7fEX?" "=ImOhIg?8AAlTpio4IeKYX9]h3Qh]2cbL1RF^]4]_?9PS8ThmObf:\\1`oih:YG9@c?7?MenXQiQa" "Q=3T`[K<L@T?>34l55Zjj2_dBpMF1npY;GH3@CojA3nYW3XZ8MH5H5\\Na1QV7Cg9jdJU\\@K;MjJ" ":IemMXN]\\9j3]YP78Wf31HU9TVhd58oi8An^AVECjm4LAI7iU:aPOPEB?iK:@_YY9=Recl`]nU<?" "MBU^PWhV[MkS8Pi]d__G<95Ll3pU3`l44l2h[d:794YSYCf]U_g]1^jBUbBO93`V=]",*s=t; unsigned*p,W,O=357,u=128,b=360,a[999],R=~0,x=256;f(){W=W*x|*p++;}main(K){for(p= a+u;*s;)*s++-=49;for(s=t;b>0;b-=4)*p++=s[0]*4|s[1]>>4 ,*p++=(s[1]<<4|s[2]/4)%x, *p++=(s[2]<<6|s[3])%x,s+=4;p=a+u;for(f(f(f(f())));O--;R*=a[b]){for(K=b=0;R<1<< 24;R*=x)f();for(R/=u++;W/R>=K;K+=a[b++]+1);W-=R*(K-++a[putchar(--b)]);}}
731 名前:デフォルトの名無しさん mailto:sage [02/09/05 22:42] >>729 7行スレでそんな丁寧なプログラムを書かなくても・・・ つーわけで、今縮め中です。
732 名前:731 mailto:sage [02/09/05 23:21] >>729 アーカイブのフォーマットを変更しちゃいました。 RLE(>>728 )と組み合わせることで、圧縮書庫が7行でできそうですね。 # SEEK_END=2って規定されてましたっけ? #include <stdio.h> char n[256];int i,c;main(int a,char**v){FILE*f,*o;if(a-1)for(putw(a,o=stdout); --a;)for(fseek(f=fopen(v[++i],"rb"),0,SEEK_END),puts(v[i]),putw(ftell(f),o), rewind(f);~(c=getc(f));)putchar(c);else for(a=getw(o=stdin);--a;)for(f=fopen( gets(n),"wb"),c=getw(o);c--;)putc(getchar(),f);}
733 名前:デフォルトの名無しさん mailto:sage [02/09/05 23:29] >>732 規定されてない。 そもそも、EOF=-1も規定されてないからどっちにしろ処理系依存
734 名前:デフォルトの名無しさん mailto:sage [02/09/05 23:35] >>733 EOF=-1をこのスレではいつの間にかデフォルトで使ってるよなぁ SEEK_???もデフォルトしちゃえ! ついでにi=i++も!
735 名前:デフォルトの名無しさん mailto:sage [02/09/05 23:56] >>734 knkタンだ! ((((;゚Д゚)))) ガクガクブルブル
736 名前:デフォルトの名無しさん mailto:sage [02/09/06 12:53] >>732 SEEK_END=2の使用はデフォルトってことでいいのかな このくらいちぢまればRLE圧縮も組み込めるかな ちぢめすぎてかえって組み込めなくなる罠かもしれない #include <stdio.h> char n[256];int i,c,b;main(a,v)char**v;{FILE*f,*o;b=a-1;for(b?putw(a,o=stdout): (a=getw(o=stdin));--a;){f=fopen(b?v[++i]:gets(n),b?"rb":"wb");for(b?fseek(f,0,2 ),puts(v[i]),putw(ftell(f),o),rewind(f),0:(i=getw(o));b?~(c=getc(f)):i--;)putc( b?c:getc(o),b?o:f);}}
737 名前:デフォルトの名無しさん mailto:sage [02/09/06 20:29] SEEK_END=2はPOSIXで規定されてたりしなかったっけ どっちにしろこのスレでは縮むならある程度の処理系依存は 容認の方針だと思うけど
738 名前:デフォルトの名無しさん mailto:sage [02/09/06 22:44] gccとbcc32で、EOF と SEEK_* が同じだったから、 まぁ、このスレで議論する分には困らないと思われ。 perlだとSEEK_*と0,1,2のどちらを使っても一致することが明記されてるんだけど。
739 名前:デフォルトの名無しさん mailto:sage [02/09/06 23:49] >>736 + >>728 の6行書庫 #まだ100文字程あるから前スレRLEでも7行いけるかな? #include <stdio.h> FILE*f,*o;char n[256];int i,c,b,p,q;r(){return b?getc(f):i<=0?-1:getc(o);}w(x){ putc(x,b?o:f);}main(a,v)char**v;{for(!(b=a-1)?a=getw(o=stdin):putw(a,o=stdout); --a;b*~p?w(p),w(q):0)for(f=fopen(b?v[++i]:gets(n),b?"rb":"wb"),b?fseek(f,q=0,2) ,puts(v[i]),putw(ftell(f),o),rewind(f),0:(i=getw(o)),p=r();~(c=r());p=b?q=q>254 ||p-c?w(p),w(q),0:q+1,c:r())for(b||(i+=~c);!b&&~c--;)w(p);}
740 名前:736 mailto:sage [02/09/06 23:55] >>739 6行ですか、素晴らしい
741 名前:デフォルトの名無しさん mailto:sage [02/09/07 02:52] >>736 + 前スレ101版RLE の7行書庫 fcloseを入れたので多い日も安心 #include <stdio.h> FILE*f,*o;char n[256];int i,c,b,p,q;r(){return b?getc(f):i<=0?-1:getc(o);}w(x){ putc(x,b?o:f);}main(a,v)char**v;{for(!(b=a-1)?a=getw(o=stdin):putw(a,o=stdout); --a;b*q?w(p),w(q):0,fclose(f))for(f=fopen(b?v[++i]:gets(n),b?"rb":"wb"),b?fseek (f,q=0,2),puts(v[i]),putw(ftell(f),o),rewind(f),0:(i=getw(o)),p=-1;~(c=r());p=b ?q=p-c||q>254?q?w(p),w(q):0,w(c),0:q+1,c:c-p?c:r())for(b||(q=c-p?~p?0:-1:r(),i +=~q);!b&&~q--;)w(p);}
742 名前:729 mailto:sage [02/09/07 06:24] tarみたいな感じでアーカイブができれば良いかなと思って書いたんですが、 圧縮までして7行ですか!恐れ入りましたすばらしいです。
743 名前:デフォルトの名無しさん mailto:sage [02/09/07 12:59] 画像ファイルとか音楽ファイルだと逆にでかくなるだけだが
744 名前:デフォルトの名無しさん mailto:sage [02/09/07 15:14] >>743 使えるのはBMPファイルとか、AAとかだね。 圧縮+書庫化するだけ、ならばrangecoderでもできるだろうけどね。
745 名前:デフォルトの名無しさん mailto:sage [02/09/07 15:16] !b&&~q-- って b||~q-- にできるんちゃう?いまさらやけど。
746 名前:デフォルトの名無しさん mailto:sage [02/09/07 18:56] ちょっとした暇つぶしに、ゲームなぞ。 何かキーを押すとスタート、ストップ、リスタート。 動く丸を四角の中で止めてください。赤くなれば成功! import java.awt.*;class S{public static void main(String[]a){new Frame(){int u= 2,p,t,s,c;void L(){u=p=0;t=1;s=(int)(Math.random()*8+2);c=150/s+19;}{resize(350 ,200);show();try{for(;;Thread.sleep(s)){p=p+t;if(p>300)u=2;if(u==1)if(--c<1){t= 0;u=2;}for(repaint();u>1;);}}catch(Exception e){}}public void paint(Graphics g) {g.setColor(t<1&p>249&p<281?Color.RED:Color.BLACK);g.drawOval(p,75,50,50);g. drawRect(250,60,80,80);}public boolean keyDown(Event e,int y){u=u<1?1:u;if(u>1) L();return 1>0;}};}}
747 名前:デフォルトの名無しさん mailto:sage [02/09/07 21:03] >745 b||~q--だとb!=0の時に無限ループする
748 名前:デフォルトの名無しさん mailto:sage [02/09/09 16:20] ネタ募集上げ
749 名前:デフォルトの名無しさん [02/09/09 17:11]
750 名前:デフォルトの名無しさん mailto:sage [02/09/11 20:50] 適応型Huffman 但し毎回木を更新するので滅茶苦茶重い(w 圧縮 int*a[258],n[2060],o[257],*r,*p,*q,c,f,i,j,k;Q(int**a,int**b){return**b-**a;}W( a,b){for(;b--;++i>7?putchar(f),i=f=0:0)f+=f+(a>>b)%2;}S(s){for(r=n,j=k;j++<258; r+=4)*r?a[k++]=r:0;for(;--k;r+=4){qsort(a,k+1,4,Q);a[k-1][1]=a[k][1]=r-n;*r=*a[ k-1]+*a[k];r[2]=a[k-1]-n;r[3]=a[k]-n;a[k-1]=r;}for(r=n+s;r-*a;r=q)o[k++]=r-n!=2 [q=n+r[1]];for(;k;)W(o[--k],1);}main(){for(*n=n[4]=1;~c;S(*p?p-n:0),(*p)++||W(c ,8))p=n+(c=getchar())*4+8;W(0,7);} 展開 int*a[258],n[2060],o[257],*r,*p,*q,c,f,i,j,k;Q(int**a,int**b){return**b-**a;}R( a){for(c=0;a--;c+=c+(f>>--i)%2)f=!i?i=8,getchar():f;return c;}L(){for(r=n,j=k;j ++<258;r+=4)*r?a[k++]=r:0;for(;--k;r+=4){qsort(a,k+1,4,Q);a[k-1][1]=a[k][1]=r-n ;*r=*a[k-1]+*a[k];r[2]=a[k-1]-n;r[3]=a[k]-n;a[k-1]=r;}for(r=*a;r[2]|r[3];r=n+r[ 2+R(1)]);r-n||(r=n+R(8)*4+8);(*r)++;~(c=(r-n)/4-2)&&putchar(c);}main(){for(*n=n [4]=1;~c;)L();}
751 名前:デフォルトの名無しさん [02/09/12 18:42] レスがついてなくて寂しそうだ。あげてあげよう。
752 名前:デフォルトの名無しさん mailto:sage [02/09/12 19:58] >>750 の圧縮・展開を纏めて7行化 何か引数があれば圧縮、なしで展開 int*a[258],n[2060],*r,*p,*q,c,f,i,k;Q(int**a,int**b){return**b-**a;}W(a,b){for( ;b--;++i>7?putchar(f),i=f=0:0)f+=f+(a>>b)%2;}R(a){for(c=0;a--;c+=(f>>--i)%2+c)f =!i?i=8,getchar():f;}S(int*r){r-*a?S(n+r[1]),W(r-n!=n[r[1]+2],1):0;}L(){for(r=* a;r[2]|r[3];r=n+r[2+c])R(1);}main(v){for(--v,*n=n[4]=1;~c;v?S(*(p=n+(c=getchar( ))*4+8)?p:n),(*p)++||W(c,8):(L(),r-n||(R(8),r=n+c*4+8),(*r)++,~(c=(r-n)/4-2)&& putchar(c))){for(r=n;r-n<1032;r+=4)*r?a[k++]=r:0;for(;--k;p=a[k-1],q=a[k],p[1]= q[1]=r-n,*r=*p+*q,r[2]=p-n,r[3]=q-n,a[k-1]=r,r+=4)qsort(a,k+1,4,Q);}v&&W(0,7);}
753 名前:デフォルトの名無しさん [02/09/12 20:23] すげーなあ
754 名前:デフォルトの名無しさん mailto:sage [02/09/12 20:26] このforなげえぇぇぇぇなあぁぁぁぁ。
755 名前:デフォルトの名無しさん [02/09/13 14:01] うわーん。某あれで九州の某へ逝っていたら、ネタが来ただけじゃなく、終わってたよ。 すばらしい! あげちゃえ。
756 名前:デフォルトの名無しさん [02/09/14 14:39] ファイラってできるかな?
757 名前:デフォルトの名無しさん mailto:sage [02/09/14 14:41] 俺主催囲碁プログラミングコンテスト スレより、13行囲碁 pc3.2ch.net/test/read.cgi/tech/1024024666/136- おいお前ら、これを7行に縮めてください。 #include <stdio.h> int w[4]={1,-1,12,-12},s,d,h[3],b[132];r(int a, int c){int z,i;b[a]|=8;s++;for (i=0;i<4;i++){z=a+w[i];if(b[z]==0)d++;if(b[z]==c)r(z,c);}b[a]&=3;}v(int a,int c){int z,i;b[a]=0;for(i=0;i<4;i++){z=a+w[i];if(b[z]==c)v(z,c);}}int t(int u){ int m,e,g,z,i,k;m=e=0;for(z=0;z<132;z++){k=g=0;if(b[z])continue;for(i=0;i<4;i++ ){if(b[z+w[i]]==u){d=s=0;r(z+w[i],1);k+=(d==1)*s*300+(d==2)*s*300+(d==3)*s*20; }if(b[z+w[i]]==0)k+=10;else g++;}if(g==4)continue;if(k>m){m=k;e=z;}}return e;} char *p="・○● \n";int main(){int c=1,u=2,z,x,y,i;for(i=0;i<132;i++){if((i+1 )%12==0)b[i]=4;else if(i%12==0||i<12||(i+2)%12==0||i>120)b[i]=3;}for(;;){for(i =0;i<132;i++)printf("%.2s",&p[b[i]*2]);if(c==1){scanf("%d %d",&x,&y);z=y*12+x; if(b[z]){printf("Err\n");continue;}}else{if((z=t(u))==0){printf("ps\n");break; }}b[z]=c;for(i=0;i<4;i++){if(b[z+w[i]]==u){d=s=0;r(z+w[i],u);if(d==0){h[c]+=s; v(z+w[i],u);}}}d=0;r(z,c);if(d==0)break;u=c;c=3-c;}return 0;}
758 名前:デフォルトの名無しさん [02/09/14 14:46] >>756 >>757 ネタ来たーーーーーーあげ でも囲碁はちょっと見ただけでも無駄が多い、10行くらいにはすぐなりそう
759 名前:オマケ月 mailto:sage [02/09/14 16:08] #include <stdio.h> main(){printf("ファイア\nファイラ\nファイが!");}
760 名前:デフォルトの名無しさん mailto:sage [02/09/14 16:09] >>759 やってくれたね...
761 名前:758 mailto:sage [02/09/14 19:08] >>757 ちょっとだけ縮めてみた。十分7行になりそうだ。 int w[4]={1,-1,12,-12},s,d,h[3],b[132],c=1,u=2,x,y,i;r(a,c,f){int z,i;f?b[a]=0: (b[a]|=8,s++);for(i=4;i--;b[z]==c&&r(z,c,f))d+=!b[z=a+w[i]];!f?b[a]&=3:0;}t(u){ int m,e,g,z,i,k;for(m=e=z=0;z<132;z++)if(k=g=0,!b[z]){for(i=4;i--;b[y]?g++:(k+= 10))if(b[y=z+w[i]]==u)d=s=0,r(y,1,0),k+=(d==1)*s*300+(d==2)*s*300+(d==3)*s*20; if(g!=4)k>m?m=k,e=z:0;}return e;}char*p="・○● \n";main(z){for(i=132;i--;i%12 ==11?b[i]=4:0)if(i%12==0||i<12||(i+2)%12==0||i>120)b[i]=3;for(;;){if(c==1){for( i=10;i<119;)printf("%.2s",&p[b[i++]*2]);scanf("%d %d",&x,&y);if(b[z=y*12+x]){ puts("Err");continue;}}else if(!(z=t(u))){puts("ps");break;}b[z]=c;for(i=4;i--; d=0)if(b[x=z+w[i]]==u)if(d=s=0,r(x,u,0),!d)h[c]+=s,r(x,u,1);r(z,c,0);if(!d) break;u=c;c=3-c;}}
762 名前:758 mailto:sage [02/09/14 23:48] >>761 現在9行。ゲーム性の向上を目指し、 終了時にアゲハマを表示し、余分な改行を消しました。 int w[]={1,-1,12,-12},s,d=1,h[3],b[132],c=1,u=2,y,i=132,m,g,e,k;r(a,c,f,z,i){b[ a]=!f?s++,b[a]|8:0;for(i=4;i--;b[z]==c&&r(z,c,f))d+=!b[z=a+w[i]];!f?b[a]&=3:0;} main(z){for(;i--;i%12==11?b[i]=4:0)i%12==0||i<12||i%12==10||i>120?b[i]=3:0;for( ;d;){if(c==1){for(i=10;i<120;)printf("%.2s",&("・○● \n"[b[i++]*2]));if(scanf ("%d %d",&k,&y),b[z=y*12+k]&&puts("Err"))continue;}else{for(m=e=z=0;e<132;e++) if(k=g=0,!b[e]){for(i=4;i--;b[y]?g++:(k+=10))b[y=e+w[i]]==u?r(y,1,d=s=0),k+=((( d==1)+(d==2))*15+(d==3))*s*20:0;g!=4&&k>m?m=k,z=e:0;}if(!z&&puts("ps"))break;}b [z]=c;for(i=4;i--;)b[k=z+w[i]]==u?r(k,u,d=s=0),!d?h[c]+=s,r(k,u,1):0:0;r(z,u=c, d=0);c=3-c;}printf("%d,%d\n",h[1],h[2]);}
763 名前:デフォルトの名無しさん mailto:sage [02/09/15 00:34] 4行目のスペースが纏められちゃったので修正 ;d;){if(c==1){for(i=10;i<120;)printf("%.2s",&("・○● \n"[b[i++]*2]));if(scanf
764 名前:デフォルトの名無しさん mailto:sage [02/09/15 01:34] >763 cはu^3で代用、それに伴いc==1→u-1等に変更 ((d==1)+(d==2))→(d-1U<2) i<12||略||i>120→i-12U>108||略 for(i=10;i<120;略&("・○● \n"[b[i++]*2)→for(i=9;i++<119;略"・○● \n"+b[i]*2
765 名前:囲碁スレ136 mailto:sage [02/09/15 07:04] >>762 やるねぇ・・・。そうやって圧縮するのか。 再帰関数も1つになってるし。 しかしここからはつらそう。
766 名前:デフォルトの名無しさん mailto:sage [02/09/15 14:37] >>759 printfって最後、\nしないと問題が出る環境なかった? うろおぼえだけど
767 名前:デフォルトの名無しさん mailto:sage [02/09/15 14:39] >>762 最初の盤作成部分 for(;i--;b[i]=z-11?z&&z-10&&i-12U<109?0:3:4)z=i%12;
768 名前:デフォルトの名無しさん mailto:sage [02/09/15 18:48] 囲碁8行(あと62-63文字) int w[]={1,-1,12,-12},s,d=1,h[3],b[132],u=2,y,i=132,m,g,e,k;r(a,c,f,z,i){b[a]=! f?s++,b[a]|8:0;for(i=4;i--;b[z]-c||r(z,c,f))d+=!b[z=a+w[i]];!f?b[a]&=3:0;}main( z){for(;i--;b[i]=z-11?z&&z-10&&i-12U<109?0:3:4)z=i%12;for(;d;){for(i=9;i++<119; )printf("%.2s",&("・○● \n"[b[i]*2]));for(m=z=0;i--;g!=4&&k>m?m=k,z=i:0)for(k =g=0,e=4*!b[i];e--;!b[y]?k+=10:g++)b[y=i+w[e]]==u?r(y,1,d=s=0),k+=((d-1U<2)*15+ (d==3))*s*20:0;if(u>1&&(scanf("%d %d",&k,&y),b[z=y*12+k]&&puts("Err")));else{if (!z&&puts("ps"))break;for(i=4;i--;b[z]=u^3)b[k=z+w[i]]==u?r(k,u,d=s=0),!d?h[u] +=s,r(k,u,1):0:0;r(z,u^=3,d=0);}}printf("%d,%d\n",h[2],h[1]);}
769 名前:デフォルトの名無しさん mailto:sage [02/09/15 19:12] printf("%.2s",&("・○● \n"[b[i]*2])); ↓ printf("・\0○\0●\0 \0\n"+b[i]*3); 3文字か…
770 名前:デフォルトの名無しさん mailto:sage [02/09/15 19:25] 関数r内 b[a]=f?0:~b[a];s++; for(i=4;i--;b[z]-c||r(z,c,f))d+=!b[z=a+w[i]]; b[a]^=!f*~0; 3文字?
771 名前:758 mailto:sage [02/09/15 21:20] 後34文字になりますた。 int w[]={1,-1,12,-12},s,d=1,h[3],b[132],u=2,y,i,m,g,e,k;r(a,c,f,z,i){b[a]=f?0:~ b[a];s++;for(i=4;i--;b[z]-c||r(z,c,f))d+=!b[z=a+w[i]];b[a]^=!f*~0;}main(z){for( ;d;){for(;i++<132;printf("・\0○\0●\0 \0\n"+(b[i]=z-11?z&&z-10&&i-12U<109?b[i ]:3:4)*3))z=i%12;for(m=z=0;i--;g!=4&&k>m?m=k,z=i:0)for(k=g=0,e=4*!b[i];e--;!b[y ]?k+=10:g++)b[y=i+w[e]]==u?r(y,1,d=s=0),k+=((d-1U<2)*15+(d==3))*s*20:0;if(u<2|| !(scanf("%d%d",&k,&y),b[z=y*12+k]&&puts("Err"))){if(!z&&puts("ps"))break;for(i= 4;i--;b[z]=u^3)b[k=z+w[i]]==u?r(k,u,d=s=0),!d?h[u]+=s,r(k,u,1):0:0;r(z,u^=3,d=0 );}}printf("%d,%d\n",h[2],h[1]);}
772 名前:囲碁スレ136 mailto:sage [02/09/15 21:47] お前ら・・・すごいです(w もはや暗号だな。
773 名前:デフォルトの名無しさん mailto:sage [02/09/16 00:14] 円周率を求める7行ってないの?もちろんエンドレスで。
774 名前:デフォルトの名無しさん mailto:sage [02/09/16 01:59] >>773 が作ってみるということでどうだっ!
775 名前:デフォルトの名無しさん mailto:sage [02/09/16 10:29] エンドレスって正しい値を永遠にはきだし続けるって事か? 多倍長クラスとページングマネージャも書けと。 無理臭い
776 名前:デフォルトの名無しさん mailto:sage [02/09/16 20:15] >>775 メモリさえあれば、数百万桁計算する程度なら7行でもできそうだ。 挑戦してみようかなぁ。
777 名前:デフォルトの名無しさん mailto:sage [02/09/16 20:52] 標準出力に10進数を一桁ずつ吐くだけだから 多倍長クラスはいらないのでは。 しかしアルゴリズムが分からない罠。 ttp://www.pluto.ai.kyutech.ac.jp/plt/matumoto/pi_small/_pi_small.html たくさんあってどれが7行向きなのやら。
778 名前:デフォルトの名無しさん mailto:sage [02/09/16 22:37] >>777 1桁ずつ計算する物じゃないぞ
779 名前:デフォルトの名無しさん [02/09/16 22:57] >>778 一桁ずつできるけどね。やるかどうかは別として。
780 名前:デフォルトの名無しさん mailto:sage [02/09/17 01:26] 以下のコードをバイナリエディタで書いて prg.com で保存後 実行 B0 13 CD 10 C4 2F AA 11 F8 64 13 06 6C 04 EB F6
781 名前:デフォルトの名無しさん mailto:sage [02/09/17 04:39] >>780 メガデモスレから持ってこないで下さい。(w farb-rausch.de/prod.html
782 名前:デフォルトの名無しさん mailto:sage [02/09/17 15:39] >>780 これ何?
783 名前:デフォルトの名無しさん mailto:sage [02/09/17 19:41] >780の実効ファイル版ISHにしてみた。 <<< A.COM for MS-DOS ( use shift_jis ish ) [ 8 lines ] >>> !!!&!!9Q!5"XRo"O"I->!C$oR6nt!&"HDm=NH,!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!JF;v !!!&!!9Q!5"XRo"O"I->!C$oR6nt!&"HDm=NH,!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!JF;v !!!&!!9Q!5"XRo"O"I->!C$oR6nt!&"HDm=NH,!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!JF;v %x/。」;掲僕ウFリ策ル」\EB機@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@q繆 。ツ0拆M3鐇Aェ物ォミ^2ンロCm@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@UR「 」\VG・ュッ、{ャナ^・ヨH*j8Le+フ「ワVe、錦ラ;サヌ,Kヤ省竿58h3Q筰ミ隹峻Sスヨアヘニ゙妹4\覬レメノレウh岻屁搶ワ --- A.COM (8/8) ---
784 名前:デフォルトの名無しさん [02/09/17 20:25] >>780 だれかこの動作をマジレスしてください。 メガデモスレと言われても、あまりこの板にはこないから。
785 名前:デフォルトの名無しさん mailto:sage [02/09/17 20:30] >>784 自分でやればわかるよ
786 名前:デフォルトの名無しさん [02/09/17 20:31] >>785 いや、なんか怖い…。 format cよりも怖いです。
787 名前:デフォルトの名無しさん mailto:sage [02/09/17 20:40] >>786 www.google.co.jp/search?sourceid=navclient&hl=ja&q=%22B0+13+CD+10+C4+2F+AA+11+F8+64+13+06+6C+04+EB+F6%22 目がちかちかする。
788 名前:デフォルトの名無しさん [02/09/17 21:32] >>787 噂の「ポケモンフラッシュ」みたいなやつですか? グロよりも苦手なんでよかった。
789 名前:デフォルトの名無しさん mailto:sage [02/09/17 21:35] >>788 見てみりゃわかる。無害。
790 名前:デフォルトの名無しさん [02/09/17 21:50] <age>
791 名前:bloom [02/09/17 21:59] www.leverage.jp/bloom/start/
792 名前:デフォルトの名無しさん [02/09/17 22:21] >>789 ちょっと面白かった。 でもわずかにチカチカするのでちょっとだめかもw フルスクリーンのせいでアプリをひとつ間違って閉じたのに気づかなかったぞゴルァ
793 名前:デフォルトの名無しさん mailto:sage [02/09/17 22:32] つーか、Cなり何なりで、上のバイナリコードを吐き出すようにすれば、 もっと簡単に試したのではなかろうか。 main(){char data[]={...};fwrite(data,1,sizeof(data),stdout);} みたく。
794 名前:デフォルトの名無しさん mailto:sage [02/09/17 23:42] >>789 Win2k飛ばされますた >>793 16バイトで出来てることに意味があるのでせう 逆アセンブルリスト見て嘆息
795 名前:デフォルトの名無しさん [02/09/18 16:11] コードをアセンブラで書いて、インストラクションコードを >>793 みたいに文字列として埋め込むのはありでしょうか? typedef int(*f)(); ((f)"....")(); //呼び出し
796 名前:デフォルトの名無しさん mailto:sage [02/09/18 19:40] >>795 良いと思うけど、普通は逆にオブジェクトコードが増えると思うよ
797 名前:デフォルトの名無しさん mailto:sage [02/09/18 19:40] オブジェクトコード埋め込みの方が…ですね、スマソ
798 名前:トリッキーの1 mailto:sage [02/09/18 21:29] ご無沙汰してました。相変わらず皆さん凄いですね。勉強になります。 近いところでは囲碁面白いですね。でも囲碁のルールが解らないので残念です。 >>771 半角スペース2個は全角1個にしないと、貼り付けるときに消えてしまいますよ それと、「3,3:4,4:2,4:2,5:2,6:2,8」と入力すると相手の石の上に自分の石が来るけれど、 これは囲碁のルールで正しいんですか?
799 名前:デフォルトの名無しさん mailto:sage [02/09/18 22:39] LZW系の展開・圧縮 使い方は>>752 と同じ 同じ辞書を使い続ける6行版 int*Q,N[16384],S,T,U,V,F,G,P,C,X,Z;p(a,b){for(;b--;++S>7?putchar(T),S=T=0:0)T=T +T|a>>b&1;}g(a){for(G=0;a--;G=G+G|V>>--U&1)!U?U=8,V=getchar():0;}a(){F<1<<12?1[ Q=N+F*4]=X,Q[2]=C,Q[3]=N[C*4],*Q=0,N[C*4]=F++:0;}r(x){p((x>256?r(N[x*4+2]),N[x* 4+1]:(X=x))-1,8);}main(c){for(G=F=257;G--;)1[Q=N+G*4]=G;for(--c?g(8),C=V+1:0;g( c?8:12),c?C:~V;C=c?!Z?p(C,12),a(),X:Z:(G=X,r(Z<F?Z:C),Z<F||p(G-1,8),P++&&a(),Z) )for(Z=c?X=V+1,N[C*4]:G;c*Z&&1[Q=N+Z*4]-X;Z=Q[3]);p(0,7);} 辞書が一杯になると再構築する7行版 int*Q,N[16384],S,T,U,V,F,G,P,C,X,Z;i(){for(G=F=257;G--;*Q=Q[2]=Q[3]=0)1[Q=N+G*4 ]=G;}p(a,b){for(;b--;++S>7?putchar(T),S=T=0:0)T=T+T|a>>b&1;}g(a){for(G=0;a--;G= G+G|V>>--U&1)!U?U=8,V=getchar():0;}a(){F<1<<12?1[Q=N+F*4]=X,Q[2]=C,Q[3]=N[C*4], *Q=0,N[C*4]=F++:i();}r(x){p((x>256?r(N[x*4+2]),N[x*4+1]:(X=x))-1,8);}main(c){i( );for(--c?g(8),C=V+1:0;g(c?8:12),c?C:~V;C=c?!Z?p(C,12),a(),X:Z:(G=X,r(Z<F?Z:C), Z<F||p(G-1,8),P++&&a(),Z))for(Z=c?X=V+1,N[C*4]:G;c*Z&&1[Q=N+Z*4]-X;Z=Q[3]);p(0, 7);}
800 名前:デフォルトの名無しさん mailto:sage [02/09/18 22:54] >>773 ほらよ。多少の誤差には眼をつぶれや。 #include <stdio.h> // printf() #include <stdlib.h> // rand() int main(){ printf( "3.1415926535897932384626433832795" ) ; for (;;) printf( "%d",rand() ) ; return 0 ; }
801 名前:デフォルトの名無しさん mailto:sage [02/09/18 22:55] 後はランダムかよ
802 名前:デフォルトの名無しさん mailto:sage [02/09/18 23:08] お題:素数列挙
803 名前:デフォルトの名無しさん mailto:sage [02/09/18 23:09] p2pの七行があったらすごいよね。なんて言って見るテスト
804 名前:>>802 mailto:sage [02/09/18 23:15] printf(char*,...);main(){int z,i=1;for(;z=i++;z?0:printf("%d,",i))while(i%z--);} 1文字オーバーなのは秘密だ。
805 名前:デフォルトの名無しさん mailto:sage [02/09/18 23:24] >>802 外出だったりする
806 名前:デフォルトの名無しさん mailto:sage [02/09/18 23:32] >>805 >>74 >>81 やね
807 名前:デフォルトの名無しさん mailto:sage [02/09/18 23:37] >>804 1文字縮めてみますた printf(char*,...);main(){int z,i=1;for(;z=i++;z||printf("%d,",i))while(i%z--);}
808 名前:804 mailto:sage [02/09/18 23:53] おぉ、さんきゅー! そうか、|| か。なんかPerlっぽい。
809 名前:デフォルトの名無しさん mailto:sage [02/09/19 01:06] >>807 gcc -ansi -pedantic だとprintf(char*,...)は通らず。 ANSI C forbids data definition with no type or storage class printf()を削除すれば通るので、そっちの方がよい? 1文字縮めてみた。 printf(char*,...);main(z){int i=1;for(;z=i++;z||printf("%d,",i))while(i%z--);}
810 名前:デフォルトの名無しさん mailto:sage [02/09/19 01:14] これではだめですかね。引き数なしで実行が条件ですが。 main(i,z){for(;z=i++;z||printf("%d,",i))while(i%z--);}
811 名前:デフォルトの名無しさん mailto:sage [02/09/19 01:22] >>810 bcc32でも動きますね。しかもgccよりも速かった。
812 名前:デフォルトの名無しさん mailto:sage [02/09/19 01:29] コンパイラを選ぶのはどうかと思う
813 名前:デフォルトの名無しさん mailto:sage [02/09/19 02:00] >>810 Solaris cc, GNU gcc, Borland bcc32 でコンパイル・実行できますた。 >>807 上記すべてのコンパイラでprintfの宣言がおかしいといわれますた。 >>812 短くするためならコンパイラどころかアーキテクチャすら選択するのが最近の風潮らしいです。
814 名前:デフォルトの名無しさん mailto:sage [02/09/19 02:04] >>803 p2pの何だ?
815 名前:デフォルトの名無しさん mailto:sage [02/09/19 03:47] 囲碁、申し訳ないんだが、 コンパイルして実行したら、 1の列を指定すると落ちるんだけど。 (ex:1,5) バグ?
816 名前:デフォルトの名無しさん mailto:sage [02/09/19 04:06] >>798 >>815 囲碁、cygwin+gccやSolaris+ccでは正常らしい動作してますね bcc32だと動作は正常のようでも、表示がおかしくなりますね ANSI準拠っぽいソースだけど、どっかしらコンパイラ依存があるんでしょうね >>771 さんはいないようだし、ここはひとつトリッキーの1氏のご助力を!
817 名前:デフォルトの名無しさん mailto:sage [02/09/19 08:15] プロトタイプ宣言無しで printf 使うのって好かんのだけどどうよ。 …っと言っても>>810 、VC++.NETでもdmc++でも通るな。 int printf(char*,...); ... にすれば>>809 行けるね。
818 名前:817 mailto:sage [02/09/19 08:16] あーでも、宣言省略すれば int printf( ... ); 扱いになるんだっけ。Cって。 それならOKか。
819 名前:デフォルトの名無しさん [02/09/19 17:45] >>810 >main(i,z) Cって引数の型を省略するとintになるってこと?
820 名前:デフォルトの名無しさん [02/09/19 20:40] 円周率は #include <stdio.h> main(){printf("3.14159265358979323846264338327950288419716939937510582097494"); /* 以下略 */ } よりも桁が多いことを願います。 とりあえず、職人さんに (~~~゚∀~~)~~゚ メダマ ボーン
821 名前:デフォルトの名無しさん mailto:sage [02/09/19 20:43] #include <stdio.h> main() { char* url = "www.prokofiev.ru/prikol/text/t5/pi.htm "; system(url); return 0; }
822 名前:デフォルトの名無しさん mailto:sage [02/09/19 23:29] >>814 不特定多数なWinMXみたいな奴でなくて、 相手を登録して交換するスタイル。Grooveとかがそんな感じかなぁ。 七行でできたらビックリだけどね。CUIでそういうの聞いたことないし。
823 名前:デフォルトの名無しさん mailto:sage [02/09/20 00:48] それもP2Pかもしれないけど、 P2P=ファイル交換じゃないぞ
824 名前:デフォルトの名無しさん mailto:sage [02/09/20 04:32] なんにせよ、もしできたら凄く便利だと思う
825 名前:デフォルトの名無しさん mailto:sage [02/09/20 04:57] 便利って・・・・・・別に7行でも覚えられるわけで無し・・・・・・ ぱっと思いつく最小のメディアであるFDに収まる1.44MBに入れば何だって同じ気が。 面白いけどね。
826 名前:デフォルトの名無しさん mailto:sage [02/09/20 08:53] 今更ながら>>800 にワラタ
827 名前:トリッキーの1 mailto:sage [02/09/20 15:54] 円周率です。意外と七行は簡単でした。オイラーの公式使ってますので収束遅いです。 #include <stdio.h> #define s ( 5000 /*←希望する桁数*/ /4+2) int main(){int i,n,c,t,j,l,a[]={4,9},r[s][4]={0,0,8,12},k=10000;for(n=0;n<s*15 ;n++)for(i=0;i<2;i++){for(c=t=j=0;j<s;r[j++][i]+=((n&1)*-2+1)*l/(2*n+1))t=(l=k *t+r[j][i+2])%a[i],c=(l=k*c+(r[j][i+2]=l/a[i]))%(2*n+1);for(t=0,j--;j+1;r[j--] [i]%=k)t=(r[j][i]+=k+t)/k-1;}for(i=s-(t=1);i+1;*r[i--]%=k)t=(*r[i]=k+*r[i]+r[i ][1]+t)/k-1;printf("%d.",**r);for(i=1;i<s-1;printf("%04d",*r[i++]));return 0;}
828 名前:トリッキーの1 mailto:sage [02/09/20 15:56] こうやってみるとまだまだ短くなりそうですね。桁数固定にすれば後一行は軽そうです。
829 名前:デフォルトの名無しさん [02/09/20 20:47] 復活直後にでかいのを持ってきましたね。実質5行だし。相変わらず凄い。 7行にするのって、1字1字縮める技術ももちろんあるけれど、 組む前にデータ構造とアルゴリズムをなるべく文字数を減らすことを念頭に 構想する才能が必要だと思うが、それは知識と知恵の両方を要求するよね。 色々なネタで7行達成している常連の職人さんたちはかなりハイレベルだと思った。
830 名前:デフォルトの名無しさん mailto:sage [02/09/20 20:54] 有名人が出てくるたびにヨイショするこの雰囲気、 どうにかならんもんかねぇ。 名無しで新しいアイデア出てきても「たいしたことない」と言ってのけるのに。
831 名前:デフォルトの名無しさん mailto:sage [02/09/20 20:55] 本人がageてないのに他人がageるのも正直ウザい
832 名前:デフォルトの名無しさん mailto:sage [02/09/20 21:04] ただのひがみかもしれないがマジレス。 有名人をよいしょしているわけではなく、 優れたプログラムを書く人をほめているのでは?
833 名前:デフォルトの名無しさん mailto:sage [02/09/20 21:05] >>799 UNISYSに通報しますた
834 名前:デフォルトの名無しさん mailto:sage [02/09/20 21:29] はいはい、そこ雰囲気悪くしない! 作品いっぱい出るのはいいことだし、批評はその作者の次に繋がるので良し! でも830、無意味な煽りは入れない! 次のネタいきましょう、次。
835 名前:デフォルトの名無しさん mailto:sage [02/09/20 22:24] 次のネタ候補 ・FORTH や C, LISP, BASICなどのプログラミング言語のサブセット ・囲碁 ・>>533 の前スレの未達成もののうち、このスレでも未達成のもの 特に言語ものは20行以下になったらとりあえず見せて欲しいなぁ。 サブセット言語で作った7行プログラムとか出てきたりして:-P
836 名前:デフォルトの名無しさん mailto:sage [02/09/21 00:50] 7行でC/C++コンパイラ作ってくだちぃ。
837 名前:デフォルトの名無しさん mailto:sage [02/09/21 01:03] >>836 四則演算と表示くらいならできるかもしれないが、難しいだろうね。 つーか、>>836 よ、インタプリタで良いから作ってみないか?
838 名前:デフォルトの名無しさん mailto:sage [02/09/21 01:23] >>837 >四則演算と表示くらいなら... マジで!?それともネタ? 冗談で言ったつもりなんだが… >インタプリタで良いから... 技術のない漏れには作れません...
839 名前:デフォルトの名無しさん mailto:sage [02/09/21 02:32] VTL系のBASICはどうなのかな? オリジナルは768バイトなんでしょ?
840 名前:デフォルトの名無しさん mailto:sage [02/09/21 02:59] マンセーうぜー言われるかもしれないが、やっぱり>>827 は(・∀・)イイ!
841 名前:デフォルトの名無しさん mailto:sage [02/09/21 05:50] FORTHモドキ(逆ポーランド電卓か?)。オペレータは+-*/.のみ。 #include <stdio.h> W[1000],*S=W,c,v;G(){c=getchar();}g(){v=0;do v=v*10+c-48;while((G(),c)-48<10U) ;return v;}main(){G();while(~c)c==45?G(),c-48>9U?v=*S--,*S-=v:(*++S=-g(),G()): (c-48<10U?*++S=g():c==43?v=*S--,*S+=v:c==42?v=*S--,*S*=v:c==47?v=*S--,*S/=v:c- 46?c-32&&c-10&&printf("err\n"):printf("ok\n%d\n",*S--),G());}
842 名前:デフォルトの名無しさん mailto:sage [02/09/21 10:04] 既出ネタのチェックはしてから話題振ることにせんか? ・四則演算 >>5
843 名前:デフォルトの名無しさん mailto:sage [02/09/21 10:22] 多倍長整数、さらには有理数演算に対応しろと言ってみる。
844 名前:デフォルトの名無しさん mailto:sage [02/09/21 11:58] ・何かをグラフィック ・非常に便利な関数を7行で作成 w
845 名前:デフォルトの名無しさん mailto:sage [02/09/21 14:51] >>842 ごめん、正直指摘間違いでは?、と始め思った。 つーか、>>841 の勘違いですね。 四則演算はすでにあります。要求されたのは、 ・FORTHのサブセット あるいは ・四則演算のみ可能な C/C++ !!コンパイラ!! ですよん。そして、 ・多倍長整数、有理整数演算、浮動小数演算などに対応 が追加されますた。
846 名前:79文字で問題を出してみる(w mailto:sage [02/09/21 15:02] 問題:単なるクリックソートより早いqsort()互換のソート関数を79文字7行で記述せよ。
847 名前:846 mailto:sage [02/09/21 15:03] >846にパッチ当て。 ---問題:単なるクリックソートより早いqsort()互換のソート関数を79文字7行で記述せよ。 +++問題:単なるクイックソートより早いqsort()互換のソート関数を79文字7行で記述せよ。
848 名前:デフォルトの名無しさん [02/09/21 16:42] >>835 いいだしっぺの法則
849 名前:デフォルトの名無しさん mailto:sage [02/09/21 17:22] 将棋作れ!
850 名前:デフォルトの名無しさん mailto:sage [02/09/21 17:47] ┃激┃し..┃く..┃ず┃れ┃て┃鬱┃だ.┃が┃ ┣━╋━╋━╋━╋━╋━╋━╋━╋━┫ ┃こ.┃れ┃で┃12┃行┃な.┃ん┃だ┃YO┃ ┣━╋━╋━╋━╋━╋━╋━╋━╋━┫ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣━╋━╋━╋━╋━╋━╋━╋━╋━┫ ┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃ ┣━╋━╋━╋━╋━╋━╋━╋━╋━┫ ┃ ┃角┃ ┃ ┃ ┃ ┃ ┃飛┃ ┃ ┣━╋━╋━╋━╋━╋━╋━╋━╋━┫ ┃香┃桂┃銀┃金┃王┃金┃銀┃桂┃香┃ ┗━┻━┻━┻━┻━┻━┻━┻━┻━┛
851 名前:デフォルトの名無しさん mailto:sage [02/09/21 17:48] 激しくはずれなくてうれしいw
852 名前:デフォルトの名無しさん mailto:sage [02/09/21 17:49] 敵の歩なんかはどうしたらいいのさ? ┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃ ┣∨╋∨╋∨╋∨╋∨╋∨╋∨╋∨╋∨┫ とか?
853 名前:デフォルトの名無しさん mailto:sage [02/09/21 17:53] ニフで昔あった将棋は |歩v|歩^| で表現していたな コンピュータの思考ルーチンが激しく難しそうだ
854 名前:デフォルトの名無しさん [02/09/21 23:20] 前のスレッドにあった自動インデントプログラムを機能拡張・7行版にしてみました。 使用方は program.exe(仮称) 入力ファイル名 出力ファイル名 です。 #include <stdio.h> FILE *s,*o;I,c,d;G(){return c=getc(s);}P(){c-10&&putc(c,o);}R(){putc(10,o);}T(t ){while(t-->0)putc(9,o);}S(p){d=1;P();while(~G()&&(P(),c!=41||--d))c-p||++d;}Q( p){P();while(~G()&&(P(),c!=p))if(c==92||_ismbblead(c))P(G());}main(a,v)char**v; {s=fopen(v[1],"r");o=fopen(v[2],"w");while(~G())c==63||c==58?R(),T(I),P():c==34 ||c==39?Q(c):c==40?S(c):c=='{'?R(),T(I),P(),R(),T(++I):c=='}'?fseek(o,-1,1),P() ,R(),T(--I):P(),c==59&&(R(),T(I));}
855 名前:デフォルトの名無しさん mailto:sage [02/09/21 23:36] >将棋 駒は数字で表せばいいじゃん。 王金銀桂香飛角歩 +1+2+3+4+5+6+7+8 玉金銀桂香飛角歩 -1-2-3-4-5-6-7-8
856 名前:デフォルトの名無しさん mailto:sage [02/09/21 23:55] >>855 お前は数字を見て将棋だと言えるのか? #現実問題、数字にでもしなければ不可能だとは思うが #つーか数字にしても不可能だろ(w
857 名前:デフォルトの名無しさん mailto:sage [02/09/22 00:02] 囲碁の九路盤みたいに、将棋もサブセットがあればいいのだが・・・詰め将棋か?
858 名前:デフォルトの名無しさん mailto:sage [02/09/22 00:08] 詰め将棋だと駒が全部必要になってしまうのではさみ将棋はどうでしょう?
859 名前:デフォルトの名無しさん [02/09/22 00:09] 王 玉 金 キン 銀 ギン 桂 ケイ 香 車 飛 ヒシャ 角 カク 龍 リュウ 馬 ウマ 歩 フ と ト でいけるんじゃ?
860 名前:デフォルトの名無しさん mailto:sage [02/09/22 00:13] >>859 それだったら漢字+「符号」とか「色」で区別した方が扱いも容易 つーか、>>859 だと駒の表現だけで2行くらい使ってしまうぞぅ
861 名前:デフォルトの名無しさん mailto:sage [02/09/22 00:14] >>858 もはや別のゲームだが、面白いかもしれない。 コンピュータの思考ルーチンも簡単にかけるし。 よし、いっちょ作ってみるか。>>858 が。
862 名前:デフォルトの名無しさん mailto:sage [02/09/22 00:15] >>859 タマキン
863 名前:858じゃないけど mailto:sage [02/09/22 03:31] はさみ将棋 現在9行+3文字 とりあえず動く版を作成 ルールは●○を縦横に移動させ、相手をはさむと取れます ただし、辺を使ってはさんでも無効です 角をはさむのは正式ルールなのかわからなかったので、今のところ無効 移動方法は移動元(x,y)と移動先(m,n)の4整数で指定、左上が(1,1) 1 2 3 4 [RET] コンピュータの思考ルーチンはまだなので、ランダムに移動します 今は、関数c()で動作を決めるようになっているので、どなたか作成をば! 変数vが移動元で変数zが移動先になってまつ。 int w[]={1,-1,12,-12},h[3],b[132],u=1,z,y,m,n,i=132,v,d=1;r(p,a,f,z){if(b[z=p+w [a]]==(u^3)){d++;r(z,a,f);f?b[z]=0:0;}if(b[z]==3||!b[z])d=0;}o(x,y,m,n){d=0;z=x +y*12;v=m+n*12;if((x!=m&&y!=n)||b[z]!=u||b[v]!=0)d=1;if(x==m){for(;y++<n;)d+=b[ x+y*12];}else if(y==n){for(;x++<m;)d+=b[x+y*12];}}c(){for(d=1;d;){for(i=132;i-- ;)if(b[i]==2)v=i,i=0;z=rand()%132;o(v%12,v/12,z%12,z/12);}}main(x){for(;i--;b[i ]=z-11?z&&z-10&&i-12U<109?z-1?z-9?0:2:1:3:4)z=i%12;for(;;){printf("%d:%d %d\n", u,h[1],h[2]);for(i=11;i++<131;)printf("・\0●\0○\0 \0\n"+b[i]*3);if(h[2]>7||h [1]>7)break;if(u<2){scanf("%d%d%d%d",&x,&y,&m,&n);o(x,y,m,n);if(d&&puts("Err")) continue;}else c();b[z]=0;for(i=4;i--;d?r(v,i,1):0)r(v,i,0),h[u]+=d;b[v]=u;u^=3;}}
864 名前:858じゃないけど mailto:sage [02/09/22 05:20] >>863 あー、移動可能判定間違えてました。現在修正中です。
865 名前:858じゃないけど mailto:sage [02/09/22 05:48] >>863 移動判定ミス修正、簡易思考ルーチン装備、やや縮めた版です。 int w[7]={1,-1,12,-12},b[132],u=1,z,y,m,n,i=132,v,d=1;r(p,a,f,z){b[z=p+w[a]]==3 -u?d++,r(z,a,f),f?b[z]=0:0:b[z]-1U>1?d=0:0;}o(x,y,m,n,p,a){d=b[v=m+n*12]+(b[a=z =x+y*12]!=u||(x-m&&y-n)?1:0);for(p=x==m?y<n?2:3:x<m?0:1;!d&&a!=v;)d+=b[a+=w[p]] ;}c(j,k,s,f,g){s=-1;for(i=120;i--;d=0)for(j=120;b[i]==u&&j--;)for(o(i%12,i/12,j %12,j/12),k=4;!d&&k--;d>s||d==s&&rand()%j<1?s=d,f=z,g=v:0)r(v,k,0);z=f;v=g;} main(x){for(;i--;b[i]=z-11?z&&z-10&&i-12U<109?z-9?z-1?0:1:2:3:4)z=i%12;for(;;){ printf("%d:%d %d",u,w[5],w[6]);for(i=9;++i<120;)printf("・\0●\0○\0 \0\n"+b[i ]*3);if(w[5]>7||w[6]>7)break;u<2?scanf("%d%d%d%d",&x,&y,&m,&n),o(x,y,m,n):u>1&& c();if(d&&puts("Err"));else{b[z]=0;for(i=4;i--;d?r(v,i,1):0)r(v,i,0),w[4+u]+=d; b[v]=u;u^=3;}}}
866 名前:デフォルトの名無しさん mailto:sage [02/09/22 08:48] >>865 相手のコマの上に持っていってエラーが出ても、相手のコマを消して続くぞ。
867 名前:858じゃないけど mailto:sage [02/09/22 16:47] >>866 1 1 9 1 等では再現しませんでした・・・ よろしければ、棋譜(?)を教えてください。
868 名前:デフォルトの名無しさん mailto:sage [02/09/22 16:55] >>867 俺は1 1 9 1 で一発再現。コンパイラ依存か?gccだけど あと、1 1 91 1 とかも出来たりして、好きな場所にとばせるが、これは仕方ないか
869 名前:デフォルトの名無しさん mailto:sage [02/09/22 22:49] だれか7行grepよろしく
870 名前:デフォルトの名無しさん mailto:sage [02/09/22 23:17] #!/usr/local/bin/ruby $pattern = ARGV.shift while gets print if /#{$pattern}/ end
871 名前:デフォルトの名無しさん mailto:sage [02/09/22 23:18] >>868 #!/usr/local/bin/perl `grep @ARGV`;
872 名前:デフォルトの名無しさん mailto:sage [02/09/22 23:53] >>871 せめて $p=shift;$f=shift||"-";open H,$f;while(<H>){/$p/&&print $_} perl grep.pl pattern file.txt perl grep.pl pattern < file.txt の両方を受け付けるように、という縛りをつけたらperlの短縮のいい例題になりますた。 見てのとおり初心者ですが、ここのスペースは要る、要らんとかいろいろあってなかなか 面白かったです。 まだパーサの改良ができるかもしれないです。 しかし、1行でこれだと7行は相当に死ねるな・・・・・・
873 名前:デフォルトの名無しさん mailto:sage [02/09/23 00:05] while(<>){/$ARGV[0]/&&print $_} <>の仕様が良く分かってませんでした。 道理で最初に試したのがうまく動かなかったわけだ。
874 名前:デフォルトの名無しさん mailto:sage [02/09/23 00:06] あ、違った、こっちです。上のは動きませぬ。連投すま・・・・。 $p=shift;while(<>){/$p/&&print $_}
875 名前:871 mailto:sage [02/09/23 00:22] まさかネタに突っ込まれるとは思わなかった。 >>874 >print $_; print; でいけます。
876 名前:871 mailto:sage [02/09/23 00:26] $a=shift;/$a/&&print while(<>);
877 名前:デフォルトの名無しさん mailto:sage [02/09/23 01:01] >>876 惜しい。 $a=shift;/$a/&&print while<> でも始めから7行以内に収まる事が分かってるようなネタで 盛り上がるのは止めてもらえまいか。 どうせなら10行くらいから頼む。
878 名前:デフォルトの名無しさん mailto:sage [02/09/23 01:24] >>822 つーかそれって単なる認証付きファイル検索なのでは? 認証して自分の所のファイル検索するCGIとそのクライアントのセット? 呼び出し用鯖も作れば余計なhtttpシーケンス省けるかな?
879 名前:871 mailto:sage [02/09/23 01:24] >>877 while(<>) => while<> うおぉ!そんな省略まで…。 >どうせなら10行くらいから そうでつね。了解しました。
880 名前:デフォルトの名無しさん mailto:sage [02/09/23 02:06] C言語でgrepを実装するのは正規表現を実装することだからそれなりに面白いと思われ。 どこまで行けるんだろ。
881 名前:デフォルトの名無しさん mailto:sage [02/09/23 04:18] >>877 んじゃ、Cで作れ。 正規表現解析機を7行で実現しろって意味だったんだが、 perlとか糞Rubyに走るな
882 名前:877 mailto:sage [02/09/23 05:37] >>881 >>869 さんかい? このスレは言語問わずだから、 このお題の出し方じゃPerlやRubyで応えられても文句言えないぞ(笑)。 俺は >>872 の段階で既に7行どころか1行に収まっているコードを 書き込み続けるのを止めて欲しかっただけなんだが、表現が悪かったかな。 「ネタ」ってのは「*Perlで* 7行grep」を意図してる。他の言語は知らんよ。 出されたネタに対しどの言語で組むかは自由だと思うが、 簡単に達成できる言語で応えるのは控えて欲しい。面白くないし。 反対に、PerlやRubyでも7行に縮めるのが難しそうなネタなら大歓迎。 JavaやJavaScriptでも言語の特色を活かした作品いっぱい出てるしね。
883 名前:デフォルトの名無しさん mailto:sage [02/09/23 07:30] >>881 「正規表現解析機」て…。
884 名前:デフォルトの名無しさん mailto:sage [02/09/23 10:53] なんだか私のせいで荒れたようで……。 申し訳ありませんでした。つい出来て嬉しくて書き込んでしまいました。 初心者だからといって、ここでは発表せず、脳内にとどめた方がよさそうですね。
885 名前:デフォルトの名無しさん mailto:sage [02/09/23 13:20] 厨だなぁ・・・ ほんと最近レベル落ちてるな。色々な意味で
886 名前:デフォルトの名無しさん mailto:sage [02/09/23 13:39] お題:平安京エイリアン
887 名前:デフォルトの名無しさん mailto:sage [02/09/23 22:16] しかし気にしすぎじゃない?。 まあ例えばprintfを7行でと言われても、結局テクニックの問題なんだし 単にそれが凄いのか凄くないのかって事なんだからさあ。確かにどうせなら それを応用して7行使ったビックリするようなものが見てみたいけどね。 ところでゲームといえば冷たい方程式系のシミュレーションはどうだろう? アポロ13号とか、どっかのガス欠気味の人工衛星や探査機とかにコマンド送って 操作するような奴。それともまずは定番の月着陸からだろうか?
888 名前:デフォルトの名無しさん [02/09/24 17:23] VTL系のBASICはどうなのかな? オリジナルは768バイトなんでしょ?
889 名前:デフォルトの名無しさん mailto:sage [02/09/24 19:57] >>888 過去ログ
890 名前:デフォルトの名無しさん [02/09/25 00:39] HSPスレがなぜか姉妹スレ化してる… game.2ch.net/test/read.cgi/gamedev/1005332663/l50
891 名前:デフォルトの名無しさん mailto:sage [02/09/25 00:41] game.2ch.net/test/read.cgi/gamedev/1005038280/l50
892 名前:デフォルトの名無しさん mailto:sage [02/09/25 01:05] >>889 そもそも私(>>839 )のコピペ。 でネタ自体は>>11 で既出だったらしい。 ちなみに前スレや>>612 >>626 のは予約語からして普通のBASIC じゃないかな?それともなにか見逃してる? もっと中間コード風でGAMEIIコンパイラみたいな奴。
893 名前:デフォルトの名無しさん mailto:sage [02/09/25 05:05] >>892 自分でやれ
894 名前:60cm浮き上がるストレート [02/09/25 06:22] ○ラクエです。20行もオーバーしてしまいました。どなたか縮めてください。 int a,b,c,d,e,f,g,h,i,j,k,l,m,n,z[6],r,x[9],y[9];char o[][9]={"アリーナ","クリフト" ,"ブライ","スライム","マーマン","トロル","オーク","キメラ","竜王","攻撃","防御","イオ","ホイミ","ヒャド" ,"who?","唱えた","ダメージ","回復","死んだ","敵出現","勝利","クリア","全滅","した", "に","の","は","を","▼","\x1b[2J"," ","MP不足","\x1b[0m","\x1b[31m", "\x1b[32m","\x1b[>5h"},q[]="00533", p[]="vlb:XvlXvvlb:XvlXv:?B06060?:?B06060?SI?5?SNXSA?<2?2:?D234040302"; main(){srand(time(0));S(35);for(r=0;r<=3;r++){S(19);S(28);for(b=3;b<6;b++) {p[r+b]=p[r+b+9];p[r+b+18]=p[r+b+27];}for(l=0;l/10!=3;){for(b=0;b<3;b++) {if(p[b]!=48){N();S(b);C(63);C(10);for(c=1;c<4;c++){D(c);C(58);S(8+c+c/3*b); C(10);}d=getch()-49;x[b]=d+d/2*b;if(d==0||(d==2&&b>0)){C(10);S(14);C(10); for(c=1;c<4;c++){e=x[b]==3?c-1:r+c+2;if(p[e]!=48){D(c);C(58);S(e);C(10);}} e=getch()-49;y[b]=x[b]==3?e:r+3+e;}}S(29);}for(b=r+3;b<r+6;b+=p[y[b]]!=48?1:0) {d=x[b]=rand()%2==0?0:p[b+54]-48;e=rand()%3;y[b]=d==3?r+3+e:e;}for(n=0;n<6;
895 名前:60cm浮き上がるストレート [02/09/25 06:22] >>894 の続き n++){z[n]=6;d=rand()%6;z[n]=d>2?r+d:d;for(b=n-1;b>-1;b--)n-=z[n]==z[b]?1:0;} for(n=0,l=0;n<6&&l/10!=3;n++){b=z[n];if(p[b]!=48){N();d=x[b];S(b);d==0? (S(25),S(9)):d==1?(S(26),S(10),S(23)):(S(26),S(d+9),S(27),S(15));C(7);C(10); if(d<2||p[b+18]!=48){p[b+18]-=q[d]-48;e=y[b];f=p[b+36]-p[e+45];f=d==0?f<1?2:f: d==2?20:d==4?30:0;if(d==2)for(g=b<=2?r+3:0,h=0;h<3;h++)Z(g+h);else Z(e); for(k=0,l=0;k<r+6;k+=k==2?r+1:1)l+=p[k]==48?k<3?1:10:0;if(l%10==3){S(22); S(28);exit(1);}if(l/10==3){S(20);S(23);}}else S(31);S(28);}}}}S(21);S(28);} S(a){printf("%s",o[a]);a==28?(getch(),S(29)):a;}P(a){printf("%3d",p[a]-48);} D(a){printf("%d",a);}C(a){printf("%c",a);}N(){for(a=0;a<3;a++){S(a);P(a); P(a+18);C(10);}for(a=3;a<6;a++){S(p[a+r]!=48?a+r:30);C(10);}C(10);}Z(a){ if(p[a]!=48&&d!=1){S(a);if(d%2==0){S(24);m=f*(rand()%4+8)/10;p[a]-=m/=x[a]==1 ?2:1;D(m);S(16);p[a]<49?(p[a]=48,C(10),S(18)):a;}if(d==3){S(26);S(17);S(23); p[a]=p[a+9];}C(10);S(32);for(c=0,m=0;c<3;c++)m+=p[c]<49?4:p[c]<64?1:0;m>3? S(33):m>0?S(34):m;}}
896 名前:デフォルトの名無しさん [02/09/25 06:53] >>880 おいお前ら、これを7行にしてください。 typedef unsigned char *U;U Z[9999],H[9999],P,Q,s,t,u,r,n;o,p;N(c){u=Q;*Q++=c;*Q ++=0;*Q++=0;return u;}C(b){*Q++=b;}I(c){return c&&strchr("*+?",c);}X(U p){o=(p[ 1]<<8)|p[2];return o?p+(*p==7?-o:o):0;}S(U p){s=Q;Q+=3;while(s-->p)s[3]=*s;*p=6 ;p[1]=p[2]=0;}T(U p,U v){for(s=p;t=X(s);s=t);s[2]=o=*s==7?s-v:v-s,s[1]=o>>8 ;}O( U p,U v){*p==6&&T(p+3,v);}M(U e){int f;P=e;Q=Z;G(0,&f);}L(c,F)int*F;{if(c-91)c- 92?--P:*P||E(),s=N(8),C(*P++);else{s=N(*P==94?P++,5:4);if(*P==93||*P==45)C(*P++ );while(*P!=93)if((*P||E()),*P-45)C(*P++);else if(*++P==93||!*P)C(45);else{for( c=P[-2];c<=*P;c++)C(c);P++;}P++;}*F|=1;C(0);}G(p,F,f)int*F;{U r,b,e;p?r=N(10),T (r,B(&f)):(r=B(&f));for(*F=1;f&1||(*F&=~1),*F|=f&2,*P=='|';P++,T(r,B(&f)));T(r, e=N(p?11:0));for(b=r;b;b=X(b))O(b,e);if(p?*P++-41:*P)E();return r;}E(){exit(2); }B(F,f,g,h)int*F;{U r=N(6),c=0,l;for(*F=0;*P&&*P-'|'&&*P-41;p=*P++,g=0,l=p==94? N(1):p==36?N(2):p==46?g|=1,N(3):p==40?s=G(1,&h),g|=h,s:strchr("|)?+*",p)?E():(L (p,&g),s),p=*P,I(p)?g&1||p==63||E(),f=p-43?2:1,p==42?S(l),O(l,N(7)),O(l,l),T(l, N(6)),T(l,N(9)):p==43?T(l,n=N(6)),T(N(7),l),T(n,N(6)),T(l,N(9)):p==63?S(l),T(l, N(6)),T(l,n=N(9)),O(l,n):0,I(*++P)&&E():(f=g),*F|=f&1,c?T(c,l):(*F|=f&2),c=l);c ||N(9);return r;}A(U s){Q=s;do{P=s;if(D(Z))return 1;}while(*s++);return 0;}main (c,v)char**v;{M(v[1]);while(gets(H))if(A(H))puts(H);}D(U s){for(;;s=n){n=X(s);p =*s;if(!p||p==1&&P!=Q||p==2&&*P||p==3&&!*P++||p==4&&(!(o=*P++)||!strchr(s+3,o)) ||p==5&&(!(o=*P++)||strchr(s+3,o))||p==8&&(memcmp(s,P,o=strlen(s+=3))||(P+=o,0) ))return!p;if(p>9)return D(n);if(p==6)if(*n==6){do{U t=P;if(D(s+3))return 1;P=t ;s=X(s);}while(s&&*s==6);return 0;}else n=s+3;}}
897 名前:デフォルトの名無しさん [02/09/25 19:18] pc3.2ch.net/test/read.cgi/tech/1004395614/l50 将棋キター
898 名前:デフォルトの名無しさん [02/09/25 21:31] >>894-895 いろんな意味で凄いな…
899 名前:デフォルトの名無しさん mailto:sage [02/09/26 01:28] >>894-895 やってみたけど、ある意味悲惨… ここまでして○ラクエやりたいとは 思わない。 でもがんばりは評価。
900 名前:デフォルトの名無しさん [02/09/26 03:16] 900達成! PART.2とPART.1未達成やその他スレの話題まとめ >>901 ○7行達成されているもの ×未達成のもの ※レス番号では提示したり達成したりした番号を表示 ※おふざっけぽいものは抜いてありますが、ホカソ希望はご自由に ※次のスレでこのレス番号を記載するか、コピペしてください ※間違いがあったらごめんね
901 名前:デフォルトの名無しさん mailto:sage [02/09/26 03:16] ゲーム系 ○スロットゲーム >>16 ○迷路 >>171 >>366 >>472-473 ○ピンポン >>191 ○テトリス >>212 ○障害物よけゲーム >>224 ○パックマソ >>313 ○15パズル >>561 >>591 ○暇つぶしゲーム >>746 ×ブロック崩し >>643 >>642 ×詰めロードランナー >>634-635 >>651 ×3D迷路 >>662 >>698 ×囲碁 >>757 >>771 ×はさみ将棋 >>863 >>865 ×○ラクエ >>894-895 ×将棋(pc3.2ch.net/test/read.cgi/tech/1004395614/760-761 ) >>897
902 名前:デフォルトの名無しさん mailto:sage [02/09/26 03:17] 圧縮 ○ブロックソーティング >>386-387 ○rangecoder >>512-513 >>553 ○Huffman符号 >>572 >>750 >>752 ○スライド辞書圧縮 >>580 >>596 >>600 >>616 >>629 ○RLE >>696 >>728 ○アーカイバ >>729 >>736 >>739 >>741 ○LZW >>799
903 名前:デフォルトの名無しさん mailto:sage [02/09/26 03:18] グラフィックス ○PDTビューワ >>70 ○フラクタル画像出力 >>108 >>703-705 ○アスキーアート >>202 ○バナー生成 >>204 ○bmp2ppm >>474 >>>476 ○PNG >>491 ○マンデルブロー >>514 ×BMP >>131 ×レイトレーシング(pc3.2ch.net/test/read.cgi/tech/984182993/209 ) >>711 ×波紋 pc3.2ch.net/test/read.cgi/tech/984182993/678 ×パーティクル pc3.2ch.net/test/read.cgi/tech/984182993/675-676
904 名前:デフォルトの名無しさん mailto:sage [02/09/26 03:19] 計算 ○素数列挙 >>74 >>81 >>810 ○CRC >>447-448 ○DCT >>462 >>468 ○ヒルベルト曲線 >>644 >>652 ○SHA1 >>668 >>724 ○円周率 >>827 ネットワーク ○proxy >>208 ○SMTPクライアント >>285-286 ○SNTPクライアント >>311-312 ○POPクライアント >>475 ○jis2sjis >>496-497 >>506 ×FTPもどき >>332 ×POPクライアント+jis2sjis >>510 ×チャット >>529 >>547
905 名前:デフォルトの名無しさん mailto:sage [02/09/26 03:21] ツール ○インデントツール >>105 >>129 >>129 >>854 ○ひたんぼ語フィルタ >>317 >>321 ○時計 >>410 ×インデントツール >>327 ×grep >>896 デモ ○ねたをくれなんていってる時点で間違ってたんだ…(w >>350 >>363 ○砂嵐 >>384
906 名前:デフォルトの名無しさん mailto:sage [02/09/26 03:22] 言語 ○FORTHもどき >>841 ×BASIC(pc3.2ch.net/test/read.cgi/tech/984182993/497-518 ) >>626 その他 ×FreeBSDのdmesg|head -6を表示 >>730
907 名前:前スレ853 mailto:sage [02/09/26 04:36] あー。Perl 用空白除去ツールは 7 行達成してます。 $_=join" ",grep{s/(^\s*#.*)|\s+/ /g;length}<>;%k='()<>[]{}'=~/./g;s~(.*?)((?: (?:(?<![\$\%\&\*\@])(?:(?:m|q[qrwx]?)(?:([(<[{]).*?$k{$3}|([^(<[{ \w]).*?\4)| (?:s|tr|y)(?:([(<[{]).*?$k{$5}\ *\5.*?$k{$5}|([^(<[{ \w]).*?\6.*?\6))|(?<![\w]) /(?:\\/|[^/])*/)[a-z]*)|"(?:\\"|[^"])*"|'(?:\\'|[^'])*')~push@c,$1,$2;''~egx;$q =$c[0]=~m!^["'/]|([msy]|q[qrwx]?|tr)[^ \w]!;($_,@c)=map{++$q%2?split:$_}@c,$_; sub j{$_.=$_[0].shift@c}sub l(){length$_.$c[0]}sub p{print"$_\n";$_=shift@c}sub w(){/\w$/&&$c[0]=~/^\w/}78<l?79<l?p:w?p:j&&p:w?j" ":j while@c;p; コメント付きはここに。 boobar.hoops.ne.jp/rms/
908 名前:デフォルトの名無しさん mailto:sage [02/09/26 05:19] まとめ乙です〜。 970ぐらいで次スレに移ったときにコピペしましょ。
909 名前:デフォルトの名無しさん mailto:sage [02/09/26 05:27] ○ラクエで思い出したけど、プログラムポシェットにも1画面RPGってあったよね。 あれ七行で出来ないかな…。マップ移動もあるやつ。
910 名前:60cm浮き上がるストレート [02/09/26 14:18] >>909 マップ移動のみ。1~9で移動します。黒いところに行くと終了します。 char x,y,Y,X,m[][12]={"47764454244","77762222244","77622111224","66221111224", "22221111244","42222422224","22222522224","42222422044","22224422224", "44224424444","44444454444"},g;main(){printf("\x1b[>5h");for(y=x=1;;){for(Y=X= -2;Y<3;X==2?(X=-2,Y++):X++)printf("\x1b[%d;%dH\x1b[%dm\x1b[%dm ",Y+13,X*2+40, Y==0&&X==0?5:0,m[L(y+Y)][L(x+X)]-8);if(y==7&&x==8)exit(1);g=getch();if(g>48&&g <58){y+=1-(g-49)/3;x+=(g-49)%3-1;y=L(y);x=L(x);if(m[y][x]==49||m[y][x]==52){y -=1-(g-49)/3;x-=(g-49)%3-1;}}}}L(a){a-=a>=11?11:0;a+=a<=-1?11:0;return a;}
911 名前:デフォルトの名無しさん mailto:sage [02/09/26 14:28] 今度はここに出没かよ!>60
912 名前:デフォルトの名無しさん mailto:sage [02/09/26 16:54] まぁ>>910 には新スレ立ててもらいましょう。
913 名前:デフォルトの名無しさん mailto:sage [02/09/26 18:39] もう新スレいらないんじゃない?レベル低いし
914 名前:デフォルトの名無しさん mailto:sage [02/09/26 18:49] Prologインタープリタ作ってみたが、これは7行は無謀だな。 とりあえず15行 #define D(X,Y,Z) Y(){N*x=X();return c==Z>>6 ?s[4]=Z,s[6]=x,x=s+=4,x[3]=Y(),x:x;} typedef*P,N,*E[99];N*F[99],f,S[99999],*s=S,c,R,**G;C(){(c=getchar())<0?exit(0): c<33&&C();}T(){N*x;C();s[4]=c*64+(c-65<26U)+1;return'('==c?x=p(),C(),x:(C(),s+= 4);}D(T,Q,2884)D(Q,q,2820)D(q,p,3716)a(c){putchar(c);}W(N*x){r(&x);a(*x>>6 );*x& 4?a(40),W(x[2]),a(44),W(x[3]),a(41):0;}B(x,y){s+=4;*s=8;s[2]=x;s[3]=y;}r(P*x){N *y=*x;for(;y<=s&&**x&2;y+=4)*y==8&&y[2]==*x?*x=y[3]:0;}u(N*x,N*y){r(&x);r(&y); return x==y||(*x&2?*y&2&&x>y?B(y,x):B(x,y),1:*y&2?B(y,x),1:*x==*y?*x&4?u(x[2],y [2])&&u(x[3],y[3]):1:0);}I(N*x,E z){P*y=z+(*x>>6 ),w=s+=4;*w=*x;return*x&2?*y?*y :(*y=w):*x&4?w[2]=I(x[2],z),w[3]=I(x[3],z),w:x;}Y(x,y,z){s+=4;s[0]=0;s[1]=x;s[2 ]=y;s[3]=z;return s;}U(n,g,x){P*i=F,z,q=s;while(*i){E e={0};z=I(*i++,e);if(u(g, z[2])){X(Y(n+1,z[3],x));if(R<n+2)break;}s=q;}}X(N*x){N*g,z;R=999;x?(g=x[2])?U(x [1],g,x[3]),*g==2113?X(x[3]),R=R>x[1]?x[1]:R:*g==2820?X(Y(x[1],g[2],Y(x[1],g[3] ,x[3]))):0:X(x[3]):J();}J(){N i=0;while(i<99)G[i]?a(i),a(61),W(G[i++]),a(10):i ++;puts("yes");}main(){N*z;while(z=p()){E e={0};G=e;*z!=3716?W(z),a(10),X(Y(0,I (z,e),0)),puts("no"):(F[f++]=z,0);}} :-の代わりに:を使う。compound termはない。変数等は一文字のみ。 :のある入力はassertされて、ないのは問い合わせだとみなされる。 差分リストを使った7行クイックソートでも食わせてみてくれ t:!. o-(X,Y): z-(X,Y,(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,@)). z-(X,Y,(X,R)): !. z-(X,Y,(Y,R)): !,f. z-(X,Y,(Z,R)): z-(X,Y,R). q-(@,X-X):!. q-((X,R),Y-Z): v-(X,R,L,B), q-(L,Y-(X,W)), q-(B,W-Z). v-(P,(X,R),L,(X,B)): o-(P,X),!,v-(P,R,L,B). v-(P,(X,R),(X,L),B): v-(P,R,L,B).v-(P, @, @, @):t. q-((6,2,f,9,7,e,d,5,b,1,8,a,3,c,4,@),Y-@).
915 名前:デフォルトの名無しさん mailto:sage [02/09/26 19:30] >>913 他のスレに比べても十分良いレベルにはあると思うよ。 part2が作られたときも散々言われたけど、なかなかいい作品が出てきたし。 >>914 つーか、すげーよ! 10行未満には絶対すべきや! そしていつか7行に!!
916 名前:デフォルトの名無しさん mailto:sage [02/09/26 20:51] >>915 Part2でレベル下がったと思うけどな。 低レベルの作品をお互いにほめあってどんどんレベル落ちてるかと。
917 名前:デフォルトの名無しさん mailto:sage [02/09/26 21:40] >>916 Part3で回復を期待しましょう。
918 名前:デフォルトの名無しさん mailto:sage [02/09/26 22:00] >>916 そういうあなたの作品は?
919 名前:デフォルトの名無しさん mailto:sage [02/09/26 22:22] >>916 確かにRLEやgrep@perl、○ラクエなどはどうかと思ったけど。 (まだ7行プログラミングが普及していないせいもあるが) それでもpart1ではオセロやカラースネークくらいしか見られるものがなかった。 part2ではテトリスや各種データ圧縮がなかなかのレベルかと思うが、どうだろ。
920 名前:デフォルトの名無しさん mailto:sage [02/09/26 22:30] >>919 圧縮はPart1のレンジコーダーが最高峰でないの?
921 名前:デフォルトの名無しさん mailto:sage [02/09/26 23:10] >>920 part1のrangecoderはもっと短くできるから、それが再登場したら最強かも。 でも、詰め込み(縮め)度合いならば、part2の方がかなり熟成された感じが良い。 ただコンパイラ依存、環境依存になりかけているのが残念だけど。
922 名前:デフォルトの名無しさん mailto:sage [02/09/26 23:25] >>921 もっと短くしてみろよ
923 名前:デフォルトの名無しさん mailto:sage [02/09/26 23:33] >>922 #include <iostream> unsigned W,O,u=256,i=6,l,K,b,a[256],R=~0,y=1<<24,x=u;main(int,char**V){unsigned char*t=new unsigned char[1<<24];if(*V[1]-69){for(cin>>O;i--;)W=W*x|cin.get(); for(;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;for(y=4;y--;)t[O++]=W>>y*8;}cout.write(t,O);}
924 名前:923 mailto:sage [02/09/26 23:35] ちなみにもともとのようにgccオンリーでよいならば、 3行目をchar t[y];とできるから、もっと縮まるよん。
925 名前:デフォルトの名無しさん mailto:sage [02/09/27 00:11] 言っちゃなんだが大して変わってないな
926 名前:923 mailto:sage [02/09/27 00:15] >>925 まだpart2ができる前のものだからねぇ。すまんねぇ。 このスレで登場したrangecoderのように符号化と復号をいっしょにするとか、 今ならもっと縮まるかもしれない。>>925 が挑戦してみる?
927 名前:デフォルトの名無しさん mailto:sage [02/09/27 00:34] > #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);} 前スレのrangecoder。 エンコデコ一緒だろ、これ?
928 名前:デフォルトの名無しさん mailto:sage [02/09/27 00:41] >>927 forをひとつにまとめてしまうっていう手法のことだろ? g=*V[1]-69;としておいて、for(g?decode:encode;g?...:...;);とするやつ。
929 名前:デフォルトの名無しさん mailto:sage [02/09/27 04:12] Part1は無茶苦茶レベル高かったからな。 各コテハン達がしのぎを削ってたね。オフで逢った人たちもいるみたいだし。 見ているだけでわくわく出来た。 Part2も、テトリスとかいい作品はいっぱいあったんだけれど、 いい作品は何故か叩かれ、下らない作品がほめられる傾向が強かったね。 実際にPart1のコテハン達が全然来なくなってしまったしね。 include省いてアーキテクチャ限定して何が楽しいんだろう・・・ と愚痴を言ってみるテスト
930 名前:デフォルトの名無しさん [02/09/27 05:47] >>914 prolog15行はすごいね。 今lisp作ってるけどだらだら書いてたら100行超えちゃったよ・・。
931 名前:デフォルトの名無しさん mailto:sage [02/09/27 08:09] >>929 レベルが下がったのは同意だが、他のスレのように厨が入り込みにくいし、 住民の質も平均以上であると思われ。
932 名前:デフォルトの名無しさん mailto:sage [02/09/27 11:36] ROMしてる者ですが、基本テクニック集を作っていただけないでしょうか。 ん?私のような厨を排除するためにもテクニックは実例を見て盗め、ですか?
933 名前:デフォルトの名無しさん mailto:sage [02/09/27 11:38] その他力本願さ加減が素敵
934 名前:デフォルトの名無しさん mailto:sage [02/09/27 11:59] >>933 こちらが乗り込んで作ろうとすると質が下がると言うくせに。
935 名前:デフォルトの名無しさん [02/09/27 12:08] >>932 今、私はとってもいそがしい。 そこでだ。 キミが代わりに作っておいてくれないか?
936 名前:デフォルトの名無しさん [02/09/27 13:18] UmlToJavaを7行で作って欲しいのですが…。 書式:「入力行」 => 「出力行」 -type hoge => private type hoge {\n} #type hoge => protected (以下略 +type hoge => public (以下略 -type hoge(...) => private type hoge(...) {\n} #(以下略 +(以下略 「それ以外」 => 「そのまま出力」 あと、+(public)以外のときには public type getHoge() {\nreturn hoge;\n} public void setHoge(type hoge) {\n} をつけてくれるとうれしいです。
937 名前:936 mailto:sage [02/09/27 13:21] 書き忘れました。 実行時引数で与えたファイル名がクラス名になるようにしてください。
938 名前:デフォルトの名無しさん mailto:sage [02/09/27 13:59] ここって依頼スレか?
939 名前:936 mailto:sage [02/09/27 14:20] >>938 ネタを提供してやってるん…(゚д゚)ハッ…どうか作ってくださいm(_ _)m。
940 名前:デフォルトの名無しさん mailto:sage [02/09/27 17:56] >>935 ROMな私が作って良いものができると思ってるんですか?
941 名前:デフォルトの名無しさん mailto:sage [02/09/27 18:08] ifを3項演算子に書き換える、とかは圧縮する基本テクニックだろうが 結局のところは対象をいかに簡明でトリッキーなアルゴリズムに 変換できるか、に尽きると思うな。
942 名前:デフォルトの名無しさん mailto:sage [02/09/27 19:01] 論理演算、ビット演算、アルゴリズム、データ構造は必須。
943 名前:デフォルトの名無しさん mailto:sage [02/09/27 19:24] >>940 そんなことは問題じゃない! 気持ちの問題だ! あたってぶつかれ!
944 名前:デフォルトの名無しさん mailto:sage [02/09/27 19:27] >>940 そして砕け散れ!
945 名前:デフォルトの名無しさん mailto:sage [02/09/27 21:32] なんか今日はえらい背中を押しますね。 ROMってのは嘘で1度だけ書いてます。アレだったので叩かれましたが。。。 とりあえずC系の基本技、論理演算子と3項演算子の威力を数字にしてみます。 括弧はついていませんが、各条件部の前に!をつけても正しく動きます。 if(printf("1-1:"))printf("逝ってよし");else if(printf("1-2:"))printf("オマエモナー");else printf("シラネーヨ"); printf("1-1:")&&printf("逝ってよし")||printf("1-2:")&&printf("オマエモナー")||printf("シラネーヨ"); // 12バイト短縮 printf("1-1:")?printf("逝ってよし"):printf("1-2:")?printf("オマエモナー"):printf("シラネーヨ"); // 更に4バイト(演算子が全て2バイトから1バイトになった) 以上は単純で汎用的な短縮パターンですが、3項演算子は演算なだけにif文と違って 戻り値を利用できるので、then/else節に入る命令が同じなら printf(printf("1-1:")?"逝ってよし":printf("1-2:")?"オマエモナー":"シラネーヨ");// 更に16バイト とできます。(16バイトは"printf()"が2つ) なお、これ↓は型の都合上動かないようで。 printf(printf("1-1:")&&"逝ってよし"||printf(printf("1-2:")&&"オマエモナー"||"シラネーヨ"));
946 名前:デフォルトの名無しさん mailto:sage [02/09/27 21:47] そろそろ次スレですか?
947 名前:デフォルトの名無しさん mailto:sage [02/09/27 21:54] つーかprintfの戻りって何だっけ?
948 名前:デフォルトの名無しさん mailto:sage [02/09/27 21:55] printf("1-1:逝ってよし"); 最短。
949 名前:デフォルトの名無しさん mailto:sage [02/09/28 00:43] >>946 次スレは立てない方向じゃなかったの?
950 名前:デフォルトの名無しさん mailto:sage [02/09/28 00:58] >>949 なんで?つーかそれ何処から出た話?
951 名前:デフォルトの名無しさん mailto:sage [02/09/28 01:02] >>950 スレ建てお願いしまスタ
952 名前:950 mailto:sage [02/09/28 01:11] >>951 立てるのは別にいいけど、過去作品まとめてくれ
953 名前:デフォルトの名無しさん mailto:sage [02/09/28 01:16] >>950 レベルが落ちてるから立てなくてよくねぇ?という話は出てたな。 どうせ低下の一途を辿るなら、今のまま埋もれさせる方がいい、とかかな? 個人的にはせっかく出てきたハイレベルな常連を 厨房が叩いていたのを見た時点でこのスレの終わりを感じた。 過去作品は>>903-905
954 名前:デフォルトの名無しさん mailto:sage [02/09/28 01:17] 自己レス。>>900-905 。スマソ
955 名前:950 mailto:sage [02/09/28 01:17] つーか立てられるかわかんないけど・・ 試しに今からスレ立てて見るから、>>2-5 と>>900-906 とそれ以降のリンク、 誰か次スレに貼っつけてといてね。
956 名前:950 mailto:sage [02/09/28 01:20] 次スレ立てれました。 リンク貼りつけお願いします。 七行プログラミング part3 pc3.2ch.net/test/read.cgi/tech/1033143528/
957 名前:デフォルトの名無しさん mailto:sage [02/09/28 01:21] >>956 お疲れ
958 名前:デフォルトの名無しさん mailto:sage [02/09/28 03:03] やっぱりこのスレで止めておけばよかったね
959 名前:デフォルトの名無しさん mailto:sage [02/09/28 03:05] switch(1){case 1:printf("pc3");case 2:printf("2ch");default:printf("net")} (1==1)?printf("pc3"):(1==2)?printf("2ch"):printf("net")} 上下でやってること違うけど、switch文はやはり使えないな。予約語が長い。 走り抜けが利用できる、条件部が複雑だが等号で行ける、項数が多い。 その3点が揃えば使い道はあると思うが、なかなか無さそう。 まとめにくいなぁ・・・・・・。 3項演算は便利。インクリメント・デクリメントも基本。 ビット演算はとりあえず知っとく。 ~-1==0なので、EOF検知に使える。 >>692 のような優先順位を使ったカコイイ技(成果は1バイトだが)もあり。 論理演算が使われているところは隙があるかも。 あと、真理値表って便利。
960 名前:デフォルトの名無しさん mailto:sage [02/09/28 23:32] なんであんなことになっちまったんだろうなぁ
961 名前:デフォルトの名無しさん mailto:sage [02/09/28 23:37] みんなが少しずつ我慢できなかったから。
962 名前:デフォルトの名無しさん mailto:sage [02/09/29 00:13] >>961 > みんなが少しずつ我慢できなかったから。 つーか、ソースも書けねー奴が仕切るからだよ。ちゃんとソースさらして議論すりゃ、厨房はそれなりに淘汰されると思うよ。
963 名前:デフォルトの名無しさん mailto:sage [02/09/29 01:01] こちらで議論するのはなんだけど、 厨房の意見「どんなソースコードでもスレに貼っていいはずだ」 粘着の意見「7行スレは7行を目指す意志の無いソースを貼ってはいけない」 で、いいんだよね?俺は粘着派だな(w ちなみに、このスレではみんなそこそこ7行を目指していた(様な気がする)。 しかし、厨房増加の危険は出ていた。テトリスでSが叩かれ (しかも叩かれたのは内容ではなく「誰も興味ないから何度も書き込むな」) 円周率でトリッキーの1を叩く(これも内容ではなく「有名人はもう出てくるな」)。 最終的に明らかに7行の意志のないドラクエが出てきても叩かれない (しかもコードの質としては、個人的にはテトリスや円周率に比べて低いように感じた) そりゃスレの質も落ちるよなぁ。 >>962 ソースさらして議論ってどういう意味だろう?
964 名前:デフォルトの名無しさん mailto:sage [02/09/29 03:08] 2chに質を求める奴はなんつぅか・・・・・・頭が悪いんじゃなかろうか。 削除を行ったり規制を行ったりする管理人がいれば質も上がるだろうが、 2chは議論の場所しか貸してくれない。 質を求める奴は適当なHN使って自分でHP立ち上げて、ここに1回宣伝に来ればいいのに。
965 名前:962 mailto:sage [02/09/29 03:26] >>963 > ソースさらして議論ってどういう意味だろう? 「どんなソースでも貼れ」「いや、七行にならない奴はダメだ」とか言ってたって議論は平行線だと思うよ。 27行のドラクエがダメだって言うけど、じゃあ何行ならいいの ? 27行でスカスカのコードもあるし、8行でもキチキチのコードもあるよね。 結局コードの行数って言っても一概に何行までならいいなんて言えないと思う。(かといって、一万行とか貼られても困るけどね。) だから、とりあえず貼ってもらって、どう見てもダメな奴はそう指摘すりゃいいと思う。 少なくとも、「どんなソースでも貼れ」「いや、七行にならない奴はダメだ」なんて言う不毛な議論よりはマシになると思うよ。
966 名前:デフォルトの名無しさん mailto:sage [02/09/29 03:53] >>964 part1は機能していたのにな。知名度が上がるとダメなのかな? >>965 963ではないけど、7行にする意志があれば何行でもいいんじゃない? ドラクエはどうかしらないが、part3のlispはあり得ないよな。
967 名前:デフォルトの名無しさん mailto:sage [02/09/29 04:40] part3は、278からマトモそうな流れになってきた模様 pc3.2ch.net/test/read.cgi/tech/1033143528/278-
968 名前:デフォルトの名無しさん [02/09/29 06:20] >>965 「このスレ」に於いては、七行でないとダメだろう スレタイが前提になることを肝に銘じなくてはいかんよ 10行でOKと思う奴は10行のスレを立てれ
969 名前:デフォルトの名無しさん mailto:sage [02/09/29 06:33] >>968 つーか元々perl少年のDVD解除7行事件簿から始まった事だろ。 十分短きゃそれでいいんだよ。
970 名前:デフォルトの名無しさん mailto:sage [02/09/29 06:35] >>968 みたいなやつがのさばってからだよ。 スレの雲行きが悪くなったのは
971 名前:デフォルトの名無しさん mailto:sage [02/09/29 06:40] >>968 つーか、あげるなボケ!
972 名前:デフォルトの名無しさん mailto:sage [02/09/29 07:01] 上げられたくないなら埋め立てろ
973 名前:デフォルトの名無しさん mailto:sage [02/09/29 10:18] >>968 >「このスレ」に於いては、七行でないとダメだろう > スレタイが前提になることを肝に銘じなくてはいかんよ > 10行でOKと思う奴は10行のスレを立てれ じゃあ聞くけど、貼る奴は7行になると思って貼らないといけないの ? 自分の実力じゃ10行までしかできなかったけど、もしかしたらエキスパートが7行にしてくれるかもしれないじゃん。 あと、勢いあまって6行とかしたら失格ですか ? まあ、何十行もある奴は論外として、元コードが10行位なら状況によっては7行ぐらいなることもあるでしょ ? 何でそんなにスレタイトルに拘るのかわかんらんよ。
974 名前:デフォルトの名無しさん mailto:sage [02/09/29 10:58] >>973 自分でやらなくても(達成できなくても)7行への希望があるなら良いんじゃないのか 出したか無いけど、新スレのlispとか7行にするつもりがあるとは思えないだろ。
975 名前:デフォルトの名無しさん mailto:sage [02/09/29 11:45] >>974 > 出したか無いけど、新スレのlispとか7行にするつもりがあるとは思えないだろ。 コード見ないとなんとも言えないよ。
976 名前:デフォルトの名無しさん mailto:sage [02/09/29 12:06] >>975 >GC、関数トレース、リスト操作、再帰、高階、内部関数 奇跡が起きてもこれだけを7行付近まで持っていくのは不可能と断言できる。
977 名前:デフォルトの名無しさん mailto:sage [02/09/29 17:22] >>975 その程度のことも解らない人はこの板に来ない方がいい
978 名前:デフォルトの名無しさん mailto:sage [02/09/29 17:53] >>976 もし出来たら、目でピーナッツ噛めよな
979 名前:デフォルトの名無しさん mailto:sage [02/09/29 17:53] >>977 > その程度のことも解らない人はこの板に来ない方がいい ふ〜〜〜ん、あんたはコードを見なくてもわかるわけね、すごいね。
980 名前:デフォルトの名無しさん mailto:sage [02/09/29 18:33] >>978-979 粘着見苦しい。つーか解るだろ(w
981 名前:デフォルトの名無しさん mailto:sage [02/09/29 18:39] 断定して排除するのも見苦しいぞ。 選民思想が強すぎる。
982 名前:デフォルトの名無しさん mailto:sage [02/09/29 18:44] まあ無理っぽい率99.8%超えてるのは認めよう でも、男なら いや 漢なら! 敢えて0.2%に挑む!
983 名前:デフォルトの名無しさん mailto:sage [02/09/29 18:50] >>981 「犬が卵を産まないと断定できるのか?」 ton.2ch.net/test/read.cgi/gline/1028811653/
984 名前:デフォルトの名無しさん mailto:sage [02/09/29 19:14] >>982 無理っぽい率100%越えてるって。
985 名前:デフォルトの名無しさん mailto:sage [02/09/29 19:18] >>984 えーやっぱりそうかなー でも100%のヒーローなんているわけないよと わかってんだからはりきるしかないですな
986 名前:デフォルトの名無しさん mailto:sage [02/09/29 19:44] >984 ヤマトじゃあるまいしどうやったら100%超えるのかと。 でも見たかったな44行lisp。
987 名前:デフォルトの名無しさん mailto:sage [02/09/29 19:50] GCとかトレースなどはあきらめても問題ないんじゃ? 順次機能を削っていけば…
988 名前:デフォルトの名無しさん mailto:sage [02/09/29 19:57] >>987 よし作れ
989 名前:デフォルトの名無しさん mailto:sage [02/09/29 19:59] >>988 俺はlispを知らない(w ので、仕様を決めてくれ
990 名前:デフォルトの名無しさん mailto:sage [02/09/29 20:08] 7行職人に到る過程として「44行でこんなのできました」というのも 大切にすべきではと思う。7行スレでやるのはスレ違いだが。 無下に断るよりは隔離スレ(釣りバカ)で質疑応答を受けたり 気が向いた人が添削・指摘するなりしたほうがお互いベターでは?
991 名前:デフォルトの名無しさん mailto:sage [02/09/29 20:47] >>990 > 無下に断るよりは隔離スレ(釣りバカ)で質疑応答を受けたり > 気が向いた人が添削・指摘するなりしたほうがお互いベターでは? ソース見てから、「あっちへ逝け」と振るんじゃダメなん ?
992 名前:デフォルトの名無しさん mailto:sage [02/09/29 21:02] >>991 いいと思うぞ
993 名前:989 mailto:sage [02/09/29 21:05] 俺はlispを知らないので、代わりにlisp風?ミニ電卓を作ってみた。 "(* (+ 2 3) 4)" みたいな計算ができる。 貧弱な上短くする余地もまだまだある、つーか手抜きだが、その辺は好きに弄ってくれ。 #include<stdio.h> char s[999],*p=s;a(void){int r=0;if(*p=='('){char c=*++p;++p;while(*p==32)++p; if(c=='+')r=a()+a();else if(c=='-')r=a()-a();else if(c=='*')r=a()*a();else if( c=='/')r=a()/a();else if(c=='%')r=a()%a();else if(c=='p'){r=a();printf("%d\n", r);}++p;}else do{r=r*10+*(p++)-'0';}while(*p!=32&&*p!=0&&*p!=')');while(*p==32 )++p;return r;}main(){gets(s);printf("%d\n",a());return 0;}
994 名前:デフォルトの名無しさん mailto:sage [02/09/29 21:14] >>993 つまり、逆ポーランド記法の電卓ってこと?
995 名前:989 mailto:sage [02/09/29 21:21] 逆ポーランド記法と正反対で、演算子が前に来るから…何て言うんだろ? 表示のpとループ構文l(←もちろん独自仕様)加えて7行に増やした(w 例えば(l 10 (p 10)) で 10を10回表示。 #include<stdio.h> char s[999],*p=s;a(void){int r=0;if(*p=='('){char c=*++p;++p;while(*p==32)++p; if(c=='+')r=a()+a();else if(c=='-')r=a()-a();else if(c=='*')r=a()*a();else if( c=='/')r=a()/a();else if(c=='%')r=a()%a();else if(c=='p'){r=a();printf("%d\n", r);}else if(c=='l'){int i,n=a();char*b=p;for(i=0;i<n;++i){p=b;r=a();}}++p;} else do{r=r*10+*(p++)-'0';}while(*p!=32&&*p!=')');while(*p==32)++p;return r;} main(){gets(s);printf("%d\n",a());return 0;}
996 名前:デフォルトの名無しさん mailto:どうせネタだろ [02/09/29 21:25] >>994 > つまり、逆ポーランド記法の電卓ってこと? 逆ポーランドは、反対。 2 3 + 4 * とか入力すると、20 とか出力される。HP の奴が有名。 ポーランド記法は、* + 2 3 4 とか入力する。
997 名前:デフォルトの名無しさん mailto:sage [02/09/29 21:27] HPの電卓は最高だな。クソCompaqめが… 1000取っていい?
998 名前:デフォルトの名無しさん mailto:sage [02/09/29 21:28] >>996 ネタかどうかしらないがageるな
999 名前:デフォルトの名無しさん mailto:sage [02/09/29 21:32] 次スレ:七行プログラミング part3 pc3.2ch.net/test/read.cgi/tech/1033143528/l50 兄弟スレ:「釣りバカ日誌パート1」 pc3.2ch.net/test/read.cgi/tech/1033220509/l50 ここは 乂1000取り合戦場乂 となりますた。。。 \∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!! ,,、,、,,, /三√ ゚Д゚) / \____________ ,,、,、,,, /三/| ゚U゚|\ ,,、,、,,, ,,、,、,,, ,,、,、,,, U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/ //三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧ ∪ ∪ ( ) ( ) ( ) ) ,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧ ,,、,、,,, ( ) ( ) ( ) ( )
1000 名前:997 ◆1O00getQ mailto:お言葉に甘えて [02/09/29 21:32] \\ // ♪ \\ キョウモゲンキニ 1000get♪ ミンナナカヨク 1000get♪ // ♪ \\ // ♪ ♪ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧∧ ♪ ♪ ∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧ ♪ (゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧ ♪ ∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*) ♪ ─♪──(゚0 ゚*)| ∪(゚0 ゚*)| ∪(゚0 ゚*)| ∪(゚0 ゚*)| ∪(゚0 ゚*)| ∪(゚0 ゚*) | ∪(゚0 ゚*) | ∪─────── | ∪ | | ∪| | | ∪. | | | ∪| | .| ∪| | | ∪ | | | ∪ | |〜 ♪ ♪ | | U U .| | U U | | U U. | | U U .| | U U | | U U | | U U ♪ U U U U U U U U U U U U U U
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。