七行プログラミング part3

このエントリーをはてなブックマークに追加
934デフォルトの名無しさん:03/04/28 00:03
そろそろ歴代ベスト3の7行プログラムを投票汁!
なかなか参考になったり役立つプログラムがあったりして諜報してます。
ありがとう。>ALL
s/諜報/重宝/
デシタ
>>934
オセロ・圧縮・手とリス
9381:03/04/28 23:16
>>915 を、ppm 形式で出力するようにしました。標準入出力です。
jpeg2ppm.c

char*z=" !(0)\"#*18@92+$%,3:AHPIB;4-&'.5<CJQXYRKD=6/7>ELSZ[TMF?GNU\\]VOW^_",G[1
<<24];int w,e,W,E,l,O,A,D[6],K[6],y=64,M[4096],P[3],qt[3][64],C[9],S[9],B,T,i,j
,c,R[128],J,f,d,F=4096;double bi[4096],t[64],p=1.41421356,q,I=.19634954;struct{
int c[256],s[256],v[256];}*N,h[2][3];extern double cos();g(){return getchar();}
L(){return g()<<8|g();}gi(b){for(;T<17;T+=8)(c=g()&255)-255?0:g(),B=B<<8|c;T-=b
;return(1<<b)-1&B>>T;}H(c,s){N=h[c]+s;for(c=s=i=0;s++<16;)for(c=c*2|gi(1);N->s[
i]==s;i++)if(N->c[i]==c)return N->v[i];return-1;}gv(s,v){return s?v=gi(s),v&1<<
s-1?v:v-(1<<s)+1:0;}n(m,v,n,k){for(v=F;v--;M[v]=128){i=v>>9;j=v/y%8;bi[v]=(q=i?
.25:.25/p,j?q:q/p)*cos((v/8%8*2+1)*i*I)*cos((v%8*2+1)*j*I);}for(;~g();){m=g()-
192;if(m-24){if(m==25)return;v=L();if(!m)for(l=g(w=L(e=L(g(i=0))));i<l;C[6+i++]
=g(E<c?E=c:0)){c=g(D[3+i]=g());W<c>>4?W=c>>4:0;C[3+i]=C[i]=c&=15;}else if(m==29
)A=L();else{for(v-=2;m==4&v>0;v-=n+18){c=g();N=h[c>>4]+c%16;for(n=i=0;i<16;)n+=
R[++i]=g();for(k=i=0;++i<17;)for(j=R[i];j--;)N->s[k++]=i;for(j=k=c=0,i=N->s[0];
k<n;){while(N->s[k]==i)N->c[k++]=c++;if(k<n)while(c*=2,N->s[k]!=++i);}for(;j<n;
)N->v[j++]=g();}if(m==26){for(O=g(i=0);i<O;i++)K[3+i]=K[i]=g(D[i]=g());g(L());
9392:03/04/28 23:16
return;}for(;v-->0;)for(j=g(i=0)&7;m==27&i<y;qt[j][i++]=g())v--;}}}}main(Q){n()
;for(Q=O;Q--;)for(i=l;i--;)if(D[Q]==D[3+i]){for(c=3;c--;)S[Q+3*c]=C[i+3*c];i=0;
}for(W*=8,E*=8;f<e/E+(e%E>0);f++)for(d=0;d<w/W+(w%W>0);A&&++J>=A?T-=T&7+8,P[0]=
P[1]=P[2]=J=0:0){int c,s=0,h,V,b[64];for(;s<O;s++)for(Q=S[s],V=S[3+s],l=0;l<V;l
++)for(h=0;h<Q;h++){int*pQ=qt[S[6+s]],r,i=1;c=H(0,K[3+s]/16);if(c>=0){memset(R,
0,256);P[s]+=gv(c);for(*R=*pQ*P[s];i<y&&(c=H(1,K[s]&15))>0;R[z[i]-32]=gv(c&15)*
pQ[i],i++)for(r=c/16&15;r--;)R[z[i++]-32]=0;}for(c=F;c--;c<y?t[c]=0:0)b[c%y]=t[
c%y]+=R[c/y]*bi[c];for(j=r=W/Q;j--;)for(i=c=E/V;i--;)M[F/4*s+(j+E*l/V)*W+i+W*h/
Q]=b[j*8/c*8+i*8/r];}Q=d++*W,V=f*E;for(j=e-V>W?W:e-V;j--;)for(i=w-Q>W?W:w-Q;i--
;)for(c=3;c--;G[((V+j)*w+Q+i)*3+c]=s<256?s<0?0:s:255)s=j*W+i,s=128+(M[s]*F+(c-1
?1:-1)*M[s+(c-2?F/2:F/4)]*(c?c-1?7257:2924:5742)>>12);}printf("P6 %d %d 255\n",
e,w);for(i=0;i<e*w*3;)putchar(G[i++]);}
>>934
1:オセロ
2:砂嵐
3:テトリス
lispとかBASICとか、どうなったんだっけ?7行到達ならそれらが一番かな
あとはカラースネーク
>>938-939
YCbCr変換に感動

