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

655 名前:デフォルトの名無しさん [02/08/11 09:08]
なんで7行X80じゃ無いの?

656 名前:デフォルトの名無しさん mailto:sage [02/08/11 10:35]
>>655
末尾に改行があるから。

657 名前:age mailto:age てみた [02/08/13 02:20]
ほしゅ

658 名前:デフォルトの名無しさん [02/08/13 16:39]
age


659 名前:デフォルトの名無しさん [02/08/15 03:01]
最近、ちょっとさびしいねあげ

660 名前:*nix厨 mailto:sage [02/08/16 18:10]
お盆だからしょうがないよ
漏れも実家に帰っているのでコードが書けましぇん
実装に向けて機能の刈り込みとか細々やってます

661 名前:デフォルトの名無しさん mailto:sage [02/08/16 22:22]
暇だったので前スレにあったSHA1を試してみた
でも10行が限界、ここから更に3行は無理ぽ

#include<stdio.h>
size_t*p,n,i,z,l,h,B[16],W[80],I[]={0x67452301,0xefcdab89,0x98badcfe,271733878,
0xc3d2e1f0},H[85],d;E(s){for(z=4;z--;s>>=8)d=d<<8|s&255;}X(k){*p+=(p[1]<<5|p[1]
>>27)+p[5]+W[i++]+k;p[2]=p[2]<<30|p[2]/4;}Y(k){*p=p[2]^p[3]^p[4];X(k);}S(a){for
(a=4;a--;)L(h>>a*8);}L(c){n++[(char*)B]=c;if(!(n&=63)){for(;i<80;W[i++]=d)i>15?
p=W+i-16,z=p[13]^p[8]^p[2]^*p,d=z+z|z>>31:E(B[i]);memcpy(p=H+80,I,20);for(p--,i
=0;i<80;p--)i/20&1?Y(i<40?0x6ed9eba1:0xca62c1d6):X(i<20?*p=p[2]&(p[3]^p[4])^p[4
],0x5a827999:(*p=p[2]&(p[3]|p[4])|p[3]&p[4],0x8f1bbcdc));for(i=6;--i;)I[i-1]+=p
[i];}}main(int a,char**v){FILE*f=fopen(v[1],"rb");for(;~(a=getc(f));h+=!(l+=8))
L(a);for(L(128);n-56;)L(0);for(S(),S(h=l);i<5;)printf("%08x",I[i++]);}

662 名前:561 [02/08/19 18:49]
お盆明けage〜。
3D迷路です。(M.java : 現在12行)

import java.awt.*;class M{public static void main(String[]a){new Frame(){int W=
200,M=15,G=5,x,y,d,u,v,a,b,i,j;int[]s={0,1,0,-1,0},m[]=new int[M][M],w[]={{36,
48,50,40,7,3},{36,80,84,40},{12,36,40,20,9,1},{12,100,108,20},{0,12,20,10}},q;
Canvas c;{for(;i<M*M;)m[x=i%M][y=i++/M]=x<2|y<2|x>M-3|y>M-3?1:0;m[M-3][M-2]=2;
for(i=G*G;i>0;)if(m[x=(j=(int)(Math.random()*G*G*4))%G*2+3][y=j/G%G*2+3]<1&m[x+
s[j/=G*G]*2][y+s[j+1]*2]>0)m[x][y]=m[x+s[j]][y+s[j+1]]=i/i--;x=y=2;add(c=new
Canvas(){{resize(W,W);}public void paint(Graphics g){for(i=0;i<8;i++){u=(i+2)%3
-1;v=2-i/3;j=m[x+s[d]*u+s[d+1]*v][y-s[d+1]*u+s[d]*v];if(j>0){g.setColor(j>1?
Color.RED:Color.GRAY);Polygon p=new Polygon();q=w[(i%3)*2/3+(i/3)*2];for(j=0;j<
q.length;){u=q[j++];u=i%3<1?120-u:u;p.addPoint(u/11*20,u%11*20);}g.fillPolygon(
p);}}}});pack();show();}public boolean keyDown(Event e,int k){k-=51;d=k>0&k<4?d
+k&3:d;if(k==5&m[a=x+s[d+1]][b=y+s[d]]<1){x=a;y=b;}c.repaint();return 1>0;}};}}

せっかくだから赤い扉を目指してください(笑)
(辿り着いても、何も起きませんけど(^^;))
操作は8で前進、4/6で左右90度回転、5で180度回転、です。

迷路作成部分が2行半ほどあるのが無駄かな。
迷路を固定にしちゃえば、もう少し縮められそうですが…。


663 名前:デフォルトの名無しさん mailto:sage [02/08/20 21:56]
>661
9行にしか縮まらん

#include <stdio.h>
size_t*p,n,i,z,l,h,B[16],W[80],I[]={0x67452301,0xefcdab89,0x98badcfe,271733878,
0xc3d2e1f0},H[85],d;L(c){((char*)B)[3^n++]=c;if(!(n&=63)){for(;i<80;W[i++]=d)d=
i>15?p=W+i-16,z=p[13]^p[8]^p[2]^*p,z+z|z>>31:B[i];for(i=!memcpy(p=H+80,I,20);--
p,i<80;*p+=(p[1]<<5|p[1]>>27)+p[5]+W[i++]+c,p[2]=d<<30|d/4)d=p[2],z=p[3],c=p[4]
,c=i/20&1?*p=d^z^c,i<40?0x6ed9eba1:0xca62c1d6:i<20?*p=d&(z^c)^c,0x5a827999:(*p=
d&(z|c)|z&c,0x8f1bbcdc);for(i=6;--i;)I[i-1]+=p[i];}}S(a){for(a=4;a--;)L(h>>a*8)
;}main(int a,char**v){FILE*f=fopen(v[1],"rb");for(;~(a=getc(f));h+=!(l+=8))L(a)
;for(L(128);n-56;)L(0);for(S(),S(h=l);i<5;)printf("%08x",I[i++]);}



664 名前:デフォルトの名無しさん mailto:sage [02/08/23 15:09]
期待age




                              夏だから期待sage。

665 名前:デフォルトの名無しさん mailto:sage [02/08/24 02:49]
SHA1(>663)の続きだが、漏れはそろそろ限界
でもbig endian用がinclude以外は7行に逝ったからいいや

>little endian用
#include <stdio.h>
size_t*p,H[186]={0x67452301,0xefcdab89,0x98badcfe,271733878,0xc3d2e1f0},n,d,z,l
,h;L(c){((char*)p=H+90)[3^n++]=c;if(n>63){for(;z<80;p++)p[16]=++z>16?n=p[13]^p[
8]^p[2]^*p,n+n|n>>31:*p;for(memcpy(p-=85,H,20);z--;1[p--]=d<<30|d/4)d=p[1],n=p[
2],c=p[3],p[-1]=p[4]+(*p<<5|*p>>27)+H[185-z]+0x5a827999+(z/20&1?z>59?d&(n^c)^c:
882459459+(d&(n|c)|n&c):(z>39?341275144:0x6fe0483d)+(d^n^c));for(;z=n=H-p--;)*p
+=p[5];}}S(a){for(z=4;z;)L(a>>--z*8);}main(a,v)char**v;{FILE*f=fopen(v[1],"rb")
;for(;~(a=getc(f));h+=!(l+=8))L(a);for(L(128);n-56;)L(0);for(S(h),S(l);z<5;)
printf("%08x",H[z++]);}

