[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/10 16:01 / Filesize : 349 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

七行プログラミング part2



1 名前:デフォルトの名無しさん [02/04/15 12:09]
7行×79文字なら言語は問いません。
過去作品は>>2-5を参照。

■前スレ
pc.2ch.net/test/read.cgi/tech/984182993/

445 名前:デフォルトの名無しさん mailto:sage [02/07/04 09:57]
>>444
とりあえず CRC の部分から書き始めてみる?
そこから、PNG のように大きな枠組みに持っていくのは大変かもしれないけど、
任意の CRC を計算するまでならできそうだし、それはそれで功有りかと。

446 名前:デフォルトの名無しさん mailto:sage [02/07/04 10:49]
>>445
いいですねぇ。最終的に7行の*.cファイル群を幾つかリンクするとJPEGエンコーダ/
デコーダ等々になる、というのは面白いかも。

447 名前:445 [02/07/04 11:52]
CRC32 を計算、入力は標準入力から。g++ 2.95.3
多分あってると思いますが、確認お願いします。

#include <fstream>
unsigned C,t[256],i,j,v,a=256;
main(){
for(i=0;i<a;t[i++]=v)for(v=i,j=0;j<8;j++)v=(v&1)?((v/2)^0xEDB88320):(v/2);
for(C=~0;~(i=cin.get());)C=t[(C%a)^i]^(C/a);
cout<<hex<<~C<<endl;
}


448 名前:445 mailto:sage [02/07/04 12:08]
ごめんなさい。1つ前のバージョンを送ってしまいました。

#include <fstream>
unsigned C,t[256],i,j,a=256;
main(){
for(;i<a;t[i++]=C)for(C=i,j=9;--j;)C=C/2^(C&1?0xEDB88320:0);
for(C=~0;~(i=cin.get());C=t[(C%a)^i]^(C/a));
cout<<hex<<~C<<endl;
}


449 名前:デフォルトの名無しさん [02/07/04 13:34]
参考資料
www01.u-page.so-net.ne.jp/xb3/y-koujin/png_fmt/jp/Tr/png.html

450 名前:445 mailto:sage [02/07/04 14:49]
>>449
そうです。そこから縮めました。書いておけばよかったですね、はい。
ちなみに C=t[C%a^i]^C/a) でもう少し縮められます。

451 名前:1 mailto:age [02/07/04 18:54]

#include <stdio.h>

int main(void)
{
while(1)
printf("\t\b\b");
}

452 名前:デフォルトの名無しさん mailto:sage [02/07/04 22:49]
>>451
XPクラッシャーじゃん

453 名前:デフォルトの名無しさん mailto:sage [02/07/05 09:21]
>>452
確か 2000 でも落ちるような。
9x, Me は大丈夫。



454 名前:デフォルトの名無しさん [02/07/05 21:47]
>>453
NT系アウトの罠>>printf("\t\b\b");

455 名前:デフォルトの名無しさん [02/07/06 10:39]
七行プログラミングのスレにでてるコードをちゃんとインデントを入れた形に整形してくれる
プログラムなんてガイシュツですか?

456 名前:デフォルトの名無しさん mailto:sage [02/07/06 10:41]
>>455
作ればいいかと。{}付けがよっぽど変なバカのコード以外は簡単かと。

457 名前:デフォルトの名無しさん mailto:sage [02/07/06 10:45]
>>455
プリティプリンタでぐぐればいっぱいあるよ。

458 名前:デフォルトの名無しさん mailto:sage [02/07/06 11:11]
gnu-indent

