1 名前:デフォルトの名無しさん [02/04/15 12:09] 7行×79文字なら言語は問いません。 過去作品は>>2-5 を参照。 ■前スレ pc.2ch.net/test/read.cgi/tech/984182993/
477 名前:デフォルトの名無しさん [02/07/10 21:36] 保守
478 名前:デフォルトの名無しさん mailto:sage [02/07/10 21:41] >>477 早っ (゚Д゚)
479 名前:デフォルトの名無しさん [02/07/10 22:35] popクライアント キタ━━━(^∀゚)━━━!!
480 名前:デフォルトの名無しさん mailto:sage [02/07/11 18:47] 寄せ集めで作ってみた無圧縮PNG。10行デス CRCは>>448 のを使わせてもらいました #include <stdio.h> typedef unsigned U;U X=128,C,t[256],i,j,a=256,h[17]={73,72,68,82},d[1<<18]={73, 68,65,84,120,218,1},l,M=1,N;FILE*f;B(U b){fputc(b,f);}W(U n){B(n>>24 );B(n>>16 ); B(n>>8 );B(n);}S(U*b,U n){for(i=0;i<n;)B(b[i++]);for(i=0;i<a;t[i++]=C)for(C=i,j= 9;--j;)C=C/2^(C&1?0xedb88320:0);for(i=0,C=~0;i<n;)C=t[C%a^b[i++]&0xff]^C/a;W(~C );}main(){f=fopen("mona.png","wb");W(0x89504e47);W(0xd0a1a0a);l=X+X*X*3;h[7]=h[ 11]=X;h[12]=8;h[13]=2;W(13);S(h,17);d[7]=l;d[8]=l>>8 ;d[9]=~l;d[10]=~l>>8 ;l+=11; for(i=11;i<l;M=(M+d[i++])%65521,N=(N+M)%65521)d[i]=(i-11)%(X*3+1)?i%a:0;d[i++]= N>>8 ;d[i++]=N;d[i++]=M>>8 ;d[i++]=M;W(l);S(d,l+4);W(0);W(0x49454e44); W(0xae426082);}
481 名前:デフォルトの名無しさん mailto:sage [02/07/11 20:43] これは流石に7行は無理じゃなかろか?
482 名前:480 mailto:sage [02/07/12 14:08] 9行・・・これ以上は無理ぽ #include <stdio.h> typedef unsigned U;U X=128,C,t[256],i,j,a=256,h[17]={73,72,68,82},d[1<<18]={73, 68,65,84,120,218,1},l,M=1,N;FILE*f;B(U b){fputc(b,f);}W(U n){B(n>>24 );B(n>>16 ); B(n>>8 );B(n);}S(U*b,U n){for(i=0;i<a;t[i++]=C)for(C=i,j=9;--j;)C=C/2^(C&1? 0xedb88320:0);for(i=0,C=~0;i<n;C=t[C%a^b[i++]&0xff]^C/a)B(b[i]);W(~C);}main(){f =fopen("mona.png","wb");W(0x89504e47);W(0xd0a1a0a);l=X+X*X*3;h[7]=h[11]=X;h[12] =8;h[13]=2;W(13);S(h,17);d[7]=l;d[8]=l>>8 ;d[9]=~l;d[10]=~l>>8 ;l+=11;for(i=11;i< l;M=(M+d[i++])%65521,N=(N+M)%65521)d[i]=(i-11)%(X*3+1)?i%a:0;d[i++]=N>>8 ;d[i++] =N;d[i++]=M>>8 ;d[i]=M;W(l);S(d,l+4);W(0);W(0x49454e44);W(0xae426082);}
483 名前:448 mailto:sage [02/07/12 18:45] >>480 縮めてみました。 #include <stdio.h> typedef unsigned U;U*x,X=128,i,j,a=256,t[256],l,M=1,k;FILE*f;W(U n){for(i=4;i-- ;)fputc(n>>i*8,f);}S(U*b,U n){W(n-4);for(i=~0;n--;i=t[i%a^*b++%a]^i/a)fputc(*b, f);W(~i);}main(){U h[17]={73,72,68,82,0,0,0,X,0,0,0,X,8,2},d[1<<18]={73,68,65, 84,120,218,1,l=X+X*X*3,l/a,~l,~l/a};f=fopen("mona.png","wb");for(i=a;i--;k=l/X) for(k=i,j=9;--j;x=d+11)t[i]=k=k/2^(k&1?0xedb88320:0);W(0x89504e47);W(0xd0a1a0a) ;for(S(h,17);l;l--)j+=M+=*x++=l%k?l%a:0,M%=i=65521,j%=i;*x++=j/a;*x++=j;*x++=M/ a;*x++=M;S(d,x-d);W(0);fputs("IEND\256B`\202",f);}
484 名前:デフォルトの名無しさん mailto:sage [02/07/12 22:43] >>483 もうわからん煤i´Д`;)
485 名前:484 [02/07/12 22:46] つーか、新ネタ来たらあげて良し。
486 名前:デフォルトの名無しさん mailto:sage [02/07/12 23:21] mona.pngって…
487 名前:デフォルトの名無しさん mailto:sage [02/07/12 23:23] >>486 モナの絵が出てくるかと思ったけど、そうじゃないところが2ちゃんらしいというか。
488 名前:デフォルトの名無しさん [02/07/14 00:38] age
489 名前:484 mailto:sage [02/07/14 02:18] これ以上はちょっと苦しいですね。 標準出力にしてもよいなら、後6文字くらいなんですが。 #include <stdio.h> unsigned t[256],M=1,i,j,k,l,X=128,a=256;FILE*f;W(int n){for(i=4;i--;)putc(n>>i* 8,f);}S(int*b){W(X-4);for(i=~0;X--;i=t[i%a^putc(*b++,f)%a]^i/a);W(~i);}main(){ int*x,h[17]={73,72,68,82,0,0,0,X,0,0,0,X,8,2},d[1<<16]={73,68,65,84,120,218,1,l =X+X*X*3,l/a,~l,~l/a};f=fopen("mona.png","wb");for(i=a;i--;k=l/X)for(k=i,j=9;-- j;x=d+11)t[i]=k=k/2^(k&1?0xedb88320:0);W(0x89504e47);W(0xd0a1a0a);for(X=17,S(h) ;l;l--)j+=M+=*x++=l%k?l%a:0,M%=i=65521,j%=i;*x++=j/a;*x++=j;*x++=M/a;*x++=M;X=x -d;S(d);W(0);fputs("IEND\256B`\202",f);}
490 名前:デフォルトの名無しさん mailto:sage [02/07/14 02:21] 失礼。 484 ではなく 448 でした。
491 名前:448 [02/07/14 02:59] 標準出力へ無圧縮 PNG を吐き出す7行プログラム #include <stdio.h> unsigned t[256],M=1,i,j,l,X=128,a=256;W(int n){for(i=4;i--;)putchar(n>>i*8);}S( int*b){W(X-4);for(i=~0;X--;i=M^i/a)for(M=i%a^putchar(*b++)%a,j=9;--j;)M=M/2^(M& 1?0xedb88320:0);W(~i);}main(){int*x,h[17]={73,72,68,82,0,0,0,X,0,0,0,X,8,2},d[1 <<16]={73,68,65,84,120,218,1,l=X+X*X*3,l/a,~l,~l/a};W(0x89504e47);W(0xd0a1a0a); X=l/X;for(x=d+11;l;l--)j+=M+=*x++=l%X?l%a:0,M%=i=65521,j%=i;*x++=j/a;*x++=j;*x ++=M/a;*x++=M;X=17;S(h);X=x-d;S(d);W(0);printf("IEND\256B`\202");}
492 名前:デフォルトの名無しさん mailto:sage [02/07/14 10:39] ってかコンパイルとおらん・・・。 「不正な初期化」
493 名前:448 mailto:sage [02/07/14 13:28] >>492 gcc -ansi foo.c として通ったから問題ないと思った・・・ どこがだめだかわかります? h[] と d[] の初期化かなぁ
494 名前:448 mailto:sage [02/07/14 13:47] >>492 通らないコンパイラは bcc32 かな。 gcc も -pedantic を付けたら通らなかった。 配列の初期化はコンパイル時に決定すべし、ということを忘れていたよ・・・欝
495 名前:デフォルトの名無しさん mailto:sage [02/07/14 13:56] ------ ビルド開始 : プロジェクト : 491, 構成 : Debug Win32 ------ コンパイルしています... main.cpp f:\programs\C++.net\7行\part2\491\main.cpp(2) : warning C4508: 'W' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 f:\programs\C++.net\7行\part2\491\main.cpp(4) : warning C4508: 'S' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 f:\programs\C++.net\7行\part2\491\main.cpp(7) : warning C4244: '=' : '__w64 int' から 'unsigned int' に変換しました。データが失われているかもしれません。 リンクしています... ビルドログは "file://f:\programs\C++.net\7行\part2\491\Debug\BuildLog.htm" に保存されました。 491 - エラー 0、警告 3 ---------------------- 終了 ---------------------- ビルド : 1 正常終了、0 失敗、0 スキップ
496 名前:392 [02/07/15 10:40] >>475 で受信したメッセージのSJISの本文を読めるようにする rcvmail サーバ名 ユーザ名 パスワード メール番号 | tosjis #include <stdio.h> int x,y=0,f=0,c=-1,h,l;int T(int j){h=(j>>8 )&255;l=j&255;l+=(h&1)?31:125;if(l> 126)l++;h=((h-33)>>1 )+129;if(h>159)h+=64;return(h<<8)|l;}main(){while((x=getch\ ar())!=EOF)if(++c||x!=27)if(c!=1||!f||x!=40)if(c!=1||f||x!=36){if(c!=2||x!=66){ if(f)if(x<33||x>126)putchar(x);else if(!y)y=x;else{x=T(x|(y<<8));y=0;putchar(x >>8 );putchar(x&255);}else putchar(x);}else f^=1;c=-1;}}
497 名前:デフォルトの名無しさん mailto:sage [02/07/15 19:48] >>496 縮めてみました。 #include <stdio.h> int x,y,f,c=-1;main(){while(~(x=getchar()))if(++c||x-27)if(c-1||!f||x-40)if(c-1 ||f||x-36){if(c-2||x-66)f&&32<x&&x<127&&!(c=!y)?x+=y&1?31:125,x>126?x++:0,y=(y- 33)/2+129,putchar(y>159?y+64:y),y=0:0,c?y=x:putchar(x);else f^=1;c=-1;}}
498 名前:デフォルトの名無しさん mailto:sage [02/07/15 20:24] 4行…(~~~ ゚ ∀~)~~~ ゚ メダマ ボーン
499 名前:デフォルトの名無しさん [02/07/15 20:28] >>498 ワラタ。 ( ~~~゚ ∀~)~~~ ゚ メダマ ボーン みんなご一緒に… ( ~~~ ゚ ∀~)~~~ ゚ メダマ ボーン 意味不明なところで>>500 getしてください。
500 名前:デフォルトの名無しさん [02/07/15 20:30] 500!! 7行は永遠に不滅です!
501 名前:デフォルトの名無しさん [02/07/15 20:32] >>500 はげどー
502 名前:デフォルトの名無しさん mailto:sage [02/07/15 20:35] 七行はPart2で終わりです
503 名前:デフォルトの名無しさん mailto:sage [02/07/15 20:46] Part2で終り?!・・・( ~~~゚ ∀~)~~~ ゚ メダマ ボーン
504 名前:デフォルトの名無しさん mailto:sage [02/07/15 20:48] 7行どころか7行未満にする達人が増えたので、今度は 7行以下プログラミング になります。
505 名前:デフォルトの名無しさん [02/07/15 20:51] >>497 を >>475 の pop クライアントに融合させ、 直接 SJIS でメールを読むことができるようにならんかなぁ お題のつもりなので age ます
506 名前:497 mailto:sage [02/07/15 21:59] これ以上は難しそうなので、終わりにします。 メールの方は良くわからないので、 >>505 のお題は他の方、どうぞお願いします。 #include <stdio.h> int x,y,f,c=-1;main(){while(~(x=getchar()))if(++c||x-27)if(c-1||!f||x-40)if(c-1 ||f||x-36){c==2&&x==66?f^=1:(f&&32<x&&x<127&&!(c=!y)?x+=y&1?x>95?32:31:126,y=(y -33)/2+129,putchar(y>159?y+64:y),y=0:0,c?y=x:putchar(x));c=-1;}}
507 名前:デフォルトの名無しさん mailto:sage [02/07/16 00:00] (~~~ ゚ ∀~)~~~ ゚ メダマ ボーン
508 名前:デフォルトの名無しさん [02/07/16 20:33] 保持age
509 名前:デフォルトの名無しさん mailto:age [02/07/17 01:00] repeat cls 0:mes ""+h+":"+m+":"+s wait 100 s+ if s=60{m+:s = 0} if m=60{h+:m = 0} loop
510 名前:392 [02/07/17 15:12] >>505 のお題に応えてみたけど・・・ とりあえず、くっつけてみただけ #include <WinSock.h> char z[512];int s,r,S,x,f,y,c=-1;M(){z[recv(s,z,512,0)]=0;for(r=0;x=z[r++];)if( ++c||x-27)if(c-1||!f||x-40)if(c-1||f||x-36){c==2&&x==66?f^=1:(f&&32<x&&x<127&&! (c=!y)?x+=y&1?x>95?32:31:126,y=(y-33)/2+129,putchar(y>159?y+64:y),y=0:0,c?y=x:\ putchar(x));c=-1;}}T(x,y){r=sprintf(z,x,y);send(s,strcat(z,"\r\n"),r+2,0);M();} main(int c,char** v){SOCKADDR_IN a={2,28160};WSAStartup(257,z);a.sin_addr=*((P\ IN_ADDR)*(gethostbyname(v[1]))->h_addr_list);connect(s=socket(2,1,0),&a,16);M() ;T("USER %s",v[2]);T("PASS %s",v[3]);if(c>4&&(c=atoi(v[4]))>0){T("LIST %d",c); sscanf(z,"%s%d%d",z+r,&r,&S);T("RETR %d",c);while((S-=r)>=0)M();}T("QUIT",0);c\ losesocket(s);WSACleanup();printf("\r\n");} 現在、10行
511 名前:デフォルトの名無しさん [02/07/19 18:21] age
512 名前:七誌饅頭 ◆Pc9801rE [02/07/20 17:23] 静的RangeEncoderです encode inputfile outputfileとして使ってください。 unsigned longのかわりにsize_tを使うなど、外道なことをしています。 #include <stdio.h> size_t l=0,r=0xffffffff,z,u[257];unsigned char f[256];main(int a,char**v){FILE *n=fopen(v[1],"rb"),*o=fopen(v[2],"wb");int i,c;fseek(n,0,2);z=ftell(n);fwrite (&z,4,1,o);fseek(n,0,0);while((c=fgetc(n))!=-1)if(f[c]!=255)f[c]++;for(i=0;i< 256;i++)u[i+1]=u[i]+f[i];fwrite(f,1,256,o);fseek(n,0,0);while((c=fgetc(n))!=-1 ){r/=u[256];l+=u[c]*r;r*=f[c];while((l^l+r)<1<<24||r<1<<16&&((r=65535&~l+1),1) ){fputc(l>>24 ,o);r<<=8;l<<=8;}}for(i=0;i<4;i++){fputc(l>>24 ,o);l<<=8;}}
513 名前:七誌饅頭 ◆Pc9801rE mailto:sage [02/07/20 17:24] ついでにDecoder #include <stdio.h> unsigned char f[256];size_t l,r=0xffffffff,c,q,z,u[257],i;main(int a,char**v){ FILE*n=fopen(v[1],"rb"),*o=fopen(v[2],"wb");fread(&z,4,1,n);fread(f,1,256,n); for(i=0;i<256;i++)u[i+1]=u[i]+f[i];for(i=0;i<4;i++)c=c<<8|fgetc(n);while(z){r /=u[256];q=(c-l)/r;if(q>=u[256])return;for(i=0;i<256&&q>=u[i+1];i++);if(i>=256 )break;fputc(i,o);z--;l+=u[i]*r;r*=f[i];while((l^l+r)<1<<24||r<1<<16&&((r=~l+1 &65535),1)){c=c<<8|fgetc(n);r<<=8;l<<=8;}}}
514 名前: ◆iM7eXrMU mailto:sage [02/07/20 18:20] C言語+Win32でマンデルブロー。 cygwin で gcc -mno-cygwin -mwindows でコンパイル。 2行目はs=倍率、x=x座標、y=y座標。適当に変えれ。 s=2400,x=500,y=1030なんかも良いかも。 #include <windows.h> int s=5800,x=1100,y=3000; m(double a,double b){int t=100;double c,d,e,f;c=a=(a+x)/s;d=b=(b+y)/s;while(t-- ){e=c*c-d*d+a;f=2*c*d+b;if(e*e+f*f>4)return 0;c=e;d=f;}return 1;}int WINAPI WinMain(HINSTANCE q,HINSTANCE w,PSTR e,int r){HDC a=CreateDC("DISPLAY",0,0,0); double i,j,k=0.5;for(j=0;j<400;j++)for(i=0;i<400;i++)SetPixel(a,i,j,255-RGB(((m (i,j)+m(i+k,j)+m(i+k,j+k)+m(i,j+k)))*63,0,0));DeleteDC(a);}
515 名前:デフォルトの名無しさん [02/07/20 21:05] >7行×79文字なら言語は問いません。 >過去作品は>>2-5 を参照。 これ7行プログラミングじゃなくて、素直に553文字プログラミングにしたほうが いいような気がする。 改行文字はカウントに含まない。 それでいいじゃん。 本質はそういう事だし、読みづらいだけ。 多分ガイシュツなんだろうけど。 あと悪気はありません。これ面白いと思います。
516 名前:デフォルトの名無しさん mailto:sage [02/07/20 21:14] 改行をいかに避けるかにも面白さがあるんじゃないかな?ともおもう
517 名前:デフォルトの名無しさん mailto:sage [02/07/20 22:00] >>512 >>513 符号と復号を別々にしても、いまさらという感じがする。 前スレ pc3.2ch.net/test/read.cgi/tech/984182993/745 で、 両者を併せて7行にしてしまっている(こちらは動的だが)。 できれば、静的バージョンもあわせて7行を目指して頑張って欲しい。
518 名前:517 mailto:sage [02/07/20 22:10] どうでもいいことなのかもしれないが、 過去レスで使われているテクニックをもっと使って欲しいと思ふ。 for 文の記述 for(i=0;i<x;i++){} --> for(i=x;i--;){} シフト演算の置換 x<<=8,y>>=8; --> a=256;x*=a;y/=8; ビット演算の利用 x=0xffffffff;while((c=getchar())!=EOF){} --> x=~0;while(~(c=getchar())){}
519 名前:デフォルトの名無しさん mailto:sage [02/07/21 11:53] >>518 参考になります。 過去ログあんまり読んでなので。なんとなくやっただけだし。 今9行。exec E input outputでエンコード exec d input outputでデコード ファイルの入出力が痛い。 #include <stdio.h> size_t l=0,r=~0,z,q,e,u[257],g;unsigned char f[256];main(int a,char**v){FILE*n =fopen(v[2],"rb"),*o=fopen(v[3],"wb");int c=4,x=256;if(g=*v[1]-69){fread(&z,4, 1,n);fread(f,1,x,n);for(;c--;)e=e*x|fgetc(n);}else{while(~(c=fgetc(n)))z++,f[c ]<255?f[c]++:0;fwrite(&z,4,1,o);fwrite(f,1,x,o);fseek(n,0,0);}for(c=0;c<x;c++) u[c+1]=u[c]+f[c];while(g?z--:~(c=fgetc(n))){r/=u[x];if(g){if((q=(e-l)/r)>=u[x] )break;for(c=x;--c&&q<u[c];);fputc(c,o);}l+=u[c]*r;r*=f[c];while((l^l+r)<1<<24 ||r<1<<16&&((r=65535&~l+1),1))g?(e=e*x|fgetc(n)):fputc(l>>24 ,o),r*=x,l*=x;}if( !g)for(c=4;c--;)fputc(l>>24 ,o),l*=x;}
520 名前:デフォルトの名無しさん mailto:sage [02/07/21 14:55] #include <stdio.h> size_t l,r=~0,z,q,e,u[257],g,f[256];main(int a,char**v){FILE*n=fopen(v[2],"rb" ),*o=fopen(v[3],"wb");int c=4,x=256,(*t)()=fgetc;if(g=*v[1]-69)for(fread(&z,4, 1,n),fread(f,4,x,n);c--;)e=e*x|t(n);else{while(~(c=t(n)))z++,f[c]<255?f[c]++:0 ;fwrite(&z,4,1,o);fwrite(f,4,x,o);fseek(n,0,0);}for(c=0;c<x;c++)u[c+1]=u[c]+f[ c];while(g?z--:~(c=t(n))){r/=u[x];if(g){for(q=(e-l)/r,c=x;--c&&q<u[c];);fputc( c,o);}for(l+=u[c]*r,r*=f[c];(l^l+r)<1<<24||r<1<<16&&(r=65535&~l+1);)g?(e=e*x|t (n)):fputc(l>>24 ,o),r*=x,l*=x;}if(!g)for(c=4;c--;)fputc(l>>24 ,o),l*=x;} 出力サイズは増えるが八行。 これ以上は厳しいかも
521 名前:デフォルトの名無しさん mailto:sage [02/07/21 18:14] >>520 協力しようと思いましたが、あまり縮みませんね。 ロジック部が良くわからないので、ソース追いかけ中です。 定数やそのシフトを変数にできそう。(1<<24とか) f=u-1 で置き換えると、もう少し短くなりそうですが・・・ #include <stdio.h> size_t l,r=~0,z,q,e,u[257],f[256],c=5,x=256;main(int g,char**v){FILE*n=fopen(v[ 2],"rb"),*o=fopen(v[3],"wb");int(*t)()=fgetc;if(g=*v[1]-69)for(fread(&z,4,1,n), fread(f,4,x,n);--c;)e=e*x|t(n);else{for(;~(c=t(n));f[c]<255?f[c]++:0)z++;fwrite (&z,4,1,o);fwrite(f,4,x,o);fseek(n,c=0,0);}for(;c<x;c++)u[c+1]=u[c]+f[c];while( g?z--:~(c=t(n))){r/=u[x];if(g){for(q=(e-l)/r,c=x;--c&&q<u[c];);fputc(c,o);}for( l+=u[c]*r,r*=f[c];(l^l+r)<1<<24||r<1<<16&&(r=65535&~l+1);)g?e=e*x|t(n):fputc(l >>24 ,o),r*=x,l*=x;}for(c=4;!g&&c--;)fputc(l>>c*8,o);}
522 名前:デフォルトの名無しさん mailto:sage [02/07/21 20:14] int(*t)()=fgetcはsize_tに移動しても大丈夫かと(警告は出るかも)。
523 名前:デフォルトの名無しさん mailto:sage [02/07/22 20:27] u[c+1]=u[c]+f[c];を q=u[c+1]=q+f[c];にすると1バイトちぢむかも(w
524 名前:521 mailto:sage [02/07/22 23:46] >>522 getc に置き換えることにより t を使わないようにしました。 >>523 サンクスです。でも現時点で q が無くても同じ文字数だ・・・ #include <stdio.h> size_t l,r=~0,z,q,e,u[257],f[256],c=5,x=256;main(int g,char**v){FILE*n=fopen(v[ 2],"rb"),*o=fopen(v[3],"wb");if(g=*v[1]-69)for(z=getw(n),fread(f,4,x,n);--c;)e= e*x|getc(n);else{for(;~(c=getc(n));f[c]<255?f[c]++:0)z++;putw(z,o);fwrite(f,4,x ,o);fseek(n,c=0,0);}for(;c++<x;)q=u[c]=q+f[c-1];for(;g?z--:~(c=getc(n));){r/=u[ x];if(g){for(c=x;--c&&(e-l)/r<u[c];);putc(c,o);}for(l+=u[c]*r,r*=f[c];(l^l+r)<1 <<24||r<1<<16&&(r=65535&~l+1);)g?e=e*x|getc(n):putc(l>>24 ,o),r*=x,l*=x;}for(c=4 ;!g&&c--;)putc(l>>c*8,o);}
525 名前:デフォルトの名無しさん [02/07/22 23:58] age
526 名前:521 mailto:sage [02/07/22 23:58] ふと思ったんですが、7行スレで開発されて続けている新しい技術を使うと、 昔のプログラムがもっと縮められることに気づきました。 7行に不到達のもので、何か挑戦してみようかな、などと考えてしまう・・・ でもそれはネタ的には面白くない罠、か
527 名前:デフォルトの名無しさん [02/07/23 01:16] >>526 イインジャネーノ
528 名前:いつも名無し mailto:sage [02/07/23 09:00] しっかし凄い良スレだなぁココ
529 名前:デフォルトの名無しさん mailto:sage [02/07/23 10:33] java chat サーバー マルチユーザー用のスレッドクラスを別にしてみました。 mainの方は楽勝。 スレッドのほうはだめでした。 クライアントもやってみます。 import java.net.*;import java.io.*;import java.util.*; public class S{public static void main (String args[]) throws IOException{ int port = Integer.valueOf(args[0]).intValue();ServerSocket sS = null; boolean e = true;try{sS = new ServerSocket(port);}catch (IOException i){} while(e){new T(sS.accept()).start();}sS.close(); }} class T extends Thread {Socket s;PrintStream o;BufferedReader i;static Vector m;T(Socket s){super("T");s=s;if(m==null){m=new Vector();}m.addElement(this);} public void run(){try{o=new PrintStream(s.getOutputStream(),true);i=new BufferedReader(new InputStreamReader(s.getInputStream()));String c;while((c=i. readLine())!=null){w(c);}e();}catch(IOException e){}}public void w(String s){ for(Enumeration e=m.elements();e.hasMoreElements();){T c=(T)e.nextElement();c. o.println(s);}}public void e(){try{i.close();o.close();s.close();}catch( IOException e){}m.removeElement(this);}}
530 名前:デフォルトの名無しさん mailto:sage [02/07/23 12:04] その程度ならまとめろという気がしないでもない。 わざわざスレッド別にして文字数を増やすこともないだろうに。
531 名前:七誌饅頭 mailto:sage [02/07/23 17:41] >>521 さんすごいです。 r/=u[x];はr/=qにできそうですね。 って3バイトしか縮みませんが。
532 名前:521 mailto:sage [02/07/23 17:52] >>531 いやいやとんでもない。これはアルゴリズムもすごいですよ。 オーバーフローを避けるために、r の値を毎回制御しているのはわかったんですが、 (l^l+r)<1<<24 がどういう役割を担っているのか、いまいちわからん。 l の精度が落ちたら? を判定しているのかな。それとも r の? 符号化部と復号部をいっしょにしてしまったのもすごいが、 ロジック部が小さいと、全体のサイズはかえって大きくなるんじゃないかな、 などといろいろプログラムを試行中。
533 名前:デフォルトの名無しさん [02/07/23 18:06] 7行未到達のお題を旧スレから見繕ってみました。 現代の技術で、7行を目指してくだちい。 ハフマン符号化 pc3.2ch.net/test/read.cgi/tech/984182993/194 レイトレーシング pc3.2ch.net/test/read.cgi/tech/984182993/209 BASIC pc3.2ch.net/test/read.cgi/tech/984182993/497-518 波紋 pc3.2ch.net/test/read.cgi/tech/984182993/678 パーティクル pc3.2ch.net/test/read.cgi/tech/984182993/675-676 SHA1 pc3.2ch.net/test/read.cgi/tech/984182993/881-886
534 名前:七誌饅頭 mailto:sage [02/07/23 18:50] >>532 >(l^l+r)<1<<24 がどういう役割を担っているのか、いまいちわからん。 lとl+rの最上位の8ビットが等しいかどうかの判定ですね。 等しいならXORで消えるので1<<24未満になると。 >符号化部と復号部をいっしょにしてしまったのもすごいが これは寝る直前に思いつきました。 RangeCoderは符号かも複号化も似たようなものになるのでできそうだ。と思い、 判定の結果を保存しておけば、三項演算子でいけるかもと気づきました。
535 名前:デフォルトの名無しさん mailto:sage [02/07/23 19:22] >>534 いやー、勉強になります。 というわけで、z を保存しないようにしてみました。 #include <stdio.h> size_t l,r=~0,z,q,e,u[257],f[257],c=5,x=256;main(int g,char**v){FILE*n=fopen(v[ 2],"rb"),*o=fopen(v[3],"wb");if(g=*v[1]-69)for(fread(f,4,x,n);--c;)e=e*x|getc(n );else{for(;~(c=getc(n));f[c]++);fwrite(f,4,x,o);fseek(n,c=0,0);}for(;c<x;c++)z +=f[c],f[c]>=x?f[c]=255:0,q=u[c+1]=q+f[c];for(;g?z--:~(c=getc(n));){r/=q;if(g){ for(c=x;--c&&(e-l)/r<u[c];);putc(c,o);}for(l+=u[c]*r,r*=f[c];(l^l+r)<1<<24||r<1 <<16&&(r=65535&~l+1);)g?e=e*x|getc(n):putc(l>>24 ,o),r*=x,l*=x;}for(c=4;!g&&c--; )putc(l>>c*8,o);}
536 名前:デフォルトの名無しさん mailto:sage [02/07/23 19:53] 標準入出力に切り替えれば、7行達成じゃね?
537 名前:頭 mailto:sage [02/07/23 22:08] 1<<16はx*xの方向で。
538 名前:デフォルトの名無しさん mailto:sage [02/07/23 22:37] >>536 標準入出力の巻き戻し fseek(f,0,0); って使えるんでしたっけ? まぁ、旧スレは標準入出力を使ったので、今回は無しで目指すのはどうでしょ? もっとも、旧スレのも標準入出力を使わずにできることが判明しました。
539 名前:今日も名無しさん mailto:sage [02/07/23 22:39] f[c] の最大値を 255 じゃなくて、256 にしてもいいもんだろうか?
540 名前:デフォルトの名無しさん mailto:sage [02/07/23 22:46] >>539 終端をサイズで無くターミネータ(0x100)で判断させるためだろ。 この手の圧縮は別に0x00-0xff/charでないといけない物ではない。
541 名前:デフォルトの名無しさん mailto:sage [02/07/23 22:49] >>540 いや、そうではなくて、l と r の上位8ビットを比較するわけで、 このとき 256 倍までならば、整合性が保たれることは確実です。 しかし、r=256*256 となると、r=65535&~l+1 がまずいことになりそうなので、 誰か検証してくれないかなぁ、と思ったのです。
542 名前:541 mailto:sage [02/07/23 22:50] ちなみに e>=l が必ず成り立つので、g と e をまとめることができますね。
543 名前:Javaさん mailto:sage [02/07/23 22:54] >>529 ひとつにまとめますた。 T.java import java.net.*;import java.io.*;import java.util.*;class T extends Thread{ Socket s;OutputStream o;static Vector m;T(Socket a){s=a;m=(m==null)?new Vector() :m;m.addElement(this);start();}public void run(){try{o=s.getOutputStream();for( BufferedReader i=new BufferedReader(new InputStreamReader(s.getInputStream()));; ){for(int k=0;k<m.size();) {T c=(T)m.get(k++);c.o.write((i.readLine()+"\n"). getBytes());c.o.flush();}}}catch(Exception e){}m.remove(this);}public static void main (String[]q) throws Exception{for(ServerSocket v=new ServerSocket( Integer.parseInt(q[0]));;new T(v.accept()));}}
544 名前:七誌饅頭 mailto:sage [02/07/23 23:10] #include <stdio.h> size_t l,r=~0,z,q,e,u[257],f[257],c=5,x=256;main(int g,char**v){FILE*n=fopen(v [2],"rb"),*o=fopen(v[3],"wb");g=*v[1]-69;for(g&&fread(f,4,x,n);g?--c:~(c=getc( n));)g?e=e*x|getc(n):f[c]++;g||(fwrite(f,4,x,o),fseek(n,c=0,0));for(;c<x;c++)z +=f[c],f[c]>=x?f[c]=255:0,q=u[c+1]=q+f[c];for(;g?z--:~(c=getc(n));){r/=q;if(g) {for(c=x;--c&&(e-l)/r<u[c];);putc(c,o);}for(l+=u[c]*r,r*=f[c];(l^l+r)<1<<24||r <x*x&&(r=-l&65535);)g?e=e*x|getc(n):putc(l>>24 ,o),r*=x,l*=x;}for(c=4;!g&&c--;) putc(l>>c*8,o);} どうも頭が固いな。
545 名前:デフォルトの名無しさん mailto:sage [02/07/23 23:19] (l^l+r)<1<<24→r<=~l*x/x 遅いけどな(w
546 名前:今日から名無し mailto:sage [02/07/23 23:21] >>544 横1行78文字ですよん? 他もちょっと縮めました。 #include <stdio.h> size_t l,r=~0,z,q,u[257],f[257],c=5,x=256,*a=f;main(int g,char**v){FILE*n=fopen (v[2],"rb"),*o=fopen(v[3],"wb");g=*v[1]-69;for(g&&fread(f,4,x,n);g?--c:~(c=getc (n));)g?g=g*x|getc(n):f[c]++;g||(fwrite(f,4,x,o),fseek(n,c=0,0));for(;c<x;q=u[1 +c++]=q+*a++)z+=*a,*a>=x?*a=255:0;for(;g?z--:~(c=getc(n));){r/=q;if(g){for(c=x; --c&&(g-l)/r<u[c];);putc(c,o);}for(l+=u[c]*r,r*=f[c];(l^l+r)<1<<24||r<x*x&&(r=- l&65535);)g?g=g*x|getc(n):putc(l>>24 ,o),r*=x,l*=x;}for(c=4;c--;)g||putc(l>>c*8, o);} 後4文字っす
547 名前:Javaさん mailto:sage [02/07/23 23:22] >>543 のバグ取り (´・ω・`)ショボーン T.java import java.net.*;import java.io.*;import java.util.*;class T extends Thread{ Socket s;OutputStream o;static Vector m;T(Socket a){s=a;m=(m==null)?new Vector() :m;m.addElement(this);}public void run(){try{o=s.getOutputStream();String c=""; for(BufferedReader i=new BufferedReader(new InputStreamReader(s.getInputStream() ));;c=i.readLine()){for(int k=0;k<m.size();) {T t=(T)m.get(k++);t.o.write((c+ "\n").getBytes());t.o.flush();}}}catch(Exception e){}m.remove(this);}public static void main (String[]q) throws Exception{for(ServerSocket v=new ServerSocket(Integer.parseInt(q[0]));;new T(v.accept()).start());}}
548 名前:今日こそ名無しさん mailto:sage [02/07/23 23:23] 7行達成!? #include <stdio.h> size_t l,r=~0,z,q,u[257],f[257],c=5,x=256,*a=f;main(int g,char**v){FILE*n=fopen (v[2],"rb"),*o=fopen(v[3],"wb");g=*v[1]-69;for(g&&fread(f,4,x,n);g?--c:~(c=getc (n));)g?g=g*x|getc(n):f[c]++;g||(fwrite(f,4,x,o),fseek(n,c=0,0));for(;c<x;q=u[1 +c++]=q+*a++)z+=*a,*a>=x?*a=255:0;for(;g?z--:~(c=getc(n));){r/=q;if(g){for(c=x; --c&&(g-l)/r<u[c];);putc(c,o);}for(l+=u[c]*r,r*=f[c];r<=~l*x/x||r<x*x&&(r=65535 &-l);)g?g=g*x|getc(n):putc(l>>24 ,o),r*=x,l*=x;}for(c=4;c--;)g||putc(l>>c*8,o);}
549 名前:デフォルトの名無しさん mailto:日付と時間を参照 [02/07/23 23:25] >>548 兄さん! age ましょう!!
550 名前:548 mailto:sage [02/07/23 23:27] >>548 すいませんでした!! バイナリファイルだと暴走します。 鬱だ・・・・
551 名前:548 mailto:sage [02/07/23 23:31] 所詮 >>545 と >>546 を見て、4文字ちょうどジャンと 知識も無いのに参加したおいらが厨ですた・・・
552 名前:521 mailto:sage [02/07/23 23:41] >>548-551 g と e をまとめちゃったのが、まずいのではないかな? 今のところ後2文字くらいになっていますが、どこを削れるかなぁ。
553 名前:521 [02/07/23 23:45] これで7行ですね。上げておきます。 #include <stdio.h> size_t*a,l,r=~0,e,z,q,u[257],f[257],c=5,x=256;main(int g,char**v){FILE*n=fopen( v[2],"rb"),*o=fopen(v[3],"wb");for(g=*v[1]-69&&fread(f,4,x,n);g?--c:~(c=getc(n) );)g?e=e*x|getc(n):f[c]++;g||fwrite(f,4,x,o)&&fseek(n,c=0,0);for(a=f;c<x;q=u[1+ c++]=q+*a++)z+=*a,*a>=x?*a=255:0;for(;g?z--:~(c=getc(n));){r/=q;if(g){for(c=x; --c&&(e-l)/r<u[c];);putc(c,o);}for(l+=u[c]*r,r*=f[c];r<=~l*x/x||r<x*x&&(r=65535 &-l);)g?e=e*x|getc(n):putc(l>>24 ,o),r*=x,l*=x;}for(c=4;c--;)g||putc(l>>c*8,o);}
554 名前:七誌饅頭 mailto:sage [02/07/23 23:59] あらま。考えてる間に。 >>521 さんお疲れ様です。それにしても縮んでよかった(w 3人寄れば文殊の知恵というかなんと言うか。 コードのエントロピーはどこにあるんでしょうね(w
555 名前:デフォルトの名無しさん mailto:sage [02/07/24 00:14] >>554 今回は久しぶりに参加者が多かったですね。 中盤では、比較的わかりやすいソースコードになっていたからでしょうね。 最終的にはやはり奇妙奇天烈(に見えるもの)になりましたが。
556 名前:デフォルトの名無しさん mailto:sage [02/07/24 00:17] >>553 こいつはマジですげぇ。インデントしてもまともなプログラムとは思えねぇ(w forをうまく使い込み、(まともに使っていれば)ありえないような例外処理も省き、 その上でエンコードとデコードの処理が3項演算子と論理演算子で融合されている。 定石と、非常識が合わさった執念のプログラム。これが匠という奴なのか。
557 名前:デフォルトの名無しさん mailto:sage [02/07/24 00:22] ソースを追うごとにwhileが消えていく(w
558 名前:最大の賛辞 [02/07/24 00:28] 君たち頭おかしいよ、まじで。
559 名前:デフォルトの名無しさん mailto:sage [02/07/24 00:29] >>557 やたら for や ?:, ++, --, * が増える。それもまた楽しw
560 名前:デフォルトの名無しさん mailto:sage [02/07/25 14:18] 前スレのハフマン符号 pc3.2ch.net/test/read.cgi/tech/984182993/194 アルゴリズムをほとんど見ずに、ステートメントだけで縮めてみました。 int b,i,j,l,m,n=1024,c,p=7,h[32],y=16;r(h,b){for(;b--;!p--?putchar(c),c=0,p=7:0 )c|=(h>>b)%2<<p;}q(int*a,int*b){return*a-*b;}struct v{int i,b,h,n;}*v,*f;struct {int n,i,e,k;struct v v[63];}x[32]={0,},*a=x;main(){char*d=0;for(;~(b=getchar() );a[d[l++]=b%y].n++)a[(d=realloc(d,l+2))[l++]=b/y].n++;for(i=32;i--;)a[a[i].i=a [i].v[0].i=i].e=1;qsort(a,y,n,&q);for(b=17,i=0;!x[i++].n;a++)b--;for(;2<b;a+=2) {qsort(a,b--,n,&q);for(j=1;j<3;j++)for(i=0,v=a[j].v;i<a[j].e;i++)v[i].h|=j%2<<v [i].b++;m=a[1].e;memcpy(a->v+a->e,a[1].v,m*y);memcpy(a->v+m+a->e,a[2].v,496);a ->e+=m+a[2].e;a->n+=a[1].n+a[2].n;memcpy(a+2,a,n);}for(i=0;i<y;i++)for(j=0;j<32 ;j++)if((f=a->v+j)->i==i)r(f->b-1,4),r(f->h,f->b),h[i]=f->b,h[i+y]=f->h,j=32; for(i=0;i<l;r(b+y,b))b=h[d[i++]];p-7&&r(0,p);}
561 名前:デフォルトの名無しさん [02/07/25 18:55] 面白そうなので、私も作ってみました。15パズルです。 P.java(JDK1.4.0で確認) import java.awt.*;public class P extends Frame{class B extends Button{String l, r,t;int o;B(int i){o=i%4+i/4*6;s(r=i+1+"");}void m(){if((64<<o&4257<<n.o)>0){t= l;s(n.l);n.s(t);n=this;}}void s(String n){setLabel(l=n);}}int g;B[]a=new B[16]; B n;public P(){setLayout(new GridLayout(4,4));for(;g<16;g++)add(n=a[g]=new B(g) );pack();show();i();}void i(){n.s("");for(g=0;g++<999;)a[(int)(Math.random()*16 )].m();}public boolean handleEvent(Event e){if(e.id==201)System.exit(0);if(e.id ==1001)if(g<0)i();else{((B)e.target).m();for(g=15;g-->0;)if(a[g].l!=a[g].r) return 1>0;n.s("R");}return 1>0;}public static void main(String s[]){new P();}} 頑張って8行まで縮めたのですが、私にはこれで限界でした(;_;) ちなみに、201==Event.WINDOW_DESTROY、1001==Event.ACTION_EVENTです(笑) # 2ちゃんねる初書き込みなので、ちょっとどきどき…。
562 名前:560 mailto:sage [02/07/26 18:45] オリジナルに間違いがあったのでそれも修正しました。 現在9行。アルゴリズムを変更しないと、これ以上は無理かな・・・ int b,i,j,l,n=1024,c,p,h[32],y=16;r(h,b){for(;b--;++p>7?putchar(c),p=c=0:0)c|=( h>>b)%2<<7-p;}q(int*a,int*b){return*a-*b;}struct v{int i,b,h,n;}*v;struct{int n ,i,e,k;struct v v[63];}x[32],*a=x;main(){char*d=0;for(;~(b=getchar());a[d[l++]= b%y].n++)d=realloc(d,l+2),a[d[l++]=b/y].n++;for(i=32;i--;)a[a[i].i=a[i].v[0].i= i].e=1;for(qsort(a,b=y,n,&q);!x[y-b--].n;a++);for(;b;a+=2){qsort(a,2+b--,n,&q); for(j=1;j<3;j++)for(i=0,v=a[j].v;i<a[j].e;i++)v[i].h|=j%2<<v[i].b++;i=a[1].e; memcpy(a->v+a->e,v-64,i*y);memcpy(a->v+i+a->e,v,496);a->e+=i+a[2].e;a->n+=a[1]. n+a[2].n;memcpy(a+2,a,n);}for(i=0;i<y;i++)for(j=0;(v=a->v+j)->i==i?r((b=v->b)-1 ,4),r(h[i+y]=v->h,h[i]=b),0:++j;);for(i=0;i<l;r(h[b+y],h[b]))b=d[i++];r(0,7);}
563 名前:デフォルトの名無しさん [02/07/27 03:20] ひさしぶりage
564 名前:デフォルトの名無しさん mailto:sage [02/07/27 03:26] コーディングテクニックが極まっちゃうと手を加えられなくなるよね。
565 名前:560 mailto:sage [02/07/27 05:59] Huffman 符号構成のアルゴリズムを変更してみました。現在8行。 ほぼ1から作り直したので、コーディングに甘い部分があります。 関数 z とか新設したんですが、どなたかこれを無くして下さいです。 int*d=0,i,j,k,l,h[32],y=16,c,p;r(h,b){for(;b--;++p>7?putchar(c),p=c=0:0)c|=(h>> b)%2<<7-p;}q(int*a,int*b){return*a-*b;}struct v{int f,b,s[2],i,c;}n[31],*x=n,*w ;z(d,c){int m;struct v*w=x;if(w->i<y)w->b=d,w->c=c;else for(m=2;m--;)for(j=30;w ->s[m]==n[j].i?x=n+j,z(d+1,c*2+m),0:j--;);}main(){for(;i<y;)n[i++].f=1;for(;~(i =getchar());n[d[l++]=i/y].f++)d=realloc(d,l*4+8),n[d[l++]=i%y].f++;for(;++i<y;) n[i].i=i;for(j=k=y;--k;w->s[1]=x++->i){qsort(x,j,24,&q);w=x+j--;w->f=x->f+x[1]. f;w->i=i++;w->s[0]=x++->i;}z(-1,0);for(i=y;i--;)for(k=31;k--;)n[k].i==i?r(j=h[y +i]=n[k].b,4),r(h[i]=n[k].c,j):0;for(;++i<l;r(h[j],h[y+j]))j=d[i];r(0,7);} 寝よう・・・
566 名前:560 mailto:sage [02/07/27 06:10] 圧縮率と簡便さから、range coder が Huffman にとって代わりつつあるが、 符号化&復号をあわせて7行プログラミングできるかどうかでも、 Huffman は range coder に敵わないのだということを嫌というほど実感中w ・・・起きたら7行に到達していたらいいなぁ・・・zZZ
567 名前:デフォルトの名無しさん [02/07/27 11:15] ここのソースを自動インデントするプログラムを書こうと思ったけど 一文字ずつの処理じゃもうだめぽ
568 名前:デフォルトの名無しさん mailto:sage [02/07/27 12:41] >565 c|=(h>>b)%2<<7-p;→c+=c+(h>>b)%2; A==B?C:D;→A-B?D:C; で僅かに縮む…が、焼け石に水か(w
569 名前:デフォルトの名無しさん mailto:sage [02/07/27 14:18] >>568 A-B?D:C; の場合、C にカンマ演算子が含まれていないことが条件ですぞ。 : までと : 以降ではカンマの扱いが微妙に違うのがいやらしい。 &&, || の場合もカンマ演算子は使いにくいです。
570 名前:568>569 mailto:sage [02/07/27 15:03] 3項演算子の方は検証せずに書いてた、逝って狂
571 名前:560 mailto:sage [02/07/27 18:09] 現在残り29文字になりました。これから z を改良します。 ・・・ところで、どなたか復号器を作っていただけませんか。 >>565 までのものには、明らかな間違いが存在します。 また復号が不可能だったので、データ長を記録するようにしました。 符号語のフォーマットは、 元のデータ長(4byte), (符号語長 4bit, 符号語 x bit) の組が16個, その後ろに符号化したデータがぞろぞろと繋がります。 int*d=0,i,j,k,l,h[32],y=16,c,p;r(h,b){for(;b--;++p>7?putchar(c),p=c=0:0)c+=c+(h >>b)%2;}struct v{int f,b,s[4],i,c;}n[31],*x=n,*w;z(d,c){int m;struct v*w=x;w->b =d,w->c=c;for(m=2;(w->i>=y)&&m--;)for(j=30;w->s[m]==n[j].i?x=n+j,z(d+1,c*2+m),0 :j--;);}q(int*a,int*b){return*a-*b;}main(){for(;~(i=getchar());n[d[l++]=i/y].f ++)d=realloc(d,l*4+8),n[d[l++]=i%y].f++;for(;++i<y;)n[i].i=i;for(j=k=y;--k;w->s [1]=x++->i){qsort(x,j,32,&q);w=x+j--;w->f=x->f+x[1].f;w->i=i++;w->s[0]=x++->i;} z(i=0,0);for(r(l,32);i<l+y;i++)for(w=n+31;w-->n;w->i==(i<y?i:d[i-y])?i<y&&r(j,4 ),r(w->c,j):0)j=w->b;r(0,7);} >>568 >>570 いえいえ、ありがとうございます。
572 名前:560 [02/07/27 18:55] 7行 Huffman符号化。 ただし、復号できるかどうかは未検証です。 int*d=0,i,j,k,l,h[32],y=16,c,p;r(h,b){for(;b--;++p>7?putchar(c),p=c=0:0)c+=c+(h >>b)%2;}q(int*a,int*b){return*a-*b;}struct v{int f,b,s[4],i,c;}n[31],*x=n,*w=n+ 16;main(){for(;~(i=getchar());n[d[l++]=i/y].f++)d=realloc(d,l*4+8),n[d[l++]=i%y ].f++;for(;++i<y;)n[i].i=i;for(k=y;--k;w++->s[1]=x++->i){qsort(x,k+1,32,&q);w-> f=x->f+x[1].f;w->i=i++;w->s[0]=x++->i;}for(r(l,32);i--;)for(j=i,w=n+i;w->i>=y&& j--;)for(k=2;k--;)w->s[k]==n[j].i?n[j].b=w->b+1,n[j].c=w->c*2+k:0;for(;++i<l+y; )for(w=n+31;w-->n;w->i==(i<y?i:d[i-y])?i<y&&r(j,4),r(w->c,j):0)j=w->b;r(0,7);}
573 名前:デフォルトの名無しさん mailto:sage [02/07/27 19:07] (~~~ ゚ ∀~)~~~ ゚ メダマ ボーン
574 名前:デフォルトの名無しさん mailto:sage [02/07/27 21:30] &qの&はなくてもいいんではないのかい?
575 名前:デフォルトの名無しさん mailto:sage [02/07/27 21:54] 最近のレスを見ていると、よくもこんなというテクニックが多く見られる 当時興味があったBASICも、今見るとあちこち縮められそうに思える 技術の進歩はすごいんだなあ…参戦したくなりますたw
576 名前:今日始めてこのスレ見つけた奴 mailto:sage [02/07/27 22:01] このスレにWebプログラミングで参戦してみようと思います 恐らくPHPですかね なんかやってみます
577 名前:デフォルトの名無しさん mailto:sage [02/07/27 22:02] >>576 大歓迎ざます