>big endian用
#include <stdio.h>
size_t*p,H[186]={19088743,0x89abcdef,0xfedcba98,0x76543210,0xf0e1d2c3},n,d,z,l,
h;L(c){n++[(char*)p=H+90]=c;if(n>63){for(;z<80;p++)p[16]=++z>16?n=p[13]^p[8]^p[
2]^*p,n+n|n>>31:*p;for(memcpy(p-=85,H,20);z--;1[p--]=d<<30|d/4)d=p[1],n=p[2],c=
p[3],p[-1]=p[4]+(*p<<5|*p>>27)+(z/20&1?z>59?d&(n^c)^c:882459459+(d&(n|c)|n&c):(
z>39?341275144:0x6fe0483d)+(d^n^c))+H[185-z]+0x5a827999;for(;z=n=H-p--;)*p+=p[5
];}}main(a,v)char**v;{FILE*f=fopen(v[1],"rb");for(;~(a=getc(f));h+=!(l+=8))L(a)
;for(L(128);n-56;)L(0);p[14]=h;n=63;for(L(p[15]=l);z<5;)printf("%08x",H[z++]);}

666 名前:sage mailto:sage [02/08/24 10:32]
IyBNSU5PUlMgVU5ERVIgQUdFIDE4IEFSRSBQUk9ISUJJVEVEIFRPIEVYRUNVVEUgVEhJUyBT
Q1JJUFQuIDE4GyRCOlBMJEt+O0hNUTZYO18bKEIuCnN1YiBnZXR7bG9jYWwkXz1zaGlmdDtg
dzNtIC1kdW1wX3NvdXJjZSAkX2BvcmBseW54IC1zb3VyY2UgJF9gb3JgR0VUICRfYG9yIGRp
ZX0KJGI9Imh0dHA6Ly93d3cua2suaWlqNHUub3IuanAvfnJ1YnkvZW1vbi8iOyRyPXEnaHR0
cDovL1stXy5+YS16QS1aMC05JS9dK1wucm0nOwptYXB7bWFwe3N5c3RlbSJ3Z2V0IC14ICRf
In1nZXQoJGIuJF8pPX4vJHIvZ31xdyh0aW1lLmh0bSBtYWluLmh0bWwgbWFpbjIuaHRtbCkK

667 名前:デフォルトの名無しさん mailto:sage [02/08/24 23:41]
>>662
やー、縮まりませんな。

import java.awt.*;class M{public static void main(String[]a){new Frame(){int M=
15,x,y,d,u,v,a,b,i,j;int[]s={0,1,0,-1,0},m[]=new int[M][M],q,w[]={{36,48,50,40,
7,3},{36,80,84,40},{12,36,40,20,9,1},{12,100,108,20},{0,12,20,10}};Canvas c;{for
(;i<225;m[12][13]=2)m[x=i%M][y=i++/M]=x<2|y<2|x>12|y>12?1:0;for(i=25;i>0;x=y=2)
if(m[x=(j=(int)(Math.random()*100))%5*2+3][y=j/5%5*2+3]<1&m[x+s[j/=25]*2][y+s[j
+1]*2]>0)m[x][y]=m[x+s[j]][y+s[j+1]]=i/i--;add(c=new Canvas(){{resize(200,200);
}public void paint(Graphics g){for(i=0;i<8;){u=(i+2)%3-1;v=2-i/3;j=s[d+1];j=m[x
+s[d]*u+j*v][y-j*u+s[d]*v];g.setColor(j>1?Color.RED:Color.GRAY);g.fillPolygon(
new Polygon(){{q=w[(i%3)*2/3+(i/3)*2];for(v=0;j>0&&v<q.length;addPoint(u/11*20,
u%11*20)){u=q[v++];u=i%3<1?120-u:u;}}});i++;}}});pack();show();}public boolean
keyDown(Event e,int k){k-=51;d=k>0&k<4?d+k&3:d;if(k==5&m[a=x+s[d+1]][b=y+s[d]]<
1){x=a;y=b;}c.repaint();return 1>0;}};}}

668 名前:デフォルトの名無しさん [02/08/24 23:54]
>>665
little endian 版、標準入力から読むようにして7行

unsigned*p,H[186]={0x67452301,0xefcdab89,0x98badcfe,271733878,0xc3d2e1f0},n,d,z
,l,h;L(c){((char*)p=H+90)[3^n++]=c;if(n>63){for(;z<80;p++)p[16]=++z>16?n=p[13]^
p[8]^p[2]^*p,n+n|n>>31:*p;for(memcpy(p-=85,H,20);z--;1[p--]=d<<30|d/4)d=p[1],n=
p[2],c=p[3],p[-1]=p[4]+(*p<<5|*p>>27)+H[185-z]+0x5a827999+(z/20&1?z>59?d&(n^c)^
c:882459459+(d&(n|c)|n&c):(z>39?341275144:0x6fe0483d)+(d^n^c));for(;z=n=H-p--;)
*p+=p[5];}}S(a){for(z=4;z;)L(a>>--z*8);}main(a){for(;~(a=getchar());h+=!(l+=8))
L(a);for(L(128);n-56;)L(0);for(S(h),S(l);z<5;)printf("%08x",H[z++]);}

669 名前:デフォルトの名無しさん mailto:sage [02/08/25 00:05]
>>653
20行 Lisp 期待してます。


670 名前:デフォルトの名無しさん mailto:sage [02/08/25 01:19]
FORTHのサブセットのインタープリターってできないかな?

671 名前:デフォルトの名無しさん mailto:sage [02/08/25 01:28]
>>670
まずは逆ポーランド計算機だな。
Cならincludeを除いて2行くらいで書ければいけるかもしれぬ。

・・すでにあったような気がするけど、気のせいか。

672 名前:デフォルトの名無しさん mailto:sage [02/08/25 10:14]
宿題スレのお題を元に
7行で提出しる!

ってか、一度やってみてほしい。