>>934
1:オセロ
2:BASIC
3:ハフマン
1:オセロ
2:BASIC
3:マインスイーパー

オセロは完成度の他にも、俺を含む幾多の職人をこのスレに呼び寄せた点がでかい。
BASICは純粋に驚いた。
マインスイーパーは、最後の7行化が目から鱗だったからよく覚えている。
絶対無理だろうという雰囲気を見事打ち消してくれる作品が好きだ。
このJPEG変換が7行になったら1位をあげたい。が、今のところ、
1:レンジコーダー(part1の)
2:オセロ
3:SHA1
次点:テトリス
次スレ作るのやめないか……?
個人的に好きなやつ

1:オセロ              …… MSX-FANの1画面プログラムを思い出した
2:さいたまベンチ         …… ワラタ
3:BrainFuckインタープリタ   …… 職人さんありがとう

 や め な い か ?
948デフォルトの名無しさん:03/04/29 13:28
1、オセロ
2、BASIC

は硬いな。

3、はHuffmanか、RangeCoderか…、テトリスか…

悩む。
オセロは衝撃的だったので1番。
basicもかなりgoodで2番。
3番…huffmanは自分でも出来たから…RangeCoderかな

テトリスを入れる余地が無いのが残念だ。
7行スレらしく、歴代ベスト7を決めればいいんだよ。
そうすればテトリスの入る余地だってあるし。
じゃあBEST7行-!(7行達成してなくてもいいよな?
1:オセロ
2:BASIC
3:ハフマン
4:lisp
5:grep
6:テトリス
7:HTTPd
0:part2 581
>>951
7行達成していないのはダメでしょう
>>950
次スレよろ
>>945と同様、次スレいらないんじゃないかと思うのだが
理由もなく何をのうのうと・・・
七行にこだわることはないと思う。
目安だったけど。
七行にこだわらずして、何が「七行プログラミング」なのだと。
>>955
パート2のラスト、パート3の最初を見るとなぁ
最近のネタ切れも含めて、過去の栄光を…と思った
じゃあ、「七行スレを懐かしむ」スレをたてて
>>959
ワラタ、それいいな
なんなら立てようか?
じゃ、6行スレ立てますね
そのベスト3、もっかい晒せや。漏れがさらに短くしてやっから。
>>962
お題がなければ何もできない厨房ハケーソ
>>962
そのベスト3じゃなくて悪いんだが、これを7行にして く れ な い か ?

#include <stdio.h>
int main (void) { printf ("hell world!\n"); return 0; }
#include <stdio.h>
int main (void) { printf ("hell"
" "
"wo"
"rld"
"!\n");
return
0; }

...駄目でした...
>>965
P a r t 1 の >>3 を 見 れ 。
誰だよ、先走って次スレ作った奴は(w
969デフォルトの名無しさん:03/05/04 08:09
まだ生きてた
七行プログラミング part4
http://pc2.2ch.net/test/read.cgi/tech/1051703369/
埋め立て代わりに。
jpeg2pgm.c でつ。

char*z=" !(0)\"#*18@92+$%,3:AHPIB;4-&'.5<CJQXYRKD=6/7>ELSZ[TMF?GNU\\]VOW^_",G[1
<<24];int*$,w,e,W,E,l,O,A,D[6],K[6],y=64,M[4096],P[3],a[3][64],C[9],S[9],B,T,i,
j,c,R[128],J,f,d,F=4096,I=16;double k[4096],t[64],cos();struct{int c[256],s[256
],v[256];}*N,h[6];g(){return getchar();}L(){return g()<<8|g();}x(b){for(;T<17;T
+=8)(c=g()&255)-255?0:g(),B=B<<8|c;T-=b;return(1<<b)-1&B>>T;}H(c,s){N=h+c*3+s;
for(c=s=i=0;s++<I;)for(c=c*2|x(1);N->s[i]==s;i++)if(N->c[i]==c)return N->v[i];
return-1;}gv(s,v){return s?v=x(s),v&1<<s-1?v:v-(1<<s)+1:0;}n(m,v,n,k){for(;~g()
;){m=g()-192;if(m-24){if(m==25)return;v=L();if(!m)for(l=g(w=L(e=L(g(i=0))));i<l
;C[6+i++]=g(E<c?E=c:0))c=g(D[3+i]=g()),W<c/I?W=c/I:0,C[3+i]=C[i]=c%=I;else if(m
==29)A=L();else{for(v-=2;m==4&v>0;v-=n+18){c=g(k=n=i=0);for(N=h+c/I*3+c%I;i++<I
;)for(n+=j=g();j--;)N->s[k++]=i;for(i=N->s[j=k=c=0];k<n;){while(N->s[k]==i)N->c
[k++]=c++;if(k<n)while(c*=2,N->s[k]!=++i);}for(;j<n;)N->v[j++]=g();}if(m==26){
for(O=g(i=0);i<O;i++)K[3+i]=K[i]=g(D[i]=g());g(L());return;}for(;v-->0;)for(j=g
(i=0)&7;m==27&i<y;a[j][i++]=g())v--;}}}}main(Q,h,V,Z,s){for(c=F;c--;M[c]=128)i=
972続き:03/05/12 23:08
c>>9,j=c/y%8,k[c]=cos(c/8%8*i*.4)*cos(c%8*j*.4)/(i*j?4:i|j?6:8);n();printf("P5"
" %d %d 255\n",w,e);for(Q=O;Q--;)for(i=l;j=i--;)for(c=3;D[Q]==D[2+j]&&c--;i=c)S
[Q+3*c]=C[j-1+3*c];for(W*=8,E*=8;f*E<e;f++)for(d=0;d*W<w;A&&++J>=A?T-=T&7+8,P[0
]=P[1]=P[2]=J=0:0){for(s=0;s<O;s++)for(Q=S[s],V=S[3+s],l=0;l<V;l++)for(h=0;h<Q;
h++){$=a[S[6+s]];Z=H(j=0,K[3+s]/I);if(Z>=0)for(P[s]+=gv(Z),memset(R,0,256),*R=*$
*P[s];++j<y&&(Z=H(1,K[s]%I))>0;R[z[j]-32]=gv(Z%I)*$[j])for(c=Z/I%I;c--;)R[z[j++
]-32]=0;for(Z=64;Z--;t[Z]=0);for(Z=F;Z--;)t[Z%y]+=R[Z/y]*k[Z];for(j=c=W/Q;j--;)
for(i=Z=E/V;i--;)M[F/4*s+(j+E*l/V+h/Q)*W+i]=t[j*8/Z*8+i*8/c];}Q=d++*W,V=f*E;for
(j=e-V>E?E:e-V;j--;)for(i=w-Q>W?W:w-Q;i--;G[V*w+Q+j*w+i]=s<256?s*(s>0):~0)s=j*W
+i,s=128+M[s]+M[s+F/2]*5742/F;}for(i=0;i<e*w;)putchar(G[i++]);}
973part3 の作品一覧:03/05/25 00:23
7行達成したもの

画像ビューア >>327>>359 >>413 >>420 >>430
ライフゲーム >>293 >>306>>311-312 >>345
grep >>838 >>863
lisp風 >>365>>355 >>370-374 >>390
スロット >>380>>396
rangecoder >>391
算術符号 >>424
さいたまべんち・テキスト >>458>>460 AA >>477 >>481>>485 >>489-496 >>504 MAC >>507
974part3 の作品一覧:03/05/25 00:23
EUC/SJISと改行 >>513
○×ゲーム >>527 >>529
囲碁 >>530
Brainfuck >>542-543 >>553 >>905-907 C言語変換 >>557-560
コッホ曲線 >>549-551
2ch符号 >>566
あっけない幕切れ >>578 >>584 >>587
ド肝を抜く >>588 >>591
ポートスキャナ >>634
LZW? >>723
975part3 の作品一覧:03/05/25 00:24
reflexive符号 >>727
円周率 >>731 ん? >>738
ソース2HTML >>752-788 >>829-832>>814 >>825-830 >>833
自己表示 >>791>>805
ブラックジャック >>812>>816
逃げる >>817
5-7行クエスト >>866-868
976part3 の作品一覧:03/05/25 00:33
未達成もの

grep >>332
lisp >>393 >>425
MD5 >>445 >>451 >>459
二段階ソート法 >>561-563
SOCKS4 Proxy >>741-742
マインスイーパ >>800 >>808 >>810
アナグラム >>861
JPEG >>915-917 >>938-939 >>971-972
977山崎渉:03/05/28 13:09
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
なんとなく移植途中だった>>504のさいたまベンチを完成。今更なのでここで。

Mac版AAさいたまベンチ
int rand(),sprintf(char*,const char*,...),x,y,j,i=1<<12;main(){unsigned c=
TickCount();char V[6],*p,m[]=" \ │ /  / ̄\  ─( ゚∀゚ )─  \_/ "
" / │ \ ";HideMenuBar();SetPortWindowPort(NewCWindow(0,2100,0,1,2,0,0,0)
);TextMode(0);for(;j++-i;){for(x=0;x<6;V[x++]=rand()) ;for(x=rand()%*(short*)
2106-30,y=rand()%*(short*)2104-40,p=m,RGBBackColor(V);*p;p+=12)MoveTo(x,y+=15)
,DrawText(p,0,12);}i*=j=60;c=TickCount()-c;sprintf(m,"%d.%03d saitama/s",i/c,i
%c*j/c);MoveTo(8,20);DrawText(m,0,strlen(m));while(!Button()) ;return 0;}

CarbonだけどLowMemを使ってるのでOS Xじゃ動かないと思う。
プロトタイプが中途半端なのはご愛嬌。
既に現スレで7行逝ってるのでこちらにひっそりup

/* 多少だがwarning対策したmd5 */
double sin(double),d;unsigned B,C,z,y,X[17],j=64,g,E[68],m,n,o,p;L(int z){X[y/4
]=g=g>>8|z<<24;if(++y>63)for(m=*E+=m,n=E[1]+=n,o=E[2]+=o,p=E[3]+=p;y=(g=++j/16)
<4;o=g)m+=X["@AE@"[g]-~(g*5&6)*j&15]+(g?g&2?o^(g&1?n|~p:n^p):n&p|o&~p:n&o|~n&p)
+E[j+4],z="GLQVEINTDKPWFJOU"[g*4|j&3]&31,g=n,n+=m<<z|m>>(32-z),m=p,p=o;return j
=~0;}main(){for(;j;E[j/4]=g=g<<8|34*j^1+j/8*493)d=sin(j--)*(~C+1.),E[j+4]=d<0?-
d:d;for(;z=~getchar();B+=!(C+=8))L(~z);for(L(128);y-56;)L(0);for(X[14]=C,X[15]=
B,L(y=64),L(y=64);++j<16;)printf("%02x",E[j/4]>>j%4*8&255);return!~puts("");}

/* warningを気にせず縮めたmd5 */
double sin(),fabs();unsigned B,C,y,X[16],j=64,g,E[68],m,n,o,p;S(){for(m=*E+=m,n
=E[1]+=n,o=E[2]+=o,p=E[3]+=p;y=(g=++j/16)<4;o=g)m+=X["@AE@"[g]-~(g*5&6)*j&15]+(
g?g&2?o^(g&1?n|~p:n^p):n&p|o&~p:n&o|~n&p)+E[j+4],y="GLQVEINTDKPWFJOU"[g*4|j&3]&
31,g=n,n+=m<<y|m>>32-y,m=p,p=o;j=~0;}L(c){X[y/4]=g=g>>8|c<<24;++y>63&&S();}main
(c){for(;j--;E[j/4]=g=g<<8|34*j^1+j/8*493)E[j+4]=fabs(sin(j+1.)*(~C+1.));for(;c
=~getchar();B+=!(C+=8))L(~c);for(L(128);y-56;)L(0);for(X[14]=C,S(S(X[15]=B));++
j<16;)printf("%02x",E[j/4]>>j%4*8&255);puts("");}
このスレまだ生きてる?
981805:03/07/10 09:02
>>805 を自分でコピーしてみると、連続する空白が
つながってしまってエラーになってしまうことが判明。
もう一度書き直しました。文字数を変えないようにすれば、
最後の文字列中のコメント部分は何書いてもOK。

class S{public static void main(String[]a){new S();}S(){while(8463!=(c=92*h(i++
)+h(i++))){System.out.print(s.substring(c,c+h(i++)));}}int i=191,c;int h(int i)
{return s.charAt(i)-35;}String s="\\class S{public static void main(String[]a"+
"){new S();}{while(8463!=(c=92*h(i++\n)+h(i++))){System.out.print(s.substring"+
"(c,c+h(i++)));}}int i=191,c;int h(int i){return s.charAt(i)-35;}String s=\"#"+
"$W#S&#X<#qr#p$$dE##$##$#$L%)$#o%%)$#MF##$#B$#qJ%)$#o%%)$$<l##$%)$%*$%)$#o%%)"+
"$%+o%)$#o%%)$%wn%)$#V$#W$~~/*_____________Save_me_as_'S.java'____________*/";}

982805:03/07/10 10:01
かつあげ。
>>982
次スレ立ってるんだから、あげるなよ・・・