1 名前:デフォルトの名無しさん [02/04/15 12:09] 7行×79文字なら言語は問いません。 過去作品は>>2-5 を参照。 ■前スレ pc.2ch.net/test/read.cgi/tech/984182993/
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);}