673 名前:665 mailto:sage [02/08/25 17:30]
SHA1でH[2]を0で初期化、mainでfor(H[2]=~*H;~(a=...とすれば1文字減る事に今更気付いた



674 名前:ageとくか [02/08/25 20:00]
>>672
大抵の宿題は7行よりはるかに短く書けてしまう罠

675 名前:デフォルトの名無しさん mailto:sage [02/08/25 21:35]
printfで終わりだったり名(w

676 名前:667 mailto:sage [02/08/26 02:43]
>>667
q=w[(i%3)*2/3+(i/3)*2];をq=w[5-v*2-(u==0?0:1)];として1文字減る

677 名前:デフォルトの名無しさん mailto:sage [02/08/26 02:50]
>>676
それならq=w[(u==0?5:4)-v*2];とできる?

678 名前:デフォルトの名無しさん mailto:sage [02/08/26 02:58]
3次元表示迷路、そのままだとだめそうね。
位置を(x,y)で管理せずにp=x*15+yとしたpで扱うとどうかな。

679 名前:667 mailto:sage [02/08/26 03:07]
>>677
あ、そうですた。
>>678
試してみます。

680 名前:667 mailto:sage [02/08/26 04:18]
1行短くなって11行になりますた。
迷路を1次元配列で扱うようにしてすっきりしたので、別のところが縮むかも。

import java.awt.*;class M{public static void main(String[]a){new Frame(){Canvas
c;int[]s={1,-15,-1,15,1},q,w[]={{36,48,50,40,7,3},{36,80,84,40},{12,36,40,20,9,
1},{12,100,108,20},{0,12,20,10}};int d,u,v,a,i,j,m[]=new int[225],p;{for(;i<225
;m[193]=2)m[i]=i<30|i>194|(2+i++)%15<4?1:0;for(i=25;i>0;p=32){p=(j=(int)(Math.
random()*100))/4;if(m[p=p/5*20+p*2+48]<1&m[p+s[j%=4]*2]>0)m[p]=m[p+s[j]]=i/i--;
}add(c=new Canvas(){{resize(200,200);}public void paint(Graphics g){for(i=0;i<8
;i++){u=(i+2)%3-1;v=2-i/3;j=m[p+s[d]*v-s[d+1]*u];g.setColor(j>1?Color.RED:Color
.GRAY);g.fillPolygon(new Polygon(){{q=w[(u==0?5:4)-v*2];for(v=0;j>0&v<q.length;
addPoint(u/11*20,u%11*20)){u=q[v++];u=i%3<1?120-u:u;}}});}}});pack();show();}
public boolean keyDown(Event e,int k){k-=51;d=k>0&k<4?d+k&3:d;if(k==5&m[a=p+s[d
]]<1)p=a;c.repaint();return 1>0;}};}}

681 名前:デフォルトの名無しさん mailto:sage [02/08/26 04:25]
>>680
絶対に壁が置かれる25点を順番に調べて、その4方位の壁の無い部分をランダムで選択。
少し短く&速くなるのではないかな。

682 名前:667 mailto:sage [02/08/26 04:56]
>>681
ちょっとゲーム性は落ちる(迷路がやや簡単になる)けど、その分短くなりますた。

# それにしても、こんな時間まで何を...

683 名前:667 mailto:sage [02/08/26 18:47]
迷路 10行と8文字

import java.awt.*;class M{public static void main(String[]a){new Frame(){int d,
u,v,i,j,p;int[]s={1,-15,-1,15,1},q,m=new int[225],w[]={{36,48,50,40,7,3},{36,80
,84,40},{12,36,40,20,9,1},{12,100,108,20},{0,12,20,10}};Canvas c=new Canvas(){{
resize(200,200);}public void paint(Graphics g){for(i=0;i<8;i++){u=(i+2)%3-1;v=2
-i/3;j=m[p+s[d]*v-s[d+1]*u];g.setColor(j>1?Color.RED:Color.GRAY);g.fillPolygon(
new Polygon(){{q=w[(u==0?5:4)-v*2];for(v=0;j>0&v<q.length;addPoint(u/11*20,u%11
*20)){u=q[v++];u=i%3<1?120-u:u;}}});}}};{for(;i<225;m[193]=2)m[i]=i<30|i>194|(2
+i++)%15<4?1:0;for(;j<25;p=32)if(m[(p=j/5*20+j*2+48)+s[i=(int)(Math.random()*4)
]*2]>0)m[p]=m[p+s[i]]=++j/j;add(c);pack();show();}public boolean keyDown(Event
e,int k){k-=51;d=k>0&k<4?d+k&3:d;if(k==5&m[k=p+s[d]]<1)p=k;c.repaint();return 1
>0;}};}}



684 名前:デフォルトの名無しさん [02/08/26 20:35]
お題:逆ポーランド電卓、はどなたか?

685 名前:デフォルトの名無しさん mailto:sage [02/08/26 20:42]
>>684
>>5

686 名前:デフォルトの名無しさん mailto:sage [02/08/26 20:52]
>>685
FORTHにしる!

687 名前:デフォルトの名無しさん mailto:sage [02/08/26 23:03]
文字数の都合で、茶色の中を黒い部分を目指すことになりますた。
ここいらで限界です。

import java.awt.*;class M{public static void main(String[]a){new Frame(){int[]s
={1,-15,-1,15,1},m=new int[225],w={48,50,40,7,3,36,80,84,40,40,40,36,12,1,9,20,
20,20,108,100,12,20,10,0,0,0};int d,u,v,i,j,p,q;Canvas c=new Canvas(){{resize(
200,200);}public void paint(Graphics g){for(i=0;i<8;g.fillPolygon(new Polygon()
{{for(v=0;j>0&v<6;addPoint(u/11*20,u%11*20)){u=w[(i%3)/2*5+i/3*10+v++];u=i%3<1?
120-u:u;}i++;}}))g.setColor(new Color(j=m[p+s[d]*(2-i/3)-s[d+1]*((i+2)%3-1)]<<
23));}};{for(;i<225;m[193]=2)m[i]=i<30|i>194|(2+i++)%15<4?1:0;for(;j<25;p=32)if
(m[(p=j/5*20+j*2+48)+s[i=(int)(Math.random()*4)]*2]>0)m[p]=m[p+s[i]]=++j/j;add(
c);pack();show();}public boolean keyDown(Event e,int k){k-=51;d=k>0&k<4?d+k&3:d
;if(k==5&m[k=p+s[d]]<1)p=k;c.repaint();return 1>0;}};}}

688 名前:デフォルトの名無しさん mailto:sage [02/08/27 15:50]
>>687
なかなか短くなってるけど、もっと減らさないとだめそうだね
キー入力判定部分と、迷路描画部分が短くなりそうだけど
予約語と定数が多いので、7行化はかなり困難げ

689 名前:688 mailto:age [02/08/27 22:53]
import java.awt.*;class M{public static void main(String[]a){new Frame(){int d,
u,v,i,j,p;int[]s={1,-15,-1,15,1},m=new int[u=240],w={48,50,40,7,3,36,80,84,40,
40,40,36,12,1,9,20,20,20,108,100,12,20,10,0,0,0};Canvas c=new Canvas(){{resize(
u,u);}public void paint(Graphics g){for(i=-1;++i<8;g.fillPolygon(new Polygon(){
{for(v=0;j>0&v<6;addPoint((i%3<1?120-u:u)/11*24,u%11*24))u=w[(i%3)/2*5+i/3*10+v
++];}}))g.setColor(new Color(j=m[p+s[d]*(2-i/3)-s[d+1]*((i+2)%3-1)]<<23));}};{
for(p=32;i<u;)m[i]=i<30|i>194|(2+i++)%15<4?1:0;for(m[193]=2;j<25;)m[v=j/5*20+j*
2+48]=m[v+s[i=(int)(Math.random()*4)]]=m[v+s[i]*2]>0?++j/j:0;add(c);pack();show
();}public boolean keyDown(Event e,int k){k-=51;d=k>0&k<4?d+k&3:d;p=k==5&m[k=p+
s[d]]<1?k:p;c.repaint();return 1>0;}};}}
>>687私にはこれ以上は無理でした。パラダイムシフトを期待して、あげ。

690 名前:561 mailto:sage [02/08/28 18:56]
縮んできましたね〜。
色んなテクニックがあって、ほんと参考になります。

>689
「パラダイムシフト」なんてレベルではありませんが、ちょっと短くなりました。
(M.java : 現在10行[9行+19文字])

import java.awt.*;class M{public static void main(String[]a){new Frame(){int d,
u,i,j,p;int[]s={1,-15,-1,15,1},w={0,0,u=12,u,u,100,1,u,p=36,p,p,80,3,p,48},m=
new int[u=240];Canvas c=new Canvas(){{resize(u,u);}public void paint(Graphics g
){for(i=9;--i>0;g.fillPolygon(new Polygon(){{for(j=j/2*6-1;++j<6;addPoint((i%3<
2?120-u:u)/11*24,(j<3?120-u:u)%11*24))u=w[(i%3+1)/2*3+i/3*6+(j<3?j:5-j)-3];}}))
g.setColor(new Color((j=m[p+i/3*s[d]-((i+1)%3-1)*s[d+1]])<<23));}};{for(;i<165;
)m[i+28]=i++%15<4?0:2;for(m[193]=1;j<25;p=32)m[p=j/5*20+j*2+48]=m[p+s[i=(int)(
Math.random()*4)]]=m[p+s[i]*2]<2?++j*0:2;add(c);pack();show();}public boolean
keyDown(Event e,int k){k-=51;p=k==5&m[k=p+s[d=k>0&k<4?d+k&3:d]]>1?k:p;c.repaint
();return 1>0;}};}}

通路=0,壁=1,扉=2だったのを、通路=2,壁=0,扉=1にしました。
迷路の初期化部分が短縮できたようです。
また、この結果「茶色の中を黒い部分を目指す」が「黒の中を茶色い部分を目指す」とな
ります。
さらに、壁ポリゴンが一枚あたり5(+1)データだったのを、3データに減らしました。
ただ、このせいでaddPointの辺りがちょっと冗長ぎみに…。


691 名前:デフォルトの名無しさん mailto:sage [02/08/29 07:47]
>>690 5文字だけだけど
配列sをwとまとめる(sはwで置き換え)。宣言も[]をまとめる。
int d,u,i,j,p,w[]={1,-15,-1,15,1,0,0,u=12,u,u,100,1,u,p=36,p,p,80,3,p,48},m[]=new int[u=240];
壁描画部分で、もとwとのずれを修正。
u=w[(i%3+1)/2*3+i/3*6+(j<3?j:5-j)+2];

692 名前:561 [02/08/29 19:16]
3D迷路、9行達成&保守age。(M.java : 現在9行)

import java.awt.*;class M{public static void main(String[]a){new Frame(){int d,
u,i,j,p,w[]={1,-15,-1,15,1,0,0,u=12,u,u,100,1,u,p=36,p,p,80,3,p,48},m[]=new int
[u=240];Canvas c=new Canvas(){{resize(u,u);}public void paint(Graphics g){for(i
=9;--i>0;g.fillPolygon(new Polygon(){{for(j=j/2*6;j<6;addPoint((i%3<2?120-u:u)/
11*24,(j++<3?120-u:u)%11*24))u=w[i*i%3*3+i/3*6+(j*j%5+8)/3];}}))g.setColor(new
Color((j=m[p+i/3*w[d]-(-~i%3-1)*w[d+1]])<<23));}};{for(add(c);i<165;m[193]=1)m[
i+28]=i++%15<4?0:2;for(pack();j<25;p=32)m[p=j/5*20+j*2+48]=m[p+w[i=(int)(Math.
random()*4)]]=m[p+w[i]*2]<2?++j*0:2;show();}public boolean keyDown(Event e,int
k){k-=51;p=k==5&m[k=p+w[d=k>0&k<4?d+k&3:d]]>1?k:p;c.repaint();return 1>0;}};}}

>691
どうもです。役立ちました〜。

あと、いくつか狡いテクニックを駆使しました(笑)

・n+1と-~nが等価であるため、"(i+1)%3"を"-~i%3"へ変更。
 単項演算子は優先順位が高いので括弧が不要になります。(せこ)

・n*n%3の数列が0,1,1,0,1,1,...になることを利用して、
 "(i%3+1)/2*3"を"i*i%3*3"に変更。

・n*n%5の数列がn=0〜5では0,1,4,4,1,0になることを利用して、
 "(j<3?j:5-j)-2"を"(j*j%5+8)/3"に置き換え。

ソース見ても、何やってるのか分からない状態に…(^^;)

693 名前:デフォルトの名無しさん mailto:sage [02/08/29 20:59]
>>692
アプレット版を作ってみました。クラス名変えてます。
appletviewerでは動いたけど、IE5.5だとだめでした。
-(-~i%3-1) って、 +(1-~i%3) でも良い?

import java.awt.*;public class N extends java.applet.Applet{int d,u,i,j,p,w[]={
1,-15,-1,15,1,0,0,u=12,u,u,100,1,u,p=36,p,p,80,3,p,48},m[]=new int[u=240],x=120
;public void paint(Graphics g){for(i=9;--i>0;g.fillPolygon(new Polygon(){{for(j
=j/2*6;j<6;addPoint((i%3<2?x-u:u)/11*24,(j++<3?x-u:u)%11*24))u=w[i*i%3*3+i/3*6+
(j*j%5+8)/3];}}))g.setColor(new Color((j=m[p+i/3*w[d]+(1-~i%3)*w[d+1]])<<23));}
{for(;i<165;m[193]=1)m[i+28]=i++%15<4?0:2;for(;j<25;p=32)m[p=j/5*20+j*2+48]=m[p
+w[i=(int)(Math.random()*4)]]=m[p+w[i]*2]<2?++j*0:2;}public boolean keyDown(
Event e,int k){k-=51;p=k==5&m[k=p+w[d=k>0&k<4?d+k&3:d]]>1?k:p;repaint();return
1>0;}}

<HTML><BODY>
<APPLET code="N.class" width="240" height="240"></APPLET>
</BODY></HTML>



694 名前:693 mailto:sage [02/08/29 21:02]
言い忘れましたが、x=120 は穴埋めです。

695 名前:561 mailto:sage [02/08/30 00:28]
>693
おっ、鋭いです〜。
ただ、"+(1-~i%3) "ではなくて"+(1+~i%3) "じゃないかな?

あと、
"w[i*i%3*3+i/3*6+(j*j%5+8)/3]"の部分は
"w[~-i*2/3*3+(j*j%5+17)/3]"と短縮できることが判明しました。

# x=120は無いほうがいいような…。

696 名前:デフォルトの名無しさん mailto:sage [02/08/30 08:29]
最単純RLE(復号込)
#include <stdio.h> /* encode:this.exe e in out / decode:this.exe d in out */
int i=1,p;main(int c,char*v[]){FILE*f=fopen(v[2],"rb"),*o=fopen(v[3],"wb");if(
*v[1]=='e'){p=fgetc(f);while((c=fgetc(f))>=0){if(!c-!p&&i<255)i++;else{fwrite(
&p,1,1,o);fwrite(&i,1,1,o);p=c;i=1;}}}else while((c=fgetc(f))>=0){if((p=fgetc(
f))<0)break;for(i=0;i<p;i++)fwrite(&c,1,1,o);}}

697 名前:デフォルトの名無しさん mailto:sage [02/08/30 11:18]
>>696
だからね。概出ものを持ってくるときはね、何か一工夫してほしいのね。
2行で書くとかね、良いアイデア・工夫があるとかね、面白くなってるとかね。
pc3.2ch.net/test/read.cgi/tech/984182993/101

698 名前:デフォルトの名無しさん mailto:sage [02/08/30 11:44]
>>695
ふと気が付いた、何でCanvas使っているんだろう?
というわけで、40文字くらい減らせました。

import java.awt.*;class M{public static void main(String[]a){new Frame(){int d,
u,i,j,p,w[]={1,-15,-1,15,1,0,0,u=12,u,u,100,1,u,p=36,p,p,80,3,p,48},m[]=new int
[u=240];public void paint(Graphics g){for(i=9;--i>0;g.fillPolygon(new Polygon()
{{for(j=j/2*6;j<6;addPoint((i%3<2?120-u:u)/11*24,(j++<3?120-u:u)%11*24))u=w[~-i
*2/3*3+(j*j%5+17)/3];}}))g.setColor(new Color((j=m[p+i/3*w[d]+(~i%3+1)*w[d+1]])
<<23));}{for(resize(u,u);i<165;m[193]=1)m[i+28]=i++%15<4?0:2;for(;j<25;p=32)m[p
=j/5*20+j*2+48]=m[p+w[i=(int)(Math.random()*4)]]=m[p+w[i]*2]<2?++j*0:2;show();}
public boolean keyDown(Event e,int k){k-=51;p=k==5&m[k=p+w[d=k>0&k<4?d+k&3:d]]>
1?k:p;repaint();return 1>0;}};}}

699 名前:デフォルトの名無しさん mailto:sage [02/08/30 13:39]
>>697
2行でおながいします。

700 名前:デフォルトの名無しさん mailto:sage [02/08/31 02:41]
>697
指摘すべきはツッコミどころ満載のコードの方だと思うのだが

701 名前:デフォルトの名無しさん mailto:sage [02/08/31 04:08]
>>696
プログラムのミスを修正した上で、標準入出力を使用。2行と27文字。むぅ。
符号化は引数(何でも良い)を付け、復号は何も付けない。

int putchar(),i,p,(*o)()=putchar;main(int c){if(c<2)while(~(c=getchar()))for(i=
getchar();i-->=0;)o(c);else{for(p=getchar();~(c=getchar());)i=c-p||i>254?o(p),o
(i),p=c,0:i+1;o(p);o(i);}}

702 名前:デフォルトの名無しさん [02/08/31 05:12]
>>701少し短くなた

int putchar(),i,p,c,(*o)()=putchar;main(int v){for((v=v>1)?p=getchar():0;~(c=
getchar());i=v&&c-p||i>254?o(p),o(i),p=c,0:i+1)if(!v)for(i=getchar();i-->=0;)o(
c);v?o(p),o(i):0;}

703 名前:デフォルトの名無しさん [02/08/31 07:07]
奥村本よりフラクタル圧縮画像の表示
現在10行

import java.awt.*;class F{public static void main(String[]a){new Frame(){double
x,y,s,t;int N,M,i,j,k,r,z[]=new int[6],h[]=new int[M=150];double[]a={.05,.05,
.46,.47,t=.42,t},b={0,0,-.32,-.15,.28,.26},c={0,0,.39,.17,-.25,-.35},d={.6,-.5,
.38,t,.45,.31,0,1,.6,1.1,1,.7},p=new double[6];{resize(600,600);show();}public
void paint(Graphics g){for(;i<6;s+=p[z[i]=i++])p[i]=Math.abs(a[i]*d[i]-b[i]*c[i
]);for(;j<6;z[k]=r){for(k=i=j;++i<6;)k=p[i]<p[k]?i:k;t=p[j];p[j]=p[k];p[k]=t;r=
z[j];z[j++]=z[k];}r=M;for(i=0;i<6;s-=p[i++])for(k=(int)(r*p[i]/s+.5);k-->0;)h[
--r]=z[i];for(i=0;i<50000;i++){j=h[(int)(Math.random()*M)];g.setColor(new Color
(1<<(r>1&N>1&k>1&j>1?15:23)));r=N;N=k;t=a[k=j]*x+b[j]*y;y=c[j]*x+d[j]*y+d[6+j];
x=t;if(i>9)g.drawRect(300+(int)(250*x),550-(int)(250*y),0,0);}}};}}



704 名前:703 mailto:sage [02/08/31 08:45]
ソート部分いらないかった。再描画時のバグを修正。
9行になりました。

import java.awt.*;class F{public static void main(String[]a){new Frame(){double
x,y,s,t;int M=150,N=M,i,j,k,r,z[]=new int[156];double[]a={.05,.05,.46,.47,t=.42
,t},b={0,0,-.32,-.15,.28,.26},c={0,0,.39,.17,-.25,-.35},d={.6,-.5,.38,t,.45,.31
,0,1,.6,1.1,1,.7},p=new double[6];{for(resize(600,600);i<6;s+=p[z[i]=i++])p[i]=
Math.abs(a[i]*d[i]-b[i]*c[i]);for(;j<6;s-=p[j++])for(k=(int)(N*p[j]/s+.5);k-->0
;)z[--N+6]=z[j];show();}public void paint(Graphics g){for(i=0;i<50000;i++){j=z[
(int)(Math.random()*M)+6];g.setColor(new Color(1<<(r>1&N>1&k>1&j>1?15:23)));r=N
;N=k;t=a[k=j]*x+b[j]*y;y=c[j]*x+d[j]*y+d[6+j];x=t;g.drawRect(300+(int)(250*x),
550-(int)(250*y),0,0);}}};}}

705 名前:703 mailto:sage [02/08/31 10:31]
かなり強引ですが、7行達成。

import java.awt.*;class F{public static void main(String[]a){new Frame(){int M,
N,i,j,k,r,z[]=new int[k=600],w[]={7,6,74,55,64,55};double x,y,t,a[]={.05,.05,x=
.46,x,t=.42,t,0,0,-.32,-.15,y=.26,y},c[]={0,0,.4,.17,-y,-.35,.6,-.5,.38,t,x,.31
,0,1,.6,1.1,1,.7};public void paint(Graphics g){for(i=0;i++<M*M;g.drawRect(300+
(int)(280*x),550-(int)(250*y),0,0)){j=z[(int)(Math.random()*M)];g.setColor(new
Color(1<<(r>1&N>1&k>1&j>1?15:23)));r=N;N=k;t=a[k=j]*x+a[6+j]*y;y=c[j]*x+c[6+j]*
y+c[12+j];x=t;}}{for(resize(k,k);i<6;i++)for(;w[i]-->0;)z[M++]=i;show();}};}}

706 名前:デフォルトの名無しさん mailto:sage [02/08/31 23:05]
コンパイル後のコードサイズが縮まらなきゃ意味ないんじゃないの。
何でこんなに夢中になる人がいるのか理解不能。

707 名前:デフォルトの名無しさん mailto:sage [02/08/31 23:20]
>>706
俺はあんたが理解不能。tiny.objでも使ってろヴォケ

708 名前:デフォルトの名無しさん mailto:sage [02/08/31 23:57]
>>706
コンパイル概念の無い言語はどうすればいいんだ

709 名前:デフォルトの名無しさん mailto:sage [02/09/01 00:14]
最初からパズルみたいな、お遊びと思って楽しんでるんだよ。
そこそこ勉強にもなるし。

710 名前:デフォルトの名無しさん mailto:sage [02/09/01 00:33]
>>709
トリッキープログラムに近いためか、プログラムの読解力がついた。
また反面教師にして、小難しいロジックを組まないようなプログラミングをするようになった。

711 名前:デフォルトの名無しさん [02/09/01 04:00]
とりあえず、Javaが盛んそうなので、前スレのレイトレ13行を縮めてみた
pc3.2ch.net/test/read.cgi/tech/984182993/209

import java.awt.*;class R{public static void main(String[]a){new Frame(){double
a,b,c,d,R;int x,y,w,z=255;{resize(z,z);show();}public void paint(Graphics g){
for(;y<z;y++)for(x=0;x<z;g.drawRect(x++,y+20,0,0))g.setColor(new Color(w=L(new
V(x-128,y-128,100),new V(0,0,200)),w,w));}int L(V A,V B){a=A.c(A);b=A.c(B);c=B.
c(B)-10000;R=(Math.sqrt(d=b*b-a*c)-b)/a;if(d>0){V N=new V(A.x*R,A.y*R,A.z*R);N.
n();R=(N.x+N.y-N.z)/Math.sqrt(3);A.x-=B.x;A.y-=B.y;A.z-=B.z;a=-N.c(A);N.x=2*N.x
*a+A.x;N.y=2*N.y*a+A.y;N.z=2*N.z*a+A.z;w=(int)(F(N)*R);return R>0?(w>0?w:(int)(
R*z)):30;}return F(A);}int F(V A){a=A.x;b=10000-A.r;c=A.y==0?0:b/A.y;return c>0
?((((a*c>0?a*c+b/2:-a*c)%b)>b/2)^(((A.z*c+200)%b)>b/2)?100:200):0;}};}}class V{
double x,y,z,r;V(double a,double b,double c){x=a;y=b;z=c;}V(V a){x=a.x;y=a.y;z=
a.z;}double c(V s){return x*s.x+y*s.y+z*s.z;}void n(){r=Math.sqrt(x*x+y*y+z*z);
x/=r;y/=r;z/=r;}}

712 名前:デフォルトの名無しさん [02/09/01 15:32]
>>703
七オメ

713 名前:デフォルトの名無しさん mailto:sage [02/09/01 16:11]
このスレすげえ。
ところで、ここにはってあるソースを
public class hoge {
.....
}
みたいな風に簡単に戻す方法ないですか。
やっぱ手動ですか?



714 名前:デフォルトの名無しさん mailto:sage [02/09/01 16:27]
>713
>>3 の下のほう。C用だけど。

715 名前:713 mailto:sage [02/09/01 16:37]
>>714
ありがとー

716 名前:デフォルトの名無しさん mailto:sage [02/09/01 18:37]
>>713
展開しても10数行だから、漏れは手動でしてる。
Java用を>>713が作るってのはどうだね?

717 名前:デフォルトの名無しさん mailto:sage [02/09/01 19:01]
;->;\r\nに変換すれば良いじゃん。
forとか例外部分は手で直す

718 名前:デフォルトの名無しさん mailto:sage [02/09/01 19:29]
>>717
それを7行プログラムでするのに、意味があるんだろ

719 名前:デフォルトの名無しさん mailto:sage [02/09/01 22:14]
7行プログラムを展開する7行プログラムかw

720 名前:デフォルトの名無しさん mailto:sage [02/09/01 22:29]
>>711>>705
グラフィックスが入ると、何だかすごいぞ、って感じがするね。
もちろん圧縮などもすごいんだけど、視覚に訴えるのは大きい。

721 名前:デフォルトの名無しさん mailto:sage [02/09/02 11:47]
7行プログラミング、やっても1週間で飽きそうだな。
住人のメンツかわんの早そうなスレだな。

722 名前:713 mailto:sage [02/09/02 14:42]
>>716
現在このスレ見て勉強中なので
いずれJavaを覚えたら作ってみます。Java用。

723 名前:デフォルトの名無しさん mailto:sage [02/09/02 21:57]
>>722がいい事言った!



724 名前:665 mailto:sage [02/09/02 22:22]
久々にSHA1を見直したらまだ削れる事に気付いた
これで>665のlittle endian用もinclude以外が7行、と
#つー訳で>668氏の7行標準入力版も更に短縮可能

#include <stdio.h>
size_t*p,*q,H[186]={0x67452301,0xefcdab89,0,271733878,0xc3d2e1f0},n,d,z,l,h;L(c
){((char*)q=H+90)[3^n++]=c;if(n>63){for(n=80,p=memcpy(q-5,H,20);n;1[p--]=d<<30|
d/4)d=q[13]^q[8]^q[2]^*q,q[16]=d+d|d>>31,d=p[1],z=p[2],c=p[3],p[-1]=(*p<<5|*p>>
27)+p[4]+0x5a827999+*q+++(--n/5&4?n>39?c^d&(z^c):882459459+(d&(z|c)|z&c):(n>39?
341275144:0x6fe0483d)+(d^z^c));for(;H-p--;)*p+=p[5];}}S(a){for(h=4;h--;)L(a>>h*
8);}main(a,v)char**v;{FILE*f=fopen(v[1],"rb");for(H[2]=~*H;~(a=getc(f));h+=!(l
+=8))L(a);for(L(128);n-56;)L(0);for(S(h),S(l);n<5;)printf("%08x",H[n++]);}

725 名前:702 mailto:sage [02/09/03 00:34]
RLEを縮めてみた。2行まで後8文字。

int putchar(),i,p,c,(*o)()=putchar;main(v){for(--v?p=getchar():0;~(c=getchar())
;i=v&&c-p||i>254?o(p),o(i),p=c,0:i+1)if(!v)for(i=getchar();i-->=0;)o(c);v?o(p),
o(i):0;}

726 名前:デフォルトの名無しさん mailto:sage [02/09/03 11:01]
RLE

727 名前:702 mailto:sage [02/09/03 11:10]
途中カキコ失礼。RLE2行達成。

int i,p,c;f(x){putchar(x);}main(v){for(--v?p=getchar():0;~(c=getchar());i=v&&c-
p||i>254?f(p),f(i),p=c,0:i+1)if(!v)for(i=getchar();~i--;)f(c);v?f(p),f(i):0;}

728 名前:デフォルトの名無しさん mailto:sage [02/09/03 20:25]
空ファイルを考慮すると↓の方が良いと思うのだが
int c,p,i;f(x){putchar(x);}main(v){for(p=getchar(),--v;~(c=getchar());p=v?i=254
<i||p-c?f(p),f(i),0:i+1,c:getchar())for(;!v&&~c--;f(p));v*~p?f(p),f(i):0;}

729 名前:デフォルトの名無しさん [02/09/05 20:52]
ファイルをアーカイブする。
exec filename1 filename2 ...
で標準出力に吐き出す
引数なしなら標準出力から読み込んで展開
上のほうの圧縮を組み合わせて使うと吉。かも。
#include <stdio.h>
char n[256];int main(int a,char**v){int(*g)()=getchar,i,c;FILE*f;size_t s;if(a-
1){printf("%d\n",a);for(i=1;i<a;i++){f=fopen(v[i],"rb");fseek(f,0,SEEK_END);s=
ftell(f);printf("%s\n%u\n",v[i],s);fseek(f,0,SEEK_SET);while((c=fgetc(f))!=EOF)
putchar(c);fclose(f);}}else{scanf("%d",&a);g();for(;--a;){gets(n);scanf("%d",&s
);g();f=fopen(n,"wb");for(;s--;){fputc(g(),f);}fclose(f);}}return 0;}

730 名前:デフォルトの名無しさん mailto:sage [02/09/05 22:32]
FreeBSDのdmesg|head -6を表示
本当はブートシーケンスでバーがくるくる回るところを表示したかったが、
プログラムが長くなっちゃってだめでした。
文章データは前スレのrangecoderをu=128で使用後、8x3=6ビットx4に変更後、+49している。

char t[]="Rm19aKD8`a:GGAa<?Hnn`lc94BhK<oYZa8VOOl=6Ifb1d]f\\`TQfMUiVfa[D`C7fEX?"
"=ImOhIg?8AAlTpio4IeKYX9]h3Qh]2cbL1RF^]4]_?9PS8ThmObf:\\1`oih:YG9@c?7?MenXQiQa"
"Q=3T`[K<L@T?>34l55Zjj2_dBpMF1npY;GH3@CojA3nYW3XZ8MH5H5\\Na1QV7Cg9jdJU\\@K;MjJ"
":IemMXN]\\9j3]YP78Wf31HU9TVhd58oi8An^AVECjm4LAI7iU:aPOPEB?iK:@_YY9=Recl`]nU<?"
"MBU^PWhV[MkS8Pi]d__G<95Ll3pU3`l44l2h[d:794YSYCf]U_g]1^jBUbBO93`V=]",*s=t;
unsigned*p,W,O=357,u=128,b=360,a[999],R=~0,x=256;f(){W=W*x|*p++;}main(K){for(p=
a+u;*s;)*s++-=49;for(s=t;b>0;b-=4)*p++=s[0]*4|s[1]>>4,*p++=(s[1]<<4|s[2]/4)%x,
*p++=(s[2]<<6|s[3])%x,s+=4;p=a+u;for(f(f(f(f())));O--;R*=a[b]){for(K=b=0;R<1<<
24;R*=x)f();for(R/=u++;W/R>=K;K+=a[b++]+1);W-=R*(K-++a[putchar(--b)]);}}

731 名前:デフォルトの名無しさん mailto:sage [02/09/05 22:42]
>>729
7行スレでそんな丁寧なプログラムを書かなくても・・・
つーわけで、今縮め中です。

732 名前:731 mailto:sage [02/09/05 23:21]
>>729
アーカイブのフォーマットを変更しちゃいました。
RLE(>>728)と組み合わせることで、圧縮書庫が7行でできそうですね。
# SEEK_END=2って規定されてましたっけ?

#include <stdio.h>
char n[256];int i,c;main(int a,char**v){FILE*f,*o;if(a-1)for(putw(a,o=stdout);
--a;)for(fseek(f=fopen(v[++i],"rb"),0,SEEK_END),puts(v[i]),putw(ftell(f),o),
rewind(f);~(c=getc(f));)putchar(c);else for(a=getw(o=stdin);--a;)for(f=fopen(
gets(n),"wb"),c=getw(o);c--;)putc(getchar(),f);}

733 名前:デフォルトの名無しさん mailto:sage [02/09/05 23:29]
>>732
規定されてない。
そもそも、EOF=-1も規定されてないからどっちにしろ処理系依存



734 名前:デフォルトの名無しさん mailto:sage [02/09/05 23:35]
>>733
EOF=-1をこのスレではいつの間にかデフォルトで使ってるよなぁ
SEEK_???もデフォルトしちゃえ!
ついでにi=i++も!

735 名前:デフォルトの名無しさん mailto:sage [02/09/05 23:56]
>>734 knkタンだ! ((((;゚Д゚)))) ガクガクブルブル

736 名前:デフォルトの名無しさん mailto:sage [02/09/06 12:53]
>>732
SEEK_END=2の使用はデフォルトってことでいいのかな
このくらいちぢまればRLE圧縮も組み込めるかな
ちぢめすぎてかえって組み込めなくなる罠かもしれない

#include <stdio.h>
char n[256];int i,c,b;main(a,v)char**v;{FILE*f,*o;b=a-1;for(b?putw(a,o=stdout):
(a=getw(o=stdin));--a;){f=fopen(b?v[++i]:gets(n),b?"rb":"wb");for(b?fseek(f,0,2
),puts(v[i]),putw(ftell(f),o),rewind(f),0:(i=getw(o));b?~(c=getc(f)):i--;)putc(
b?c:getc(o),b?o:f);}}

737 名前:デフォルトの名無しさん mailto:sage [02/09/06 20:29]
SEEK_END=2はPOSIXで規定されてたりしなかったっけ
どっちにしろこのスレでは縮むならある程度の処理系依存は
容認の方針だと思うけど

738 名前:デフォルトの名無しさん mailto:sage [02/09/06 22:44]
gccとbcc32で、EOF と SEEK_* が同じだったから、
まぁ、このスレで議論する分には困らないと思われ。

perlだとSEEK_*と0,1,2のどちらを使っても一致することが明記されてるんだけど。

739 名前:デフォルトの名無しさん mailto:sage [02/09/06 23:49]
>>736 + >>728 の6行書庫
#まだ100文字程あるから前スレRLEでも7行いけるかな?

#include <stdio.h>
FILE*f,*o;char n[256];int i,c,b,p,q;r(){return b?getc(f):i<=0?-1:getc(o);}w(x){
putc(x,b?o:f);}main(a,v)char**v;{for(!(b=a-1)?a=getw(o=stdin):putw(a,o=stdout);
--a;b*~p?w(p),w(q):0)for(f=fopen(b?v[++i]:gets(n),b?"rb":"wb"),b?fseek(f,q=0,2)
,puts(v[i]),putw(ftell(f),o),rewind(f),0:(i=getw(o)),p=r();~(c=r());p=b?q=q>254
||p-c?w(p),w(q),0:q+1,c:r())for(b||(i+=~c);!b&&~c--;)w(p);}

740 名前:736 mailto:sage [02/09/06 23:55]
>>739
6行ですか、素晴らしい

741 名前:デフォルトの名無しさん mailto:sage [02/09/07 02:52]
>>736 + 前スレ101版RLE の7行書庫
fcloseを入れたので多い日も安心

#include <stdio.h>
FILE*f,*o;char n[256];int i,c,b,p,q;r(){return b?getc(f):i<=0?-1:getc(o);}w(x){
putc(x,b?o:f);}main(a,v)char**v;{for(!(b=a-1)?a=getw(o=stdin):putw(a,o=stdout);
--a;b*q?w(p),w(q):0,fclose(f))for(f=fopen(b?v[++i]:gets(n),b?"rb":"wb"),b?fseek
(f,q=0,2),puts(v[i]),putw(ftell(f),o),rewind(f),0:(i=getw(o)),p=-1;~(c=r());p=b
?q=p-c||q>254?q?w(p),w(q):0,w(c),0:q+1,c:c-p?c:r())for(b||(q=c-p?~p?0:-1:r(),i
+=~q);!b&&~q--;)w(p);}

742 名前:729 mailto:sage [02/09/07 06:24]
tarみたいな感じでアーカイブができれば良いかなと思って書いたんですが、
圧縮までして7行ですか!恐れ入りましたすばらしいです。

743 名前:デフォルトの名無しさん mailto:sage [02/09/07 12:59]
画像ファイルとか音楽ファイルだと逆にでかくなるだけだが



744 名前:デフォルトの名無しさん mailto:sage [02/09/07 15:14]
>>743 使えるのはBMPファイルとか、AAとかだね。
圧縮+書庫化するだけ、ならばrangecoderでもできるだろうけどね。

745 名前:デフォルトの名無しさん mailto:sage [02/09/07 15:16]
!b&&~q-- って b||~q-- にできるんちゃう?いまさらやけど。

746 名前:デフォルトの名無しさん mailto:sage [02/09/07 18:56]
ちょっとした暇つぶしに、ゲームなぞ。
何かキーを押すとスタート、ストップ、リスタート。
動く丸を四角の中で止めてください。赤くなれば成功!

import java.awt.*;class S{public static void main(String[]a){new Frame(){int u=
2,p,t,s,c;void L(){u=p=0;t=1;s=(int)(Math.random()*8+2);c=150/s+19;}{resize(350
,200);show();try{for(;;Thread.sleep(s)){p=p+t;if(p>300)u=2;if(u==1)if(--c<1){t=
0;u=2;}for(repaint();u>1;);}}catch(Exception e){}}public void paint(Graphics g)
{g.setColor(t<1&p>249&p<281?Color.RED:Color.BLACK);g.drawOval(p,75,50,50);g.
drawRect(250,60,80,80);}public boolean keyDown(Event e,int y){u=u<1?1:u;if(u>1)
L();return 1>0;}};}}

747 名前:デフォルトの名無しさん mailto:sage [02/09/07 21:03]
>745
b||~q--だとb!=0の時に無限ループする

748 名前:デフォルトの名無しさん mailto:sage [02/09/09 16:20]
ネタ募集上げ

749 名前:デフォルトの名無しさん [02/09/09 17:11]


750 名前:デフォルトの名無しさん mailto:sage [02/09/11 20:50]
適応型Huffman
但し毎回木を更新するので滅茶苦茶重い(w

圧縮
int*a[258],n[2060],o[257],*r,*p,*q,c,f,i,j,k;Q(int**a,int**b){return**b-**a;}W(
a,b){for(;b--;++i>7?putchar(f),i=f=0:0)f+=f+(a>>b)%2;}S(s){for(r=n,j=k;j++<258;
r+=4)*r?a[k++]=r:0;for(;--k;r+=4){qsort(a,k+1,4,Q);a[k-1][1]=a[k][1]=r-n;*r=*a[
k-1]+*a[k];r[2]=a[k-1]-n;r[3]=a[k]-n;a[k-1]=r;}for(r=n+s;r-*a;r=q)o[k++]=r-n!=2
[q=n+r[1]];for(;k;)W(o[--k],1);}main(){for(*n=n[4]=1;~c;S(*p?p-n:0),(*p)++||W(c
,8))p=n+(c=getchar())*4+8;W(0,7);}

展開
int*a[258],n[2060],o[257],*r,*p,*q,c,f,i,j,k;Q(int**a,int**b){return**b-**a;}R(
a){for(c=0;a--;c+=c+(f>>--i)%2)f=!i?i=8,getchar():f;return c;}L(){for(r=n,j=k;j
++<258;r+=4)*r?a[k++]=r:0;for(;--k;r+=4){qsort(a,k+1,4,Q);a[k-1][1]=a[k][1]=r-n
;*r=*a[k-1]+*a[k];r[2]=a[k-1]-n;r[3]=a[k]-n;a[k-1]=r;}for(r=*a;r[2]|r[3];r=n+r[
2+R(1)]);r-n||(r=n+R(8)*4+8);(*r)++;~(c=(r-n)/4-2)&&putchar(c);}main(){for(*n=n
[4]=1;~c;)L();}

751 名前:デフォルトの名無しさん [02/09/12 18:42]
レスがついてなくて寂しそうだ。あげてあげよう。

752 名前:デフォルトの名無しさん mailto:sage [02/09/12 19:58]
>>750の圧縮・展開を纏めて7行化
何か引数があれば圧縮、なしで展開

int*a[258],n[2060],*r,*p,*q,c,f,i,k;Q(int**a,int**b){return**b-**a;}W(a,b){for(
;b--;++i>7?putchar(f),i=f=0:0)f+=f+(a>>b)%2;}R(a){for(c=0;a--;c+=(f>>--i)%2+c)f
=!i?i=8,getchar():f;}S(int*r){r-*a?S(n+r[1]),W(r-n!=n[r[1]+2],1):0;}L(){for(r=*
a;r[2]|r[3];r=n+r[2+c])R(1);}main(v){for(--v,*n=n[4]=1;~c;v?S(*(p=n+(c=getchar(
))*4+8)?p:n),(*p)++||W(c,8):(L(),r-n||(R(8),r=n+c*4+8),(*r)++,~(c=(r-n)/4-2)&&
putchar(c))){for(r=n;r-n<1032;r+=4)*r?a[k++]=r:0;for(;--k;p=a[k-1],q=a[k],p[1]=
q[1]=r-n,*r=*p+*q,r[2]=p-n,r[3]=q-n,a[k-1]=r,r+=4)qsort(a,k+1,4,Q);}v&&W(0,7);}

753 名前:デフォルトの名無しさん [02/09/12 20:23]
すげーなあ



754 名前:デフォルトの名無しさん mailto:sage [02/09/12 20:26]
このforなげえぇぇぇぇなあぁぁぁぁ。

755 名前:デフォルトの名無しさん [02/09/13 14:01]
うわーん。某あれで九州の某へ逝っていたら、ネタが来ただけじゃなく、終わってたよ。
すばらしい! あげちゃえ。






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

前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