[表示 : 全て 最新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/

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

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
大歓迎ざます

578 名前:今日始めてこのスレ見つけた奴 mailto:sage [02/07/27 22:06]
ただ、ここにいる方々ほど偉大な
プログラミングは出来ないですが、
やれるだけのことはやってみます

579 名前:デフォルトの名無しさん mailto:sage [02/07/28 00:19]
>>578
始めてじゃなくて初めてだな
プログラミングと一緒に日本語もガンバレヨ

580 名前:デフォルトの名無しさん [02/07/28 15:43]
前スレのスライド辞書圧縮
pc3.2ch.net/test/read.cgi/tech/984182993/153-154
符号化と復号とが分かれていたので、いっしょにしてみました。現在9行。

#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d=0;r(o){for(p(o
);o--;)p(d[g++]);}main(int i){if(i>1){l=getw(stdin);for(d=malloc(l+8);s<l;){g=q
();if(g<n)for(i=g;i--;)d[s++]=q();else for(k=q()+(g-128)*256,i=k>>10,j=s-(k&f);
i--;)d[s++]=d[j++];}for(;l--;)p(*d++);}else{for(;~(s=q());d[l++]=s)d=realloc(d,
l+9);putw(l,stdout);memset(d+l,0,8);for(l+=8;s<l-3;s++){m=1;j=s>31?31:s;j=l-s-2
>j?j:l-s;for(;j>2;j--){for(i=s<f?0:s-f;i<s;i++)if(!(m=memcmp(d+i,d+s,j))||i+j>l
)break;if(!m)break;}if(!m){for(k=s-g;k>n;k-=n)r(n);k&&r(k);p(128+j*4+(k=s-i)/
256);p(k%256);g+=j;s=g-1;}}}}

581 名前:でけた! [02/07/28 15:53]
fawekfgvuq4eoptvnu4u905634^05689^3-5iqwoptjap bmg\xcm,c/<a\;vifa
sfkqvprv8q^@08pgkv\b/m,sb\/Vcbn\/.\>a[]-1[\lo-5^-269^2ryib@;:]ym
wriobyw45[2bm9^\c;,lhmx\:V,xc\./n,z_C;1^\@a:daf/v,w@]byk90w46by0
-3569kby-w35y6w65yeryhnu356ja;4pot8mi681^-:]bc\./bzsgnsfhn/.n,s
we\2\q34t5o34^-68^24690^-oy;:pvb\./xn,\/XCV,.b;:d]s9tbqo^while
dt69oqw@]qyniom7@ln:,/.zcvbn;]r[q[rt2^\56o2^\5789hknl.vmn.;/vmn;
hlwit^y02846ypokfhfghh56yfghadginytmainstdio.hriotjueirutjintint

582 名前:デフォルトの名無しさん mailto:sage [02/07/28 16:41]
>>581 ワラタ

583 名前:デフォルトの名無しさん mailto:sage [02/07/28 17:07]
>>580
縮めてみますた。アルゴリズムが間違っていたらすまソ

#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d=0;main(int i){
if(i>1){l=getw(stdin);for(d=malloc(l+8);s<l;){g=q();if(g<n)for(i=g;i--;)d[s++]=
q();else for(k=q()+(g-128)*256,i=k>>10,j=s-(k&f);i--;)d[s++]=d[j++];}for(;l--;)
p(*d++);}else{for(;~(s=q());d[l++]=s)d=realloc(d,l+9);putw(l,stdout);memset(d+l
,0,8);for(l+=8;s<l-3;s++){for(m=j=l-s-2>31?31:l-s;m&&j>2;j--)for(i=s<f?0:s-f;m
&&i<s;)m=memcmp(d+i++,d+s,j);if(!m){for(k=s-g;k+1;)for(p(m=k>n?n:k);k--,m--;)p(
d[g++]);p(++j*4+128+(k=s-i+1)/256);p(k);g+=j;s=g-1;}}}}

584 名前:昨日初めてこのスレ見つけた奴 mailto:sage [02/07/28 18:01]
オセロ作ったら39行になっちった(汗



585 名前:580 mailto:sage [02/07/28 18:17]
意外と縮むようで、縮まない。後21文字

#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d=0;main(int i){
if(i>1){for(l=getw(stdin),d=malloc(l+8);s<l;)for(g=m=q(),m>n?k=q()|g-128<<8,m=k
>>10:0;m--;s++)d[s]=g>n?d[s-(k&f)]:q();for(;l--;)p(*d++);}else{for(;~(s=q());d[
l++]=s)d=realloc(d,l+9);putw(l,stdout);memset(d+l,0,8);for(l+=8;s<l-3;s++){for(
m=j=l-s-2>31?31:l-s;m&&j>2;j--)for(i=s<f?0:s-f;m&&i<s;)m=memcmp(d+i++,d+s,j);if
(!m){for(k=s-g;k;)for(p(m=k>n?n:k);m--;k--)p(d[g++]);p(++j*4+128|(k=s-i+1)>>8);
p(k);g+=j;s=g-1;}}}}

586 名前:デフォルトの名無しさん [02/07/28 21:18]
>>585
関数ポインタか…

587 名前:580 mailto:sage [02/07/29 00:07]
rangecoderを7行にしたみなさんこちらも挑戦してみてください、と言ってみるテスト
もう一人協力いただければ、文殊の知恵で何とかできるかもしれない

#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d;main(int i){if
(i>1){for(l=getw(stdin),d=malloc(l+8);s<l;)for(g=m=q(),m>n?k=q()|g-128<<8,m=k>>
10:0;m--;s++)d[s]=g>n?d[s-(k&f)]:q();for(;l--;)p(*d++);}else{for(;~((d=realloc(
d,9+l))[l]=q());)l++;putw(l,stdout);memset(d+l,0,8);for(l+=8;m=l-s,m>3;s++){for
(j=m-2>31?31:m;m*j>2;j--)for(i=s<f?0:s-f;i<s*m;)m=memcmp(d+i++,d+s,j);if(!m){
for(k=s-g;k;)for(p(m=k>n?n:k);m--;k--)p(d[g++]);k=++g-i;s+=j;g+=j;p(j*4+132|k>>
8);p(k);}}}}

588 名前:デフォルトの名無しさん [02/07/29 00:11]
みんな作るときどうしてる?

・普通にコード書く→スペース・タブなどを潰して縮めて見てを繰り返す
・いきなり7行書きをする


589 名前:デフォルトの名無しさん mailto:sage [02/07/29 00:39]
>>588
for や if は右にそのまま書く。
インデントは長いブレースのところにだけ置く。
などとして、15行程度のソースコードで書いている。

590 名前:饅頭 mailto:達成age [02/07/29 09:30]
多分memsetはいらないと。
あと>>587は動かなかった。
#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d;main(int i){if
(i>1){for(l=getw(stdin),d=malloc(l+8);s<l;)for(g=m=q(),m>n?k=q()|g-128<<8,m=k>>
10:0;m--;s++)d[s]=g>n?d[s-(k&f)]:q();for(;l--;)p(*d++);}else{for(;~(s=q());d[l
++]=s)d=realloc(d,l+9);putw(l,stdout);for(l+=8;s<l-3;s++){for(m=j=l-s-2>31?31:l
-s;m&&j>2;j--)for(i=s<f?0:s-f;m&&i<s;)m=memcmp(d+i++,d+s,j);if(!m){for(k=s-g;k;
)for(p(m=k>n?n:k);m--;k--)p(d[g++]);k=++g-i;s+=j;g+=j;p(j*4+132|k>>8);p(k);}}}}


591 名前:561 [02/07/29 18:36]
15パズル、7行達成しました〜♪

P.java(JDK1.4.0で確認)

import java.awt.*;public class P{public static void main(String[]s){new Frame()
{class B extends Button{String l,r;int o;B(int i){o=i%4+i/4*6;s(r=i+1+"");}void
m(){if((64<<o&4257<<n.o)>0){n.s(l);s("");n=this;}}void s(String n){setLabel(l=n
);}}int g;B n,a[]=new B[16];{setLayout(new GridLayout(4,4));for(;g<16;g++)add(n
=a[g]=new B(g));n.s("");pack();show();for(;g++<999;)a[(int)(Math.random()*16)].
m();}public boolean action(Event e,Object o){if(g<0)System.exit(0);((B)e.target
).m();for(g=15;g-->0;)if(a[g].l!=a[g].r)return 1>0;n.s("E");return 1>0;}};}}

ちょっと仕様変更して、

・ウィンドウクローズボタンをあきらめ
 (七行スレのJavaプログラム標準?(^^;))
・ゲームクリア時、リスタートせず終了するよう変更

としました。
あと、先達のテクニックも参考にさせていただきました。
(匿名クラスを使うのは目から鱗…)


592 名前:饅頭 mailto:sage [02/07/29 18:58]
どうせなのでもう少し削っておきました。

#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d;main(int i){if
(i>1)for(l=getw(stdin),d=malloc(l+8);s<l;)for(g=m=q(),m>n?k=q()|g-128<<8,m=k>>
10:0;m--;s++)p(d[s]=g>n?d[s-(k&f)]:q());else{for(;~(s=q());d[l++]=s)d=realloc(d
,l+9);putw(l,stdout);for(l+=8;s<l-3;s++){for(m=j=l-s-2>31?31:l-s;m&&j>2;j--)for
(i=s<f?0:s-f;m&&i<s;)m=memcmp(d+i++,d+s,j);if(!m){for(k=s-g;k;)for(p(m=k>n?n:k)
;m--;k--)p(d[g++]);p(++j*4+128|(k=s-i+1)>>8);p(k);s=(g+=j)-1;}}}}

593 名前:デフォルトの名無しさん mailto:sage [02/07/29 19:58]
>>590
>>587は動作しますが、>>590および>>592は動作しません・・・core dump
memset および復号時の l までの復号は必須のようですよ?

当片 gcc 2.95.2 を使用しています。

594 名前:580 mailto:sage [02/07/29 20:28]
ややっ7行達成と思ったのですが、>>593での指摘通り、動きません。
前スレのレスを見ると、符号語を過剰に生成して、
復号時に余分を切り捨てるという仕組みなので、
アルゴリズムを変えないと memset などは消せないのかもしれませんね。
ちなみに私は Cygwin(or FreeBSD) + gcc 2.95.3 を使用しています。



595 名前:饅頭 mailto:sage [02/07/29 23:34]
むう、一応やってみました。これでオッケーなら七行達成です。
#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d;main(int i){if
(i>1)for(l=getw(stdin),d=malloc(l+8);s<l;)for(g=m=q(),m>n?k=q()|g-128<<8,m=k>>
10:0;m--&&s<l;s++)p(d[s]=g>n?d[s-(k&f)]:q());else{for(;~((d=realloc(d,9+l))[l]=
q());)l++;putw(l,stdout);memset(d+l,0,8);for(l+=8;s<l-3;s++){for(j=l-s>33?31:l-
s;j>2;j--)for(i=s<f?0:s-f;i<s;)if(!memcmp(d+i++,d+s,j)){for(k=s-g;k;)for(p(m=k>
n?n:k);m--;k--)p(d[g++]);p(j*4+128|(k=s-i+1)>>8);p(k);g+=j;s=g-1;goto z;}z:}}}

596 名前:饅頭 mailto:sage [02/07/30 00:59]
すいません>>595はVCで文句を言われました。
これで七行です。多分gccでもO.K.ではないかと。
#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d;main(int i){if
(i>1)for(l=getw(stdin),d=malloc(l+8);s<l;s++,m--)!m?g=m=q(),m>n?k=q()|g-128<<8,
m=k>>10:0:0,p(d[s]=g>n?d[s-(k&f)]:q());else{for(;~(s=q());d[l++]=s)d=realloc(d,
l+9);putw(l,stdout);memset(d+l,0,8);for(l+=8;s<l-3;s++){for(j=l-s>33?31:l-s;j>2
;j--)for(i=s<f?0:s-f;i<s;)if(!memcmp(d+i++,d+s,j)){for(k=s-g;k;)for(p(m=k>n?n:k
);m--;k--)p(d[g++]);p(j*4+128|(k=s-i+1)>>8);p(k);g+=j;s=g-1;goto z;}z:;}}}






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

前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