459 名前:デフォルトの名無しさん mailto:dage [02/07/06 11:19]
>>455
visual stadioでもできるよ(たぶん

460 名前:デフォルトの名無しさん mailto:sage [02/07/06 11:22]
できない

461 名前:デフォルトの名無しさん mailto:sage [02/07/06 19:53]
DCTまだですか?

462 名前:デフォルトの名無しさん [02/07/06 22:43]
double c[8][8],is;void di(){int u,v;is=1./sqrt(2.);for(u=0;u<8;u++)for(v=0;x<8;
x++)c[u][x]=cos((2.*x+1.)*u*M_PI/16.);}void dc(int *b){int v,u,x,y,w[64];double
s,cu,cv;for(v=0;v<8;v++){cv=(v==0)?is:1.0;for(u=0;u<8;u++){cu=(u==0)?is:1.;s=0;
for(y=0;y<8;y+)for(x=0;x<8;x++)s+=b[y*8+x]*c[u][x]*c[v][y];w[v*8+u]=(int)(s*cu*
cv/4);}}}

463 名前:デフォルトの名無しさん mailto:sage [02/07/06 23:07]
>>462
x と v を間違えたり、y+ になったり、ちょっとしょぼーん(´・ω・`)
もっと短くできそうだ

次は、PNG と JPG のファイルフォーマット変換部分か…



464 名前:デフォルトの名無しさん mailto:sage [02/07/06 23:23]
モジュールを集めればJPEGだって何だってできるのはあたりまえだから、
もう少し「寄せ集めること」の意義を考えてみないか?

たとえばSUSIEみたいに、メインルーチンとローダー・変換部分をわけて、
それぞれが7行プログラムで作成されているというように。


465 名前:462 mailto:sage [02/07/06 23:25]
>>463 叩き台なので勘弁してCRAY.


466 名前:デフォルトの名無しさん mailto:sage [02/07/06 23:54]
Javaを使えば、JPEG入出力なんて始めからできているという罠

467 名前:デフォルトの名無しさん mailto:sage [02/07/07 00:28]
double c[8][8],is,s;int x,y,u,w[64];di(){is=1/sqrt(2);for(u=0;u<64;u++)c[u/8][u
%8]=cos((2*(u%8)+1)*(u/8)*M_PI/16);}dc(int*b){for(x=0;x<8;x++)for(u=0;u<8;w[x*8
+u]=s*(x?1:is)*(u++?1:is)/4)for(s=0,y=0;y<64;y++)s+=b[y]*c[u][y%8]*c[x][y/8];}


468 名前:463 mailto:sage [02/07/07 01:11]
先を越された…
double c[8][8],s;int x,y,w[64];di(){for(x=64;x--;c[y=x/8][x%8]=cos((2*(x%8)+1)*
y*M_PI/16));}dc(int*b){for(x=64;x--;w[x]=s*(x/8?1:1/sqrt(2))*(x%8?1:1/sqrt(2))/
4)for(s=0,y=64;y--;)s+=b[y]*c[x%8][y%8]*c[x/8][y/8];}


469 名前:デフォルトの名無しさん mailto:sage [02/07/07 12:27]
>>464
過去ログ読んでね。そう言うコンセプトでやってる。

470 名前:464 mailto:sage [02/07/07 18:19]
>>469
ごめん。読んでいるけどわからんかった・・・ウツ

471 名前:デフォルトの名無しさん [02/07/08 02:27]
(⌒Д⌒)あらやだわ奥さんハハハ

472 名前:みぃとぼぉる [02/07/08 15:09]
参戦?させていただきます。んで、Pascalにて迷路...

Program Q;const B=$B800;var S,C,D,F:Word;A:Array[1..999]of Integer;begin For C
:=81to 3840do begin MemW[B:C*2]:=4016;If(C mod 80)=77 then C:=C+3;end;S:=1;A[S]
:=324;while(S>0)do begin C:=A[S];Mem[B:C]:=0;F:=0;while(F<15)do begin D:=(
Port[65]+S)mod 4;F:=F OR(1SHL D);D:=(2-(D div 2)*4)*(1+(D mod 2)*79);If Mem[B:C
+D*2]=176then begin Mem[B:C+D]:=0;A[S+1]:=C+D*2;S:=S+2;Break;end;end;S:=S-1;end
;Mem[B:164]:=0;Mem[B:7672]:=0;Readln;End.

80x50の英語モードDOS窓で CLS してから実行してちょ。
Borland Pascal 7.0 / WinXP で動作確認済み。難しい事は一切やっていないような。
ランタイムエラーが怖いのでCRTは未使用です。

尚、MS-DOSのメモリ依存。

473 名前:みぃとぼぉる [02/07/08 16:25]
ちょっぴり修正。

Program Q;Uses crt;const B=$B800;var S,C,D,F:Word;A:Array[1..999]of Word;begin
TextMode(259);Randomize;For C:=81to 3840do begin MemW[B:C*2]:=4059;If(C mod 80)
=77 then C:=C+3;end;S:=1;A[S]:=324;while(S>0)do begin C:=A[S];Mem[B:C]:=0;F:=0;
while(F<15)do begin D:=Random(4);F:=F OR(1SHL D);D:=(2-(D div 2)*4)*(1+(D mod 2
)*79);If Mem[B:C+D*2]=219then begin Mem[B:C+D]:=0;A[S+1]:=C+D*2;S:=S+2;Break;
end;end;S:=S-1;end;Mem[B:164]:=0;Mem[B:7672]:=0;Readln;End.


- ランダムナンバージェネレーターにポートを使わずに正規の命令を使用。
- 毎回生成するパターンも変更される。
- Borland / Turbo Pascal で実行時にエラーが出る場合は CRT と TextMode を削除
するか、バグ修正板のCRT RTLを使用すること。

でわ。



474 名前:775 mailto:sage [02/07/09 23:02]
激簡単なもんから・・・・。
元画像をppmに限定すれば読みこみはかなり削減できないかな。>コンバータ

#include <stdio.h>/* usage:bmp2ppm src.bmp dest.ppm*/
main(int c, char*v[]){int i,x,y;FILE *f,*g;if(c<3)return;if((f=fopen(v[1],
"rb"))==NULL||(g=fopen(v[2],"w"))==NULL)return;fseek(f,18,SEEK_SET);fread(&x,4
,1,f);fread(&y,4,1,f);fprintf(g,"P6\n%d %d\n255\n",x,y);fseek(f,54,SEEK_SET);
for(i=0;i<x*y*3;i++)fputc(fgetc(f),g);fclose(f);fclose(g);}

475 名前:392 mailto:sage [02/07/10 10:32]
遅くなったけど、popクライアント
rcvmail サーバ名 ユーザ名 パスワード メール番号

#include <WinSock.h>
char z[512];int s,r,S;M(){z[r=recv(s,z,512,0)]=0;printf("%s",z);}T(x,y){r=spri\
ntf(z,x,y);strcat(z,"\r\n");send(s,z,r+2,0);M();}main(int c,char** v){SOCKADDR\
_IN a={2,28160};WSAStartup(257,z);a.sin_addr=*((PIN_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);closesocket(s);WSACleanup();}


476 名前:463 mailto:sage [02/07/10 18:19]
>>474
上下反転はともかく、RGBも逆だといやんなので、直しました。
上下も直した方が良いでしょうかね?

#include <stdio.h>/* usage:bmp2ppm src.bmp dest.ppm */
main(int c,char**v){int i,x,y,z[3];FILE*f,*g;if(c<3||(f=fopen(v[1],"rb"))==NULL
||(g=fopen(v[2],"w"))==NULL)return;fseek(f,18,c=SEEK_SET);fread(&x,4,1,f);fread
(&y,4,1,f);fprintf(g,"P6\n%d %d\n255\n",x,y);fseek(f,54,c);for(i=x*y;--i;){for(
c=0;c<3;)z[c++]=fgetc(f);for(;c--;)fputc(z[c],g);}fclose(f);fclose(g);}

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ワラタ。

( ~~~゚ ∀~)~~~ ゚ メダマ ボーン

みんなご一緒に… ( ~~~ ゚ ∀~)~~~ ゚ メダマ ボーン

意味不明なところで>>500getしてください。

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






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<349KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef