934 :
デフォルトの名無しさん:03/04/28 00:03
そろそろ歴代ベスト3の7行プログラムを投票汁!
なかなか参考になったり役立つプログラムがあったりして諜報してます。
ありがとう。>ALL
s/諜報/重宝/
デシタ
>>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());
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++]);}
lispとかBASICとか、どうなったんだっけ?7行到達ならそれらが一番かな
あとはカラースネーク
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
>>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; }
...駄目でした...
誰だよ、先走って次スレ作った奴は(w
969 :
デフォルトの名無しさん:03/05/04 08:09
まだ生きてた
埋め立て代わりに。
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=
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++]);}
∧_∧
ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
なんとなく移植途中だった
>>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("");}
このスレまだ生きてる?
>>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<#qr#p$$dE##$##$#$L%)$#o%%)$#MF##$#B$#qJ%)$#o%%)$$<l##$%)$%*$%)$#o%%)"+
"$%+o%)$#o%%)$%wn%)$#V$#W$~~/*_____________Save_me_as_'S.java'____________*/";}
かつあげ。
>>982 次スレ立ってるんだから、あげるなよ・・・