七行プログラミング part2at TECH
七行プログラミング part2 - 暇つぶし2ch607:デフォルトの名無しさん
02/07/31 02:46
>604
>601の部分はW=realloc(W,M+α);W[M++]=X;(但しα>0)となれば良い
従って演算順序はどちらでも構わない
むしろM[W=realloc(W,1+M++)]=X;は順序次第でバグるかと思われ

…もっとも実際に順序が規定されてるのかは知らん(w

608:昼あげ
02/07/31 10:58
神の集うすれを執拗にage

609:デフォルトの名無しさん
02/07/31 17:52
>>607
どちらにしろ未定義動作。何が起こるかわからない。

某UNIXと某コンパイラはこれやるとカーネルパニック起こすことで有名。

610:デフォルトの名無しさん
02/07/31 18:42
某knkタンが思い浮かぶな<未定義動作

611:デフォルトの名無しさん
02/07/31 18:59
未定義動作といえば、あれでしょう。
というわけで>>600を実行すると鼻から悪魔が出てくるかもしれません。

612:*nix厨
02/07/31 19:12
7行リハビリということでBASICを少し刈り込みました
#include <stdio.h>
#include <stdlib.h>
int b[2<<16],f,g,i,n;char l[103][80],c[80],*p,*q,*r,x;S(){for(;*p==32;++p);}T()
{for(r="GOTO \0PUT \0 ET \0 IF \0 RUN\0 QUIT"+6*n++,*r&&*r==*p;++r)++p;return
!*r&&(S()|1);}I(){g=atoi(p);return*p-48?g?g:b[*(short*)p]:g;}main(){for(;;){gets
(p=l[i=100]);while(i<101){n=0;S();if(*(q=p)==48||atoi(q))for(p=l[atoi(q)],q+=3;
*p++=*q++;)i=101;else p=!*q?l[++i]:T()?l[i=I()]:T()?printf("%d\n",I()),l[++i]:T
()?printf("?"),gets(c),b[*(short*)p]=atoi(c),l[++i]:T()?(I()?p+3:l[++i]):T()?l[
i=l[100][0]=0]:T()?exit(0),0:(61-q[2]?puts("ERR"):(p=q+3,f=I(),x=p[2]-43,p+=3,g
=I(),b[*(short*)q]=x?x-2?x+1?x-4?x-17?x-19?x+10?x-18?x+6?f:f%g:f==g:f!=g:f>g:f<
g:f/g:f*g:f-g:f+g),l[++i]);}puts("OK");}}

613:デフォルトの名無しさん
02/07/31 19:21
きました。主任の登場です(w

614:デフォルトの名無しさん
02/07/31 19:30
>>612
atoi() を関数ポインタで置き換えれば少しちぢむね。
printf() と puts() もまとめて置き換えられないだろうか?

しかし、stdlib.h を何とかしたほうがよっぽどちぢむかもしれん。

615:デフォルトの名無しさん
02/07/31 19:41
>>614
atoiは短くならないみたい
ちなみに4行目の6*n++の後は;の間違い
多分、空白を消す際に間違ったんだろう


616:デフォルトの名無しさん
02/07/31 20:34
>>600の展開
#include<stdio.h>/*decoder*/
int Z,M;char*W,F,K,*C;main(int X,char**v){FILE*r=fopen(v[1],"rb"),*w=fopen(v[2]
,"wb");for(;~(X=fgetc(r));K+=K){if(!K)F=X,X=fgetc(r),K=1;W=realloc(W,M+18);for(
Z=F&K?W[M++]=X,0:(C=W+M-fgetc(r)-X/16*256-1,3+X%16);Z--;W[M++]=*C++);}fwrite(W,
1,M,w);}

617:デフォルトの名無しさん
02/07/31 23:05
>>600>>616 をまとめただけです。
>exec {D|E} file1 file2

#include<stdio.h>
int Z,M,P;char*L,B[17],*W=B,*N,*R,*T,K;main(int X,char**v){FILE*r=fopen(v[2],
"rb"),*w=fopen(v[3],"wb");if(*v[1]-68){for(;~(X=fgetc(r));L[Z++]=X)L=realloc(L,
Z+1);for(N=L;N-L<Z;K+=K){if(!K)fwrite(B,K=1,W-B,w),W=B,*W++=0;for(X=0,(M=L-N+Z)
>18?M=18:0,(T=N-4096)<L?T=L:0;T<N;T++,P>X?X=P,R=T:0)for(P=0;P<M&&T[P]==N[P];P++
);X*=2<X;P=N-R;X?*W++=P>>8<<4|X-3:(*B|=K);*W++=X?N+=X,P:*N++;}T=B;M=W-B;}else{
for(;~(X=fgetc(r));K+=K){if(!K)P=X,X=fgetc(r),K=1;T=realloc(T,M+18);for(Z=P&K?T
[M++]=X,0:(R=T+M-fgetc(r)-X/16*256-1,3+X%16);Z--;T[M++]=*R++);}}fwrite(T,1,M,w);
}

618:デフォルトの名無しさん
02/08/01 02:06
クソスレの下に潜ってしまっているので上げ

619:デフォルトの名無しさん
02/08/01 04:35
>617、残り40文字弱

int Z,P,M,Q;char*L,*N,B[17],*W=B,F,K,*T;main(int X,char**v){FILE*r=fopen(v[2],
"rb"),*w=fopen(v[3],"wb");for(Q=*v[1]-68;~(X=fgetc(r));L[Z++]=X,K+=K){L=realloc
(L,Z+18);if(!Q){for(!K?F=X,X=fgetc(r),K=1:0,P=~F&K?T=L+Z-fgetc(r)-X/16*256-1,3+
X%16:1;--P;L[Z++]=*T++,X=*T);T=L;}}if(Q){for(N=L;N-L<Z;K+=K){if(!K)fwrite(B,K=1
,W-B,w),W=B,*W++=0;for(X=0,(M=L-N+Z)>18?M=18:0,(T=N-4096)<L?T=L:0;T<N;T++,P>X?Q
=N-T,X=P:0)for(P=-1;++P<M&&T[P]==N[P];);2<X?*W++=Q>>8<<4|X-3,N+=X:(*B|=K,Q=*N++
);*W++=Q;}L=B;Z=W-B;}fwrite(L,1,Z,w);}

620:619
02/08/01 04:38
すまん、最初の#include<stdio.h>コピペし忘れた

621:デフォルトの名無しさん
02/08/01 11:30
stdlib.hは atoiだけの為みたいだから
extern int atoi(const char *s); と直接書いてはルールに触れる?


622:デフォルトの名無しさん
02/08/01 13:24
>>621
いいと思うよ。やってるの見た気がする。

623:デフォルトの名無しさん
02/08/01 14:36
>>619
fgetc() は getc() と置き換えてよい。
符号器の for(N=L; ...) を N=L=realloc(L, ...) にすると1文字短くなる。

あまり手伝えないなぁ

624:623
02/08/01 14:40
>>619
そうか、N=L=realloc(L, ...) にすると、復号器側の T がいらなくなる。
T=L; を消せるし、if(!Q){...} のブレースもいらないな。

625:623
02/08/01 14:53
ごめん、他にもいろいろ削れたんで、うpしちゃう。

#include <stdio.h>
int Z,P,M,Q;char*L,*N,B[17],*W=B,F,K,*T;main(int X,char**v){FILE*r=fopen(v[2],
"rb"),*w=fopen(v[3],"wb");for(Q=*v[1]-68;N=L=realloc(L,Z+18),~(X=getc(r));L[Z++
]=X,K+=K)if(!Q)for(!K?F=X,X=getc(r),K=1:0,P=~F&K?N=L+Z-getc(r)-X/16*256-1,3+X%
16:1;--P;L[Z++]=*N++,X=*N);if(Q){for(;N-L<Z;X>2?*W++=Q>>8<<4|X-3,N+=X:(*B|=K,Q=
*N++),*W++=Q,K+=K)for(X=!K?fwrite(B,K=1,W-B,w),W=B,*W++=0:0,(M=L-N+Z)>18?M=18:0
,(T=N-4096)<L?T=L:0;T<N;T++,P>X?Q=N-T,X=P:0)for(P=-1;++P<M&&T[P]==N[P];);L=B;Z=
W-B;}fwrite(L,1,Z,w);}

626:*nix厨
02/08/01 18:07
もう少し短くしました
とりあえずここまでで、また縮むかもと思ったらBASICに手をつけます
これからオリジナルに挑戦、まずネタ探しから始めます

#include <stdio.h>
#include <stdlib.h>
int b[2<<16],f,g,i,n;char*p,l[103][80],c[80],*q,*r,x;S(){for(;*p==32;++p);}T(){
for(r="GET \0OTO \0PUT \0RUN\0 QUIT\0IF"+5*n++;*r&&*r==*p;++r)++p;return!*r&&(S
()|1);}I(){g=atoi(p);return*p-48?g?g:b[*(short*)p]:g;}main(){for(;;){gets(p=l[i
=100]);while(i<101){n=0;S();g=atoi(p);if(*(q=p)==48||g)for(p=l[g],q+=3;*p++=*q
++;)i=101;else p=!*q?l[++i]:T()?printf("?"),gets(c),b[*(short*)p]=atoi(c),l[++i
]:T()?l[i=I()]:T()?printf("%d\n",I()),l[++i]:T()?l[i=l[100][0]=0]:T()?exit(0),0
:T()?I()?p+3:l[++i]:(61-q[2]?puts("ERR"):(p=q+3,f=I(),x=p[2]-43,p+=3,g=I(),b[*(
short*)q]=x?x-2?x+1?x-4?x-17?x-19?x+10?x-18?x+6?f:f%g:f==g:f!=g:f>g:f<g:f/g:f*g
:f-g:f+g),l[++i]);}puts("OK");}}

627:デフォルトの名無しさん
02/08/02 02:13
とりあえずここまで縮んだ

#include<stdio.h>
int Z,P,Q;char*L,*N,B[17]="rb",*W=B,F,K,*T;main(int X,char**v){FILE*r=fopen(v[2
],B),*w=fopen(v[3],"wb");for(Q=*v[1]-68;N=L=realloc(L,18+Z),~(X=getc(r));L[Z++]
=X,K+=K)for(P=!Q?!K?F=X,X=getc(r),K=1:0,~F&K?T=L+Z-getc(r)-X/16*256-1,3+X%16:1:
1;--P;X=*T)L[Z++]=*T++;if(Q){for(;Z;Z-=(2<X?*W++=Q>>8<<4|X-3,N+=X,X:(*B|=K,Q=*N
++,1)),*W++=Q,K+=K)for(X=!K?fwrite(B,K=1,W-B,w),W=B,*W++=0:0,(T=N-4096)<L?T=L:0
;T<N;T++,P>X?Q=N-T,X=P:0)for(P=-1;++P<(Z>18?18:Z)&&T[P]==N[P];);L=B;Z=W-B;}
fwrite(L,1,Z,w);}

628:561
02/08/02 19:07
Javaでブロック崩しと詰めロードランナー(番兵がいない奴(^^;))にも挑戦してみたけど、
ブロック崩しの方は16行、詰めロードランナーの方は17行と敗北…(;_;)
う~む、題材が無謀過ぎたか。


629:デフォルトの名無しさん
02/08/02 19:57
7行達成したのでageときます

#include <stdio.h>
int Z,P,Q;char*L,*N,B[17],F,K,*T;main(int X,char**v){FILE*r=fopen(v[2],"rb"),*w
=fopen(v[3],"wb");for(X=*v[1]-69;N=L=realloc(L,18+Z),~(Q=getc(r));K+=K,L[Z++]=Q
)for(P=X?!K?F=Q,Q=getc(r),K=1:0,~F&K?T=L+Z-getc(r)-Q/16*256-1,3+Q%16:1:1;--P;Q=
*T)L[Z++]=*T++;if(!X){for(;Z-=X;2<X?B[P++]=Q>>8<<4|X-3:(*B|=K,Q=*N,X=1),N+=X,B[
P++]=Q,K+=K)for(X=!K?fwrite(B,K=1,P,w),P=1,*B=0:0,(T=N-4096)<L?T=L:0;T<N;T++,F>
X?Q=N-T,X=F:0)for(F=0;F<(Z>18?18:Z)&&T[F]==N[F];F++);L=B;Z=P;}fwrite(L,1,Z,w);}

630:デフォルトの名無しさん
02/08/02 21:16
前スレの雰囲気が出てきたね

631:デフォルトの名無しさん
02/08/02 21:20
始めまして。なんか最近面白いサイトが出来たみたいですよ。
掲示板とチャットルームがくっついたサイト?!ですかね。
キャラクター(笑)とかがタダで持てたり、着替えさしたり・・・・
でも今だけらしいですよ入会無料なのって!!
詳しくは下記URLをクリックして、確かめて!!

URLリンク(www.e-mansion.co.jp)

632:デフォルトの名無しさん
02/08/02 22:25
>>628=561
とりあえずうpしてみてください。
一人で縮めるより、みんなでああだこうだすると、
思いがけないテクニックが考案されたりして、どんどん縮まるよ。

633:561
02/08/02 22:57
>>632
了解っす!
まずはブロック崩しから…。(現在16行)

import java.awt.*;public class B{public static void main(String[]a){new Frame()
{int W=23,H=32,P=7,U=6,b=W/2+(H-4)*W,n,d=56,p=W/2+(H-3)*W,g,l,t,o,i,j,k;int[]m=
new int[W*H];{Canvas c=new Canvas(){{setSize(W*U,H*U);}public void update(
Graphics g){for(int i=0;i<W*H;i++){g.setColor(m[i]>0?Color.BLACK:Color.WHITE);g
.fillRect(i%W*U,i/W*U,U,U);}}public boolean handleEvent(Event e){if(e.id==503){
int n;if((n=e.x/U)<1)n=1;if(n>W-2)n=W-2;p=n+(H-3)*W;}if(e.id==501)g=l;return 1>
0;}};for(;i<H;i++){m[j=i*W]=m[W-1+j]=1;if(i%3==1&i>3&i<=H/2)for(k=6-i/3%2*2;k<W
-6;k+=4){m[k+j]=m[k+1+j]=2;l++;}}for(i=W;i>0;){m[--i]=1;m[i+H*W-W]=4;}add(c);
pack();show();try{for(;;Thread.sleep(50)){m[n=b]=0;if(g>0){n+=v((d+16)%64)+v(d)
*W;o=m[n];if(o>0){i=n%W;j=n/W*W;d=(m[b%W+j]>0)?(m[i+b/W*W]>0)?(d+32)&63:-d&63:d
&32|(32-d)&31;if(o==2){m[k=(i&~1)+j]=m[k+1]=0;if(--l<1)g=0;}if(o==3){if((d+=(b%
W-p%W)*2/3)<36)d=36;if(d>60)d=60;}if(o==4){b=p-W;d=56;g=0;}}else b=n;}else b=p-
W;i=(H-3)*W;for(k=0;k<W;k++)m[k+i]=0;m[i]=m[W-1+i]=1;for(k=(j=p)-P/2;k<=j+P/2;k
++)if(k>=(H-3)*W&k<(H-2)*W)m[k]=3;m[b]=1;t=(t+1)%8;c.repaint();}}catch(
Exception e){}}int v(int d){int n;if((n=d%32)>16)n=32-n;return n*(t+1)/8>n*t/8?
(d<32)?1:-1:0;}};}}

アルゴリズム自体試行錯誤中なので、まだ最適化をしてません。
((H-2)*W→690みたいな…)
そこら辺を直せば1~2行は縮まりそうですが、とても7行は無理っぽい…(;_;)

ボールの数は無制限です(^^;)
それから、終了はControl+Cで…。


634:561
02/08/02 23:11
おっと、言い忘れましたが633はB.javaです。
続いて、詰めロードランナー。(L.java : 現在17行)

import java.awt.*;import java.io.*;public class L extends Frame{int W,H,T,U=12,
p,t,v,g,e,l,r,u,d,a,b,i,j,k,x,y,m[],w[];char[]q={'□','田','田',' ', ' ̄','#',
' ','◎','★'};L(String n){try{BufferedReader f=new BufferedReader(new
FileReader(n));W=Integer.valueOf(f.readLine()).intValue();H=Integer.valueOf(f.
readLine()).intValue();m=new int[T=W*H];w=new int[T];for(;i<T;){if((j=i%W)<1)n=
f.readLine();if((m[i]=(int)n.charAt(j)-48)>7)m[p=i]=3;if(m[i++]>6)g++;}Canvas
c=new Canvas(){{setSize(W*U,H*U);}public void paint(Graphics g){for(k=T;--k>=0;
)g.drawChars(q,m[k],1,k%W*U,k/W*U+U);g.drawChars(q,8,1,p%W*U,p/W*U+U);}};add(c)
;pack();show();m:for(;g>0|p>W*2;Thread.sleep(20)){e=0;for(i=T;--i>=0;)if(w[i]>0
&&--w[i]<1){e=m[i]=1;if(i==p)break m;}if((i=m[p])>6){m[e=p]=3;if(--g<1)for(j=T;
--j>=0;)if(m[j]==6)m[j]=5;}if(t>0)t--;else{v=(i!=4&i!=5&(j=m[p+W])!=0&j!=1&j!=5
|d>0&j>1)?W:(u>0&i==5&m[p-W]>2)?-W:(l>0&m[p-1]>2)?-1:(r>0&m[p+1]>2)?1:0;if(v!=0
){p+=v;e=t=4;}else{if(a>0)v=p+W-1;if(b>0)v=p+W+1;if(v>0&m[v]==1)if((j=m[v-W])==
3|j==6){m[v]=3;e=w[v]=500;}}}if(e>0)c.repaint();}}catch(Exception e){}}public
boolean handleEvent(Event e){if((x=402-e.id)>=0&x<2){y=e.key;if(y==52)l=x;if(y
==54)r=x;if(y==56)u=x;if(y==50)d=x;if(y==90|y==122)a=x;if(y==88|y==120)b=x;}
return 1>0;}public static void main(String[]a){new L(a[0]);}}

番兵はおらず、ひたすら穴を掘って金塊を集めます(笑)
こちらは、ゲームの面データを外部から与える形式なので、単独では動きません。

java L map.txt

として、テキストファイルで面データを指定します。
(ずるいかな?(^^;))
現時点で思いつくかぎりの最適化をしましたが、これ以上は縮まらず…(;_;)


635:561
02/08/02 23:22
634の詰めロードランナー用面データはこんな感じ↓で作ります。

12
7
000000000000
033333333360
033334337360
075112115360
035177715360
035177715860
000000000000

1行目に幅、2行目に高さを指定します。
配置するブツの番号は

0 : ブロック(掘れない)
1 : レンガ(掘れる)
2 : 落とし穴(外見はレンガと同じ)
3 : 空白
4 : バー
5 : はしご
6 : 脱出はしご
7 : 金塊
8 : ロードランナー

です。
なお、画面端の判定を行っていないため、面データの周囲はブロックで囲ってください。
(アルゴリズム的な意味の『番兵』(笑))

オマケで、逆転掘りデータ(^^;)

7
10
0000000
0353330
0353330
0158310
0131510
0151310
0131510
0151710
0111110
0000000


636:デフォルトの名無しさん
02/08/03 00:08
>>631
勿論7行で作ったんだよね?
出来ればソース欲しいかも

637:デフォルトの名無しさん
02/08/03 00:21
>>636
perlとかなら7行掲示板作れそうだな。
荒らし対策とかは無理だろうけど。

638:デフォルトの名無しさん
02/08/03 00:28
webprogかどっかで見掛けたよ、掲示版。
見付けたら張ります。

639:デフォルトの名無しさん
02/08/03 00:37
>>637-638
>>2

640:デフォルトの名無しさん
02/08/03 01:02
>>633
定数HやWなんかは、定数でいいと思うよ

641:デフォルトの名無しさん
02/08/03 01:12
>>633 これは難しいねぇ。 >>20 を参考にして少し何とかできませんかね?

import java.awt.*;public class B{public static void main(String[]a){new Frame()
{int W=23,H=32,P=7,U=6,b=W/2+(H-4)*W,n,d=56,p=W/2+(H-3)*W,g,l,t,o,i,j,k;int[]m=
new int[W*H];{Canvas c=new Canvas(){{setSize(W*U,H*U);}public void update(
Graphics g){for(int i=0;i<W*H;g.fillRect(i%W*U,i++/W*U,U,U))g.setColor(m[i]>0?
Color.BLACK:Color.WHITE);}public boolean handleEvent(Event e){int n=e.x/U;n=n<1
?1:n>W-2?W-2:n;p=e.id==503?n+(H-3)*W:p;g=e.id==501?l:g;return 1>0;}};for(;i<H;i
++){m[j=i*W]=m[W-1+j]=1;if(i%3==1&i>3&i<=H/2)for(k=6-i/3%2*2;k<W-6;k+=4,l++)m[k
+j]=m[k+1+j]=2;}for(i=W;i>0;m[i+H*W-W]=4)m[--i]=1;add(c);pack();show();try{for(
;;Thread.sleep(50)){m[b]=0;o=m[n=b+v((d+16)%64)+v(d)*W];if(g>0)if(o>0){i=n%W;j=
n/W*W;d=m[b%W+j]>0?m[i+b/W*W]>0?(d+32)&63:-d&63:d&32|(32-d)&31;if(o==2){m[k=(i&
~1)+j]=m[k+1]=0;g=--l<1?0:g;}if(o==3){d+=(b%W-p%W)*2;d=d/3<36?36:d>60?60:d;}if(
o==4){b=p-W;d=56;g=0;}}else b=n;else b=p-W;m[i=(H-3)*W]=1;for(k=W-1;k>1;)m[--k+
i]=0;for(k=(j=p)-P/2;k<=j+P/2;k++)if(k>=(H-3)*W&k<(H-2)*W)m[k]=3;m[b]=1;t=(t+1)
%8;c.repaint();}}catch(Exception e){}}int v(int d){o=d%32;o=o>16?32-o:o;return
o*(t+1)/8>o*t/8?(d<32)?1:-1:0;}};}}

642:デフォルトの名無しさん
02/08/05 13:29
>>633とは別のブロック崩しを自分で作ってみました(現在9行)
JAVAアプレットです

C.java

import java.awt.*;public class C extends java.applet.Applet{int W=15,H=21,x=1,y
=W,i,m[]=new int[W*H],p=278,b=290;{for(;i<W*11;m[i++]=i<W?2:1);for(i=0;i<H;m[i*
W]=m[i++*W+14]=2);for(i=0;i<5;m[b+i++]=2);new Thread(){public void run(){try{
for(;;p+=x+y,repaint(),Thread.sleep(80))while(s(0,y)|s(x,0)|s(x,y));}catch(
Exception e){}}}.start();}boolean s(int t,int u){if((i=m[p+t+u])>0){x-=t*2;y-=u
*2;m[p+t+u]-=i>1?0:2;}return i>0;}public boolean keyDown(Event e,int k){if(k==
1007&m[b+5]<2){m[b]=0;m[b+++5]=2;}if(k==1006&m[b-1]<2){m[b+4]=0;m[b---1]=2;}
return 1>0;}public void paint(Graphics g){for(i=0;i<W*H;i++)g.drawString(m[i]>0
|i==p?"■":"□",i%W*10,i/W*10);}}

C.html

<HTML><BODY>
<APPLET code="C.class" width="150" height="200"></APPLET>
</BODY></HTML>

jdk1.4の場合、javac -target 1.1 C.java としてください
appletviewerおよびIE5で動作確認済(ちらつくのは仕様です)

643:561
02/08/05 18:55
>>641
参考になりました。三項演算子を効果的に使うんですね。
かなり短縮できました。(ブロック崩し - B.java : 現在13行)

import java.awt.*;public class B{public static void main(String[]a){new Frame()
{int W=26,H=33,T=W*H,P=7,U=6,b=1+W,d=56,p=1+T-W*3,g,l,t,i,j,k,u,m[]=new int[T];
{Canvas c=new Canvas(){{setSize(W*U,H*U);}public void update(Graphics g){for(u=
0;u<T;g.fillRect(u%W*U,u++/W*U,U,U))g.setColor(m[u]>0?Color.BLACK:Color.WHITE);
}public boolean handleEvent(Event e){k=e.x/U;k=k<1?1:k>W-2?W-2:k;p=e.id==503?k+
T-W*3:p;g=e.id==501?l:g;return 1>0;}};for(;i<T;i++)m[i]=(j=i/W)>=H-1?4:j<1|(k=i
%W)<1|k>W-2?1:j>3&j<H/2+2&j%3>1&k>3&k<W-4&((j/3^k/2)&1)>0?2+0*++l:0;l/=2;add(c)
;pack();show();try{for(;;Thread.sleep(50)){m[b]=0;i=g>0?b+v((d+16)%64)+v(d)*W:p
-W;j=g>0?m[i]:0;if(j>0){d=m[i%W+b/W*W]>0?m[b%W+i/W*W]>0?(d+32)&63:(32-d)&63:-d&
63;if(j==2){m[i]=m[i^1]=0;g=--l<1?0:g;}if(j==3)d=(d+=b%W-p%W)<36?36:d>60?60:d;
if(j==4){d=56;g=0;}i=b;}m[b=i]=1;i=p%W-P/2;for(j=0;j<W;j++)m[j+T-W*3]=j>=i&j<i+
P?3:j<1|j>W-2?1:0;t=(t+1)%8;c.repaint();}}catch(Exception e){}}int v(int d){j=d
%32;j=j>16?32-j:j;return j*(t+1)/8>j*t/8?d<32?1:-1:0;}};}}

ただ、「g=--l<1?0:g;」のような処理はアトミックじゃないので、別スレッドから変更さ
れた場合に、やや心配ではありますが。(取り越し苦労?(^^;))

>>642
やっぱり仕様そのものが問題だったかも(^^;)
ラケットの位置により反射角度が変化ってのはオーバースペックかな?
あと、ApplicationよりAppletの方が短くできそうですね。


644:デフォルトの名無しさん
02/08/05 21:38
ShiftJISのヒルベルト曲線
EUCは33962→43180で大丈夫ではないかと

#include <stdio.h>
#include <stdlib.h>
main(int k,char**v){int a[]={17699,43061,39682,43056,17779,17697,47768,39746,
45464,31384,42549,27458},m,s,x,y;for(y=m=1<<atoi(v[1]);y--;puts(""))for(x=m;x--
;s=33962+s%6,printf("%c%c",s>>8,s))for(s=0,k=m;k/=2;s=(a[s]>>((x&k?0:4)+(y&k?0:
8)))&15);}

実行例
┓┏━┓┏━┓┏
┗┛┏┛┗┓┗┛
┏┓┗┓┏┛┏┓
┃┗━┛┗━┛┃
┗┓┏━┓┏┛
┏┛┗┓┏┛┗┓
┃┏┓┃┃┏┓┃
┗┛┗┛┗┛┗┛

645:デフォルトの名無しさん
02/08/05 21:41
>>644
ヒルベルト走査は作ろうと思ってたんだが、先を越されてしまったな。
Java で作ろうと思ってたから、これより短くなることはなかっただろう。

いや、お見事。

646:デフォルトの名無しさん
02/08/05 21:59
どこが曲線なの?

647:デフォルトの名無しさん
02/08/05 22:15
>>646
お前…

648:デフォルトの名無しさん
02/08/05 22:17
>>646
今小学校何年生ですか?
曲線は、中学までに習うはず。それまでがまんがまん。

649:age
02/08/06 01:06
カラアゲうまうま

650:デフォルトの名無しさん
02/08/06 01:28
>>643
私ごときが口を挟むのは失礼とは存じますが、、

public class B { を、class B にして7文字。
Color.black,Color.white を、Color.red, Color.blue で3文字。
32 をint変数として、2文字。
Thread.sleep(50) を、Thread.sleep(H) として1文字(汗;

以上、重箱の隅をつついてみました。

651:561
02/08/07 00:08
>>650
>私ごときが口を挟むのは失礼とは存じますが、、

いやいや、そんなことはありませんです。参考になります。
特に、mainのクラスがpublicじゃなくてもいいというのは知りませんでした。
(SUNのサンプルにも非publicなクラスがありますから、安心して使えそうですね)
URLリンク(java.sun.com)
7文字減らせますから、七行スレのJava使いには朗報です。

# 赤青の方も試してみましたが…目にキツいですね(笑)

成果を採り入れて、詰めロードランナーが一行縮みました。(L.java : 現在16行)

import java.awt.*;import java.io.*;class L extends Frame{int W,H,T,U=12,p,t,g,e
,l,r,u,d,a,b,i,j,k,x,y,m[],w[];char[]q={'□','田','田',' ', ' ̄','#',' ','◎',
'★'};L(String n){try{BufferedReader f=new BufferedReader(new FileReader(n));W=
Integer.valueOf(f.readLine()).intValue();H=Integer.valueOf(f.readLine()).
intValue();m=new int[T=W*H];w=new int[T];for(;i<T;g+=m[i++]>6?1:0){n=(j=i%W)<1?
f.readLine():n;if((m[i]=(int)n.charAt(j)-48)>7)m[p=i]=3;}Canvas c=new Canvas(){
{resize(W*U,H*U);}public void paint(Graphics g){for(k=T;k-->0;)g.drawChars(q,m[
k],1,k%W*U,k/W*U+U);g.drawChars(q,8,1,p%W*U,p/W*U+U);}};add(c);pack();show();m:
for(;g>0|p>W*2;Thread.sleep(20)){e=0;for(i=T;i-->0;)if(w[i]>0&&--w[i]<1){e=m[i]
=1;if(i==p)break m;}if((i=m[p])>6){m[e=p]=3;if(--g<1)for(g=T;g-->0;)m[g]-=m[g]>
5?1:0;}if(t>0)t--;else{p+=i=i!=4&i!=5&(j=m[p+W])>1&j!=5|d>0&j>1?W:u>0&i==5&m[p-
W]>2?-W:l>0&m[p-1]>2?-1:r>0&m[p+1]>2?1:0;if(i!=0)e=t=4;if(i==0&(i=a>0?p+W-1:b>0
?p+W+1:0)>0&m[i]==1)if((j=m[i-W])==3|j==6){m[i]=3;e=w[i]=500;}}if(e>0)c.repaint
();}}catch(Exception e){}}public boolean handleEvent(Event e){y=(x=402-e.id)>=0
&x<2?e.key-48:0;l=y==4?x:l;r=y==6?x:r;u=y==8?x:u;d=y==2?x:d;a=y==42|y==74?x:a;b
=y==40|y==72?x:b;return 1>0;}public static void main(String[]a){new L(a[0]);}}

7行には達するべくもなさそうですが、結構気に入ってます。
(最近更新してない自分のサイトにでも置こうかな…(^^;))


652:デフォルトの名無しさん
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厨
02/08/09 21:02
小さな言語シリーズで行きます
現在、Lispにチャレンジ中です
20行切ったら公開します

654:デフォルトの名無しさん
02/08/09 22:27
Cでsub-Cを!

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

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

657:age
02/08/13 02:20
ほしゅ

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


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

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

661:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
02/08/23 15:09
期待age




                              夏だから期待sage。

665:デフォルトの名無しさん
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
02/08/24 10:32
IyBNSU5PUlMgVU5ERVIgQUdFIDE4IEFSRSBQUk9ISUJJVEVEIFRPIEVYRUNVVEUgVEhJUyBT
Q1JJUFQuIDE4GyRCOlBMJEt+O0hNUTZYO18bKEIuCnN1YiBnZXR7bG9jYWwkXz1zaGlmdDtg
dzNtIC1kdW1wX3NvdXJjZSAkX2BvcmBseW54IC1zb3VyY2UgJF9gb3JgR0VUICRfYG9yIGRp
ZX0KJGI9Imh0dHA6Ly93d3cua2suaWlqNHUub3IuanAvfnJ1YnkvZW1vbi8iOyRyPXEnaHR0
cDovL1stXy5+YS16QS1aMC05JS9dK1wucm0nOwptYXB7bWFwe3N5c3RlbSJ3Z2V0IC14ICRf
In1nZXQoJGIuJF8pPX4vJHIvZ31xdyh0aW1lLmh0bSBtYWluLmh0bWwgbWFpbjIuaHRtbCkK

667:デフォルトの名無しさん
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:デフォルトの名無しさん
02/08/25 00:05
>>653
20行 Lisp 期待してます。


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

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

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

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

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

673:665
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:デフォルトの名無しさん
02/08/25 21:35
printfで終わりだったり名(w

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

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

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

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

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

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

683:667
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:デフォルトの名無しさん
02/08/26 20:42
>>684
>>5

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

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

689:688
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
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:デフォルトの名無しさん
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:デフォルトの名無しさん
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
02/08/29 21:02
言い忘れましたが、x=120 は穴埋めです。

695:561
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:デフォルトの名無しさん
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:デフォルトの名無しさん
02/08/30 11:18
>>696
だからね。概出ものを持ってくるときはね、何か一工夫してほしいのね。
2行で書くとかね、良いアイデア・工夫があるとかね、面白くなってるとかね。
スレリンク(tech板:101番)

698:デフォルトの名無しさん
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:デフォルトの名無しさん
02/08/30 13:39
>>697
2行でおながいします。

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

701:デフォルトの名無しさん
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
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
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:デフォルトの名無しさん
02/08/31 23:05
コンパイル後のコードサイズが縮まらなきゃ意味ないんじゃないの。
何でこんなに夢中になる人がいるのか理解不能。

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

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

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

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

711:デフォルトの名無しさん
02/09/01 04:00
とりあえず、Javaが盛んそうなので、前スレのレイトレ13行を縮めてみた
スレリンク(tech板: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:デフォルトの名無しさん
02/09/01 16:11
このスレすげえ。
ところで、ここにはってあるソースを
public class hoge {
.....
}
みたいな風に簡単に戻す方法ないですか。
やっぱ手動ですか?

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

715:713
02/09/01 16:37
>>714
ありがとー

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

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

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

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

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

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

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

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

724:665
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
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:デフォルトの名無しさん
02/09/03 11:01
RLE

727:702
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:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
02/09/05 22:42
>>729
7行スレでそんな丁寧なプログラムを書かなくても・・・
つーわけで、今縮め中です。

732:731
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:デフォルトの名無しさん
02/09/05 23:29
>>732
規定されてない。
そもそも、EOF=-1も規定されてないからどっちにしろ処理系依存

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

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

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

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

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

739:デフォルトの名無しさん
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
02/09/06 23:55
>>739
6行ですか、素晴らしい

741:デフォルトの名無しさん
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
02/09/07 06:24
tarみたいな感じでアーカイブができれば良いかなと思って書いたんですが、
圧縮までして7行ですか!恐れ入りましたすばらしいです。

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

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

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

746:デフォルトの名無しさん
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:デフォルトの名無しさん
02/09/07 21:03
>745
b||~q--だとb!=0の時に無限ループする

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

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


750:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
02/09/12 20:26
このforなげえぇぇぇぇなあぁぁぁぁ。

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

756:デフォルトの名無しさん
02/09/14 14:39
ファイラってできるかな?

757:デフォルトの名無しさん
02/09/14 14:41
俺主催囲碁プログラミングコンテスト スレより、13行囲碁
スレリンク(tech板:136-番)
おいお前ら、これを7行に縮めてください。

#include <stdio.h>
int w[4]={1,-1,12,-12},s,d,h[3],b[132];r(int a, int c){int z,i;b[a]|=8;s++;for
(i=0;i<4;i++){z=a+w[i];if(b[z]==0)d++;if(b[z]==c)r(z,c);}b[a]&=3;}v(int a,int
c){int z,i;b[a]=0;for(i=0;i<4;i++){z=a+w[i];if(b[z]==c)v(z,c);}}int t(int u){
int m,e,g,z,i,k;m=e=0;for(z=0;z<132;z++){k=g=0;if(b[z])continue;for(i=0;i<4;i++
){if(b[z+w[i]]==u){d=s=0;r(z+w[i],1);k+=(d==1)*s*300+(d==2)*s*300+(d==3)*s*20;
}if(b[z+w[i]]==0)k+=10;else g++;}if(g==4)continue;if(k>m){m=k;e=z;}}return e;}
char *p="・○● \n";int main(){int c=1,u=2,z,x,y,i;for(i=0;i<132;i++){if((i+1
)%12==0)b[i]=4;else if(i%12==0||i<12||(i+2)%12==0||i>120)b[i]=3;}for(;;){for(i
=0;i<132;i++)printf("%.2s",&p[b[i]*2]);if(c==1){scanf("%d %d",&x,&y);z=y*12+x;
if(b[z]){printf("Err\n");continue;}}else{if((z=t(u))==0){printf("ps\n");break;
}}b[z]=c;for(i=0;i<4;i++){if(b[z+w[i]]==u){d=s=0;r(z+w[i],u);if(d==0){h[c]+=s;
v(z+w[i],u);}}}d=0;r(z,c);if(d==0)break;u=c;c=3-c;}return 0;}

758:デフォルトの名無しさん
02/09/14 14:46
>>756>>757
ネタ来たーーーーーーあげ
でも囲碁はちょっと見ただけでも無駄が多い、10行くらいにはすぐなりそう

759:オマケ月
02/09/14 16:08
#include <stdio.h>
main(){printf("ファイア\nファイラ\nファイが!");}

760:デフォルトの名無しさん
02/09/14 16:09
>>759
やってくれたね...

761:758
02/09/14 19:08
>>757
ちょっとだけ縮めてみた。十分7行になりそうだ。

int w[4]={1,-1,12,-12},s,d,h[3],b[132],c=1,u=2,x,y,i;r(a,c,f){int z,i;f?b[a]=0:
(b[a]|=8,s++);for(i=4;i--;b[z]==c&&r(z,c,f))d+=!b[z=a+w[i]];!f?b[a]&=3:0;}t(u){
int m,e,g,z,i,k;for(m=e=z=0;z<132;z++)if(k=g=0,!b[z]){for(i=4;i--;b[y]?g++:(k+=
10))if(b[y=z+w[i]]==u)d=s=0,r(y,1,0),k+=(d==1)*s*300+(d==2)*s*300+(d==3)*s*20;
if(g!=4)k>m?m=k,e=z:0;}return e;}char*p="・○● \n";main(z){for(i=132;i--;i%12
==11?b[i]=4:0)if(i%12==0||i<12||(i+2)%12==0||i>120)b[i]=3;for(;;){if(c==1){for(
i=10;i<119;)printf("%.2s",&p[b[i++]*2]);scanf("%d %d",&x,&y);if(b[z=y*12+x]){
puts("Err");continue;}}else if(!(z=t(u))){puts("ps");break;}b[z]=c;for(i=4;i--;
d=0)if(b[x=z+w[i]]==u)if(d=s=0,r(x,u,0),!d)h[c]+=s,r(x,u,1);r(z,c,0);if(!d)
break;u=c;c=3-c;}}

762:758
02/09/14 23:48
>>761
現在9行。ゲーム性の向上を目指し、
終了時にアゲハマを表示し、余分な改行を消しました。

int w[]={1,-1,12,-12},s,d=1,h[3],b[132],c=1,u=2,y,i=132,m,g,e,k;r(a,c,f,z,i){b[
a]=!f?s++,b[a]|8:0;for(i=4;i--;b[z]==c&&r(z,c,f))d+=!b[z=a+w[i]];!f?b[a]&=3:0;}
main(z){for(;i--;i%12==11?b[i]=4:0)i%12==0||i<12||i%12==10||i>120?b[i]=3:0;for(
;d;){if(c==1){for(i=10;i<120;)printf("%.2s",&("・○● \n"[b[i++]*2]));if(scanf
("%d %d",&k,&y),b[z=y*12+k]&&puts("Err"))continue;}else{for(m=e=z=0;e<132;e++)
if(k=g=0,!b[e]){for(i=4;i--;b[y]?g++:(k+=10))b[y=e+w[i]]==u?r(y,1,d=s=0),k+=(((
d==1)+(d==2))*15+(d==3))*s*20:0;g!=4&&k>m?m=k,z=e:0;}if(!z&&puts("ps"))break;}b
[z]=c;for(i=4;i--;)b[k=z+w[i]]==u?r(k,u,d=s=0),!d?h[c]+=s,r(k,u,1):0:0;r(z,u=c,
d=0);c=3-c;}printf("%d,%d\n",h[1],h[2]);}

763:デフォルトの名無しさん
02/09/15 00:34
4行目のスペースが纏められちゃったので修正
;d;){if(c==1){for(i=10;i<120;)printf("%.2s",&("・○●  \n"[b[i++]*2]));if(scanf

764:デフォルトの名無しさん
02/09/15 01:34
>763
cはu^3で代用、それに伴いc==1→u-1等に変更
((d==1)+(d==2))→(d-1U<2)
i<12||略||i>120→i-12U>108||略
for(i=10;i<120;略&("・○● \n"[b[i++]*2)→for(i=9;i++<119;略"・○● \n"+b[i]*2

765:囲碁スレ136
02/09/15 07:04
>>762
やるねぇ・・・。そうやって圧縮するのか。
再帰関数も1つになってるし。
しかしここからはつらそう。

766:デフォルトの名無しさん
02/09/15 14:37
>>759
printfって最後、\nしないと問題が出る環境なかった?
うろおぼえだけど

767:デフォルトの名無しさん
02/09/15 14:39
>>762 最初の盤作成部分
for(;i--;b[i]=z-11?z&&z-10&&i-12U<109?0:3:4)z=i%12;

768:デフォルトの名無しさん
02/09/15 18:48
囲碁8行(あと62-63文字)

int w[]={1,-1,12,-12},s,d=1,h[3],b[132],u=2,y,i=132,m,g,e,k;r(a,c,f,z,i){b[a]=!
f?s++,b[a]|8:0;for(i=4;i--;b[z]-c||r(z,c,f))d+=!b[z=a+w[i]];!f?b[a]&=3:0;}main(
z){for(;i--;b[i]=z-11?z&&z-10&&i-12U<109?0:3:4)z=i%12;for(;d;){for(i=9;i++<119;
)printf("%.2s",&("・○●  \n"[b[i]*2]));for(m=z=0;i--;g!=4&&k>m?m=k,z=i:0)for(k
=g=0,e=4*!b[i];e--;!b[y]?k+=10:g++)b[y=i+w[e]]==u?r(y,1,d=s=0),k+=((d-1U<2)*15+
(d==3))*s*20:0;if(u>1&&(scanf("%d %d",&k,&y),b[z=y*12+k]&&puts("Err")));else{if
(!z&&puts("ps"))break;for(i=4;i--;b[z]=u^3)b[k=z+w[i]]==u?r(k,u,d=s=0),!d?h[u]
+=s,r(k,u,1):0:0;r(z,u^=3,d=0);}}printf("%d,%d\n",h[2],h[1]);}

769:デフォルトの名無しさん
02/09/15 19:12
printf("%.2s",&("・○● \n"[b[i]*2]));

printf("・\0○\0●\0 \0\n"+b[i]*3);
3文字か…


770:デフォルトの名無しさん
02/09/15 19:25
関数r内
b[a]=f?0:~b[a];s++;
for(i=4;i--;b[z]-c||r(z,c,f))d+=!b[z=a+w[i]];
b[a]^=!f*~0;
3文字?

771:758
02/09/15 21:20
後34文字になりますた。

int w[]={1,-1,12,-12},s,d=1,h[3],b[132],u=2,y,i,m,g,e,k;r(a,c,f,z,i){b[a]=f?0:~
b[a];s++;for(i=4;i--;b[z]-c||r(z,c,f))d+=!b[z=a+w[i]];b[a]^=!f*~0;}main(z){for(
;d;){for(;i++<132;printf("・\0○\0●\0 \0\n"+(b[i]=z-11?z&&z-10&&i-12U<109?b[i
]:3:4)*3))z=i%12;for(m=z=0;i--;g!=4&&k>m?m=k,z=i:0)for(k=g=0,e=4*!b[i];e--;!b[y
]?k+=10:g++)b[y=i+w[e]]==u?r(y,1,d=s=0),k+=((d-1U<2)*15+(d==3))*s*20:0;if(u<2||
!(scanf("%d%d",&k,&y),b[z=y*12+k]&&puts("Err"))){if(!z&&puts("ps"))break;for(i=
4;i--;b[z]=u^3)b[k=z+w[i]]==u?r(k,u,d=s=0),!d?h[u]+=s,r(k,u,1):0:0;r(z,u^=3,d=0
);}}printf("%d,%d\n",h[2],h[1]);}

772:囲碁スレ136
02/09/15 21:47
お前ら・・・すごいです(w
もはや暗号だな。

773:デフォルトの名無しさん
02/09/16 00:14
円周率を求める7行ってないの?もちろんエンドレスで。

774:デフォルトの名無しさん
02/09/16 01:59
>>773が作ってみるということでどうだっ!

775:デフォルトの名無しさん
02/09/16 10:29
エンドレスって正しい値を永遠にはきだし続けるって事か?
多倍長クラスとページングマネージャも書けと。
無理臭い

776:デフォルトの名無しさん
02/09/16 20:15
>>775
メモリさえあれば、数百万桁計算する程度なら7行でもできそうだ。
挑戦してみようかなぁ。

777:デフォルトの名無しさん
02/09/16 20:52
標準出力に10進数を一桁ずつ吐くだけだから
多倍長クラスはいらないのでは。
しかしアルゴリズムが分からない罠。
URLリンク(www.pluto.ai.kyutech.ac.jp)
たくさんあってどれが7行向きなのやら。

778:デフォルトの名無しさん
02/09/16 22:37
>>777
1桁ずつ計算する物じゃないぞ

779:デフォルトの名無しさん
02/09/16 22:57
>>778
一桁ずつできるけどね。やるかどうかは別として。

780:デフォルトの名無しさん
02/09/17 01:26
以下のコードをバイナリエディタで書いて prg.com で保存後 実行

B0 13 CD 10 C4 2F AA 11 F8 64 13 06 6C 04 EB F6

781:デフォルトの名無しさん
02/09/17 04:39
>>780
メガデモスレから持ってこないで下さい。(w
URLリンク(farb-rausch.de)

782:デフォルトの名無しさん
02/09/17 15:39
>>780
これ何?

783:デフォルトの名無しさん
02/09/17 19:41
>780の実効ファイル版ISHにしてみた。

<<< A.COM for MS-DOS ( use shift_jis ish ) [ 8 lines ] >>>
!!!&!!9Q!5"XRo"O"I->!C$oR6nt!&"HDm=NH,!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!JF;v
!!!&!!9Q!5"XRo"O"I->!C$oR6nt!&"HDm=NH,!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!JF;v
!!!&!!9Q!5"XRo"O"I->!C$oR6nt!&"HDm=NH,!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!JF;v
%x/。」;掲僕ウFリ策ル」\EB機@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@q繆
。ツ0拆M3鐇Aェ物ォミ^2ンロCm@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@UR「
」\VG・ュッ、{ャナ^・ヨH*j8Le+フ「ワVe、錦ラ;サヌ,Kヤ省竿58h3Q筰ミ隹峻Sスヨアヘニ゙妹4\覬レメノレウh岻屁搶ワ
--- A.COM (8/8) ---


784:デフォルトの名無しさん
02/09/17 20:25
>>780
だれかこの動作をマジレスしてください。

メガデモスレと言われても、あまりこの板にはこないから。

785:デフォルトの名無しさん
02/09/17 20:30
>>784
自分でやればわかるよ

786:デフォルトの名無しさん
02/09/17 20:31
>>785
いや、なんか怖い…。

format cよりも怖いです。

787:デフォルトの名無しさん
02/09/17 20:40
>>786
URLリンク(www.google.co.jp)
目がちかちかする。

788:デフォルトの名無しさん
02/09/17 21:32
>>787
噂の「ポケモンフラッシュ」みたいなやつですか?
グロよりも苦手なんでよかった。

789:デフォルトの名無しさん
02/09/17 21:35
>>788
見てみりゃわかる。無害。

790:デフォルトの名無しさん
02/09/17 21:50
<age>


791:bloom
02/09/17 21:59

URLリンク(www.leverage.jp)

792:デフォルトの名無しさん
02/09/17 22:21
>>789
ちょっと面白かった。
でもわずかにチカチカするのでちょっとだめかもw

フルスクリーンのせいでアプリをひとつ間違って閉じたのに気づかなかったぞゴルァ

793:デフォルトの名無しさん
02/09/17 22:32
つーか、Cなり何なりで、上のバイナリコードを吐き出すようにすれば、
もっと簡単に試したのではなかろうか。
main(){char data[]={...};fwrite(data,1,sizeof(data),stdout);}
みたく。

794:デフォルトの名無しさん
02/09/17 23:42
>>789
Win2k飛ばされますた
>>793
16バイトで出来てることに意味があるのでせう
逆アセンブルリスト見て嘆息

795:デフォルトの名無しさん
02/09/18 16:11
コードをアセンブラで書いて、インストラクションコードを
>>793みたいに文字列として埋め込むのはありでしょうか?
typedef int(*f)();
((f)"....")(); //呼び出し

796:デフォルトの名無しさん
02/09/18 19:40
>>795
良いと思うけど、普通は逆にオブジェクトコードが増えると思うよ

797:デフォルトの名無しさん
02/09/18 19:40
オブジェクトコード埋め込みの方が…ですね、スマソ

798:トリッキーの1
02/09/18 21:29
ご無沙汰してました。相変わらず皆さん凄いですね。勉強になります。
近いところでは囲碁面白いですね。でも囲碁のルールが解らないので残念です。
>>771
半角スペース2個は全角1個にしないと、貼り付けるときに消えてしまいますよ
それと、「3,3:4,4:2,4:2,5:2,6:2,8」と入力すると相手の石の上に自分の石が来るけれど、
これは囲碁のルールで正しいんですか?

799:デフォルトの名無しさん
02/09/18 22:39
LZW系の展開・圧縮
使い方は>>752と同じ

同じ辞書を使い続ける6行版
int*Q,N[16384],S,T,U,V,F,G,P,C,X,Z;p(a,b){for(;b--;++S>7?putchar(T),S=T=0:0)T=T
+T|a>>b&1;}g(a){for(G=0;a--;G=G+G|V>>--U&1)!U?U=8,V=getchar():0;}a(){F<1<<12?1[
Q=N+F*4]=X,Q[2]=C,Q[3]=N[C*4],*Q=0,N[C*4]=F++:0;}r(x){p((x>256?r(N[x*4+2]),N[x*
4+1]:(X=x))-1,8);}main(c){for(G=F=257;G--;)1[Q=N+G*4]=G;for(--c?g(8),C=V+1:0;g(
c?8:12),c?C:~V;C=c?!Z?p(C,12),a(),X:Z:(G=X,r(Z<F?Z:C),Z<F||p(G-1,8),P++&&a(),Z)
)for(Z=c?X=V+1,N[C*4]:G;c*Z&&1[Q=N+Z*4]-X;Z=Q[3]);p(0,7);}

辞書が一杯になると再構築する7行版
int*Q,N[16384],S,T,U,V,F,G,P,C,X,Z;i(){for(G=F=257;G--;*Q=Q[2]=Q[3]=0)1[Q=N+G*4
]=G;}p(a,b){for(;b--;++S>7?putchar(T),S=T=0:0)T=T+T|a>>b&1;}g(a){for(G=0;a--;G=
G+G|V>>--U&1)!U?U=8,V=getchar():0;}a(){F<1<<12?1[Q=N+F*4]=X,Q[2]=C,Q[3]=N[C*4],
*Q=0,N[C*4]=F++:i();}r(x){p((x>256?r(N[x*4+2]),N[x*4+1]:(X=x))-1,8);}main(c){i(
);for(--c?g(8),C=V+1:0;g(c?8:12),c?C:~V;C=c?!Z?p(C,12),a(),X:Z:(G=X,r(Z<F?Z:C),
Z<F||p(G-1,8),P++&&a(),Z))for(Z=c?X=V+1,N[C*4]:G;c*Z&&1[Q=N+Z*4]-X;Z=Q[3]);p(0,
7);}

800:デフォルトの名無しさん
02/09/18 22:54
>>773
ほらよ。多少の誤差には眼をつぶれや。

#include <stdio.h> // printf()
#include <stdlib.h> // rand()
int main(){
printf( "3.1415926535897932384626433832795" ) ;
for (;;) printf( "%d",rand() ) ;
return 0 ;
}


801:デフォルトの名無しさん
02/09/18 22:55
後はランダムかよ

802:デフォルトの名無しさん
02/09/18 23:08
お題:素数列挙

803:デフォルトの名無しさん
02/09/18 23:09
p2pの七行があったらすごいよね。なんて言って見るテスト

804:>>802
02/09/18 23:15
printf(char*,...);main(){int z,i=1;for(;z=i++;z?0:printf("%d,",i))while(i%z--);}

1文字オーバーなのは秘密だ。

805:デフォルトの名無しさん
02/09/18 23:24
>>802
外出だったりする

806:デフォルトの名無しさん
02/09/18 23:32
>>805
>>74 >>81やね

807:デフォルトの名無しさん
02/09/18 23:37
>>804
1文字縮めてみますた
printf(char*,...);main(){int z,i=1;for(;z=i++;z||printf("%d,",i))while(i%z--);}

808:804
02/09/18 23:53
おぉ、さんきゅー!
そうか、|| か。なんかPerlっぽい。

809:デフォルトの名無しさん
02/09/19 01:06
>>807
gcc -ansi -pedantic だとprintf(char*,...)は通らず。
ANSI C forbids data definition with no type or storage class
printf()を削除すれば通るので、そっちの方がよい?

1文字縮めてみた。
printf(char*,...);main(z){int i=1;for(;z=i++;z||printf("%d,",i))while(i%z--);}

810:デフォルトの名無しさん
02/09/19 01:14
これではだめですかね。引き数なしで実行が条件ですが。
main(i,z){for(;z=i++;z||printf("%d,",i))while(i%z--);}

811:デフォルトの名無しさん
02/09/19 01:22
>>810
bcc32でも動きますね。しかもgccよりも速かった。

812:デフォルトの名無しさん
02/09/19 01:29
コンパイラを選ぶのはどうかと思う

813:デフォルトの名無しさん
02/09/19 02:00
>>810 Solaris cc, GNU gcc, Borland bcc32 でコンパイル・実行できますた。
>>807 上記すべてのコンパイラでprintfの宣言がおかしいといわれますた。
>>812 短くするためならコンパイラどころかアーキテクチャすら選択するのが最近の風潮らしいです。

814:デフォルトの名無しさん
02/09/19 02:04
>>803
p2pの何だ?

815:デフォルトの名無しさん
02/09/19 03:47
囲碁、申し訳ないんだが、
コンパイルして実行したら、
1の列を指定すると落ちるんだけど。
(ex:1,5)
バグ?


816:デフォルトの名無しさん
02/09/19 04:06
>>798>>815
囲碁、cygwin+gccやSolaris+ccでは正常らしい動作してますね
bcc32だと動作は正常のようでも、表示がおかしくなりますね
ANSI準拠っぽいソースだけど、どっかしらコンパイラ依存があるんでしょうね
>>771さんはいないようだし、ここはひとつトリッキーの1氏のご助力を!

817:デフォルトの名無しさん
02/09/19 08:15
プロトタイプ宣言無しで printf 使うのって好かんのだけどどうよ。
…っと言っても>>810、VC++.NETでもdmc++でも通るな。

int printf(char*,...); ... にすれば>>809行けるね。

818:817
02/09/19 08:16
あーでも、宣言省略すれば int printf( ... ); 扱いになるんだっけ。Cって。
それならOKか。

819:デフォルトの名無しさん
02/09/19 17:45
>>810
>main(i,z)
Cって引数の型を省略するとintになるってこと?


820:デフォルトの名無しさん
02/09/19 20:40
円周率は

#include <stdio.h>
main(){printf("3.14159265358979323846264338327950288419716939937510582097494");
/* 以下略 */
}

よりも桁が多いことを願います。

とりあえず、職人さんに

(~~~゚∀~~)~~゚ メダマ ボーン


821:デフォルトの名無しさん
02/09/19 20:43
#include <stdio.h>
main()
{
char* url = "URLリンク(www.prokofiev.ru)";
system(url);
return 0;
}


822:デフォルトの名無しさん
02/09/19 23:29
>>814
不特定多数なWinMXみたいな奴でなくて、
相手を登録して交換するスタイル。Grooveとかがそんな感じかなぁ。
七行でできたらビックリだけどね。CUIでそういうの聞いたことないし。

823:デフォルトの名無しさん
02/09/20 00:48
それもP2Pかもしれないけど、
P2P=ファイル交換じゃないぞ

824:デフォルトの名無しさん
02/09/20 04:32
なんにせよ、もしできたら凄く便利だと思う

825:デフォルトの名無しさん
02/09/20 04:57
便利って・・・・・・別に7行でも覚えられるわけで無し・・・・・・
ぱっと思いつく最小のメディアであるFDに収まる1.44MBに入れば何だって同じ気が。
面白いけどね。

826:デフォルトの名無しさん
02/09/20 08:53
今更ながら>>800にワラタ

827:トリッキーの1
02/09/20 15:54
円周率です。意外と七行は簡単でした。オイラーの公式使ってますので収束遅いです。

#include <stdio.h>
#define s ( 5000 /*←希望する桁数*/ /4+2)
int main(){int i,n,c,t,j,l,a[]={4,9},r[s][4]={0,0,8,12},k=10000;for(n=0;n<s*15
;n++)for(i=0;i<2;i++){for(c=t=j=0;j<s;r[j++][i]+=((n&1)*-2+1)*l/(2*n+1))t=(l=k
*t+r[j][i+2])%a[i],c=(l=k*c+(r[j][i+2]=l/a[i]))%(2*n+1);for(t=0,j--;j+1;r[j--]
[i]%=k)t=(r[j][i]+=k+t)/k-1;}for(i=s-(t=1);i+1;*r[i--]%=k)t=(*r[i]=k+*r[i]+r[i
][1]+t)/k-1;printf("%d.",**r);for(i=1;i<s-1;printf("%04d",*r[i++]));return 0;}

828:トリッキーの1
02/09/20 15:56
こうやってみるとまだまだ短くなりそうですね。桁数固定にすれば後一行は軽そうです。

829:デフォルトの名無しさん
02/09/20 20:47
復活直後にでかいのを持ってきましたね。実質5行だし。相変わらず凄い。

7行にするのって、1字1字縮める技術ももちろんあるけれど、
組む前にデータ構造とアルゴリズムをなるべく文字数を減らすことを念頭に
構想する才能が必要だと思うが、それは知識と知恵の両方を要求するよね。
色々なネタで7行達成している常連の職人さんたちはかなりハイレベルだと思った。

830:デフォルトの名無しさん
02/09/20 20:54
有名人が出てくるたびにヨイショするこの雰囲気、
どうにかならんもんかねぇ。
名無しで新しいアイデア出てきても「たいしたことない」と言ってのけるのに。

831:デフォルトの名無しさん
02/09/20 20:55
本人がageてないのに他人がageるのも正直ウザい

832:デフォルトの名無しさん
02/09/20 21:04
ただのひがみかもしれないがマジレス。
有名人をよいしょしているわけではなく、
優れたプログラムを書く人をほめているのでは?

833:デフォルトの名無しさん
02/09/20 21:05
>>799
UNISYSに通報しますた

834:デフォルトの名無しさん
02/09/20 21:29
はいはい、そこ雰囲気悪くしない!
作品いっぱい出るのはいいことだし、批評はその作者の次に繋がるので良し!
でも830、無意味な煽りは入れない!
次のネタいきましょう、次。

835:デフォルトの名無しさん
02/09/20 22:24
次のネタ候補
・FORTH や C, LISP, BASICなどのプログラミング言語のサブセット
・囲碁
>>533の前スレの未達成もののうち、このスレでも未達成のもの

特に言語ものは20行以下になったらとりあえず見せて欲しいなぁ。
サブセット言語で作った7行プログラムとか出てきたりして:-P

836:デフォルトの名無しさん
02/09/21 00:50
7行でC/C++コンパイラ作ってくだちぃ。


837:デフォルトの名無しさん
02/09/21 01:03
>>836
四則演算と表示くらいならできるかもしれないが、難しいだろうね。
つーか、>>836よ、インタプリタで良いから作ってみないか?

838:デフォルトの名無しさん
02/09/21 01:23
>>837
>四則演算と表示くらいなら...
マジで!?それともネタ?
冗談で言ったつもりなんだが…

>インタプリタで良いから...
技術のない漏れには作れません...


839:デフォルトの名無しさん
02/09/21 02:32
VTL系のBASICはどうなのかな?
オリジナルは768バイトなんでしょ?

840:デフォルトの名無しさん
02/09/21 02:59
マンセーうぜー言われるかもしれないが、やっぱり>>827は(・∀・)イイ! 

841:デフォルトの名無しさん
02/09/21 05:50
FORTHモドキ(逆ポーランド電卓か?)。オペレータは+-*/.のみ。

#include <stdio.h>
W[1000],*S=W,c,v;G(){c=getchar();}g(){v=0;do v=v*10+c-48;while((G(),c)-48<10U)
;return v;}main(){G();while(~c)c==45?G(),c-48>9U?v=*S--,*S-=v:(*++S=-g(),G()):
(c-48<10U?*++S=g():c==43?v=*S--,*S+=v:c==42?v=*S--,*S*=v:c==47?v=*S--,*S/=v:c-
46?c-32&&c-10&&printf("err\n"):printf("ok\n%d\n",*S--),G());}

842:デフォルトの名無しさん
02/09/21 10:04
既出ネタのチェックはしてから話題振ることにせんか?
 ・四則演算 >>5

843:デフォルトの名無しさん
02/09/21 10:22
多倍長整数、さらには有理数演算に対応しろと言ってみる。

844:デフォルトの名無しさん
02/09/21 11:58
・何かをグラフィック
・非常に便利な関数を7行で作成


845:デフォルトの名無しさん
02/09/21 14:51
>>842 ごめん、正直指摘間違いでは?、と始め思った。
つーか、>>841の勘違いですね。

四則演算はすでにあります。要求されたのは、
・FORTHのサブセット  あるいは
・四則演算のみ可能な C/C++ !!コンパイラ!!
ですよん。そして、
・多倍長整数、有理整数演算、浮動小数演算などに対応
が追加されますた。

846:79文字で問題を出してみる(w
02/09/21 15:02
問題:単なるクリックソートより早いqsort()互換のソート関数を79文字7行で記述せよ。

847:846
02/09/21 15:03
>846にパッチ当て。
---問題:単なるクリックソートより早いqsort()互換のソート関数を79文字7行で記述せよ。
+++問題:単なるクイックソートより早いqsort()互換のソート関数を79文字7行で記述せよ。


848:デフォルトの名無しさん
02/09/21 16:42
>>835
いいだしっぺの法則

849:デフォルトの名無しさん
02/09/21 17:22
将棋作れ!

850:デフォルトの名無しさん
02/09/21 17:47
┃激┃し..┃く..┃ず┃れ┃て┃鬱┃だ.┃が┃
┣━╋━╋━╋━╋━╋━╋━╋━╋━┫
┃こ.┃れ┃で┃12┃行┃な.┃ん┃だ┃YO┃
┣━╋━╋━╋━╋━╋━╋━╋━╋━┫
┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃
┣━╋━╋━╋━╋━╋━╋━╋━╋━┫
┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃
┣━╋━╋━╋━╋━╋━╋━╋━╋━┫
┃  ┃角┃  ┃  ┃  ┃  ┃  ┃飛┃  ┃
┣━╋━╋━╋━╋━╋━╋━╋━╋━┫
┃香┃桂┃銀┃金┃王┃金┃銀┃桂┃香┃
┗━┻━┻━┻━┻━┻━┻━┻━┻━┛

851:デフォルトの名無しさん
02/09/21 17:48
激しくはずれなくてうれしいw

852:デフォルトの名無しさん
02/09/21 17:49
敵の歩なんかはどうしたらいいのさ?

┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃
┣∨╋∨╋∨╋∨╋∨╋∨╋∨╋∨╋∨┫
とか?


853:デフォルトの名無しさん
02/09/21 17:53
ニフで昔あった将棋は

|歩v|歩^|

で表現していたな

コンピュータの思考ルーチンが激しく難しそうだ

854:デフォルトの名無しさん
02/09/21 23:20
前のスレッドにあった自動インデントプログラムを機能拡張・7行版にしてみました。
使用方は
 program.exe(仮称) 入力ファイル名 出力ファイル名
です。

#include <stdio.h>
FILE *s,*o;I,c,d;G(){return c=getc(s);}P(){c-10&&putc(c,o);}R(){putc(10,o);}T(t
){while(t-->0)putc(9,o);}S(p){d=1;P();while(~G()&&(P(),c!=41||--d))c-p||++d;}Q(
p){P();while(~G()&&(P(),c!=p))if(c==92||_ismbblead(c))P(G());}main(a,v)char**v;
{s=fopen(v[1],"r");o=fopen(v[2],"w");while(~G())c==63||c==58?R(),T(I),P():c==34
||c==39?Q(c):c==40?S(c):c=='{'?R(),T(I),P(),R(),T(++I):c=='}'?fseek(o,-1,1),P()
,R(),T(--I):P(),c==59&&(R(),T(I));}





855:デフォルトの名無しさん
02/09/21 23:36
>将棋
駒は数字で表せばいいじゃん。

王金銀桂香飛角歩 
+1+2+3+4+5+6+7+8 

玉金銀桂香飛角歩
-1-2-3-4-5-6-7-8

856:デフォルトの名無しさん
02/09/21 23:55
>>855
お前は数字を見て将棋だと言えるのか?

#現実問題、数字にでもしなければ不可能だとは思うが
#つーか数字にしても不可能だろ(w

857:デフォルトの名無しさん
02/09/22 00:02
囲碁の九路盤みたいに、将棋もサブセットがあればいいのだが・・・詰め将棋か?

858:デフォルトの名無しさん
02/09/22 00:08
詰め将棋だと駒が全部必要になってしまうのではさみ将棋はどうでしょう?

859:デフォルトの名無しさん
02/09/22 00:09
王 玉
金 キン
銀 ギン
桂 ケイ
香 車
飛 ヒシャ
角 カク
龍 リュウ
馬 ウマ
歩 フ
と  ト

でいけるんじゃ?

860:デフォルトの名無しさん
02/09/22 00:13
>>859
それだったら漢字+「符号」とか「色」で区別した方が扱いも容易
つーか、>>859だと駒の表現だけで2行くらい使ってしまうぞぅ

861:デフォルトの名無しさん
02/09/22 00:14
>>858
もはや別のゲームだが、面白いかもしれない。
コンピュータの思考ルーチンも簡単にかけるし。
よし、いっちょ作ってみるか。>>858が。

862:デフォルトの名無しさん
02/09/22 00:15
>>859
タマキン

863:858じゃないけど
02/09/22 03:31
はさみ将棋 現在9行+3文字 とりあえず動く版を作成

ルールは●○を縦横に移動させ、相手をはさむと取れます
ただし、辺を使ってはさんでも無効です
角をはさむのは正式ルールなのかわからなかったので、今のところ無効
移動方法は移動元(x,y)と移動先(m,n)の4整数で指定、左上が(1,1)
1 2 3 4 [RET]

コンピュータの思考ルーチンはまだなので、ランダムに移動します
今は、関数c()で動作を決めるようになっているので、どなたか作成をば!
変数vが移動元で変数zが移動先になってまつ。

int w[]={1,-1,12,-12},h[3],b[132],u=1,z,y,m,n,i=132,v,d=1;r(p,a,f,z){if(b[z=p+w
[a]]==(u^3)){d++;r(z,a,f);f?b[z]=0:0;}if(b[z]==3||!b[z])d=0;}o(x,y,m,n){d=0;z=x
+y*12;v=m+n*12;if((x!=m&&y!=n)||b[z]!=u||b[v]!=0)d=1;if(x==m){for(;y++<n;)d+=b[
x+y*12];}else if(y==n){for(;x++<m;)d+=b[x+y*12];}}c(){for(d=1;d;){for(i=132;i--
;)if(b[i]==2)v=i,i=0;z=rand()%132;o(v%12,v/12,z%12,z/12);}}main(x){for(;i--;b[i
]=z-11?z&&z-10&&i-12U<109?z-1?z-9?0:2:1:3:4)z=i%12;for(;;){printf("%d:%d %d\n",
u,h[1],h[2]);for(i=11;i++<131;)printf("・\0●\0○\0 \0\n"+b[i]*3);if(h[2]>7||h
[1]>7)break;if(u<2){scanf("%d%d%d%d",&x,&y,&m,&n);o(x,y,m,n);if(d&&puts("Err"))
continue;}else c();b[z]=0;for(i=4;i--;d?r(v,i,1):0)r(v,i,0),h[u]+=d;b[v]=u;u^=3;}}

864:858じゃないけど
02/09/22 05:20
>>863
あー、移動可能判定間違えてました。現在修正中です。

865:858じゃないけど
02/09/22 05:48
>>863
移動判定ミス修正、簡易思考ルーチン装備、やや縮めた版です。

int w[7]={1,-1,12,-12},b[132],u=1,z,y,m,n,i=132,v,d=1;r(p,a,f,z){b[z=p+w[a]]==3
-u?d++,r(z,a,f),f?b[z]=0:0:b[z]-1U>1?d=0:0;}o(x,y,m,n,p,a){d=b[v=m+n*12]+(b[a=z
=x+y*12]!=u||(x-m&&y-n)?1:0);for(p=x==m?y<n?2:3:x<m?0:1;!d&&a!=v;)d+=b[a+=w[p]]
;}c(j,k,s,f,g){s=-1;for(i=120;i--;d=0)for(j=120;b[i]==u&&j--;)for(o(i%12,i/12,j
%12,j/12),k=4;!d&&k--;d>s||d==s&&rand()%j<1?s=d,f=z,g=v:0)r(v,k,0);z=f;v=g;}
main(x){for(;i--;b[i]=z-11?z&&z-10&&i-12U<109?z-9?z-1?0:1:2:3:4)z=i%12;for(;;){
printf("%d:%d %d",u,w[5],w[6]);for(i=9;++i<120;)printf("・\0●\0○\0 \0\n"+b[i
]*3);if(w[5]>7||w[6]>7)break;u<2?scanf("%d%d%d%d",&x,&y,&m,&n),o(x,y,m,n):u>1&&
c();if(d&&puts("Err"));else{b[z]=0;for(i=4;i--;d?r(v,i,1):0)r(v,i,0),w[4+u]+=d;
b[v]=u;u^=3;}}}

866:デフォルトの名無しさん
02/09/22 08:48
>>865
相手のコマの上に持っていってエラーが出ても、相手のコマを消して続くぞ。

867:858じゃないけど
02/09/22 16:47
>>866
1 1 9 1 等では再現しませんでした・・・
よろしければ、棋譜(?)を教えてください。

868:デフォルトの名無しさん
02/09/22 16:55
>>867
俺は1 1 9 1 で一発再現。コンパイラ依存か?gccだけど
あと、1 1 91 1 とかも出来たりして、好きな場所にとばせるが、これは仕方ないか

869:デフォルトの名無しさん
02/09/22 22:49
だれか7行grepよろしく

870:デフォルトの名無しさん
02/09/22 23:17
#!/usr/local/bin/ruby
$pattern = ARGV.shift
while gets
  print if /#{$pattern}/
end

871:デフォルトの名無しさん
02/09/22 23:18
>>868

#!/usr/local/bin/perl
`grep @ARGV`;


872:デフォルトの名無しさん
02/09/22 23:53
>>871 せめて
$p=shift;$f=shift||"-";open H,$f;while(<H>){/$p/&&print $_}

perl grep.pl pattern file.txt
perl grep.pl pattern < file.txt
の両方を受け付けるように、という縛りをつけたらperlの短縮のいい例題になりますた。
見てのとおり初心者ですが、ここのスペースは要る、要らんとかいろいろあってなかなか
面白かったです。
まだパーサの改良ができるかもしれないです。
しかし、1行でこれだと7行は相当に死ねるな・・・・・・

873:デフォルトの名無しさん
02/09/23 00:05
while(<>){/$ARGV[0]/&&print $_}

<>の仕様が良く分かってませんでした。
道理で最初に試したのがうまく動かなかったわけだ。

874:デフォルトの名無しさん
02/09/23 00:06
あ、違った、こっちです。上のは動きませぬ。連投すま・・・・。
$p=shift;while(<>){/$p/&&print $_}

875:871
02/09/23 00:22
まさかネタに突っ込まれるとは思わなかった。

>>874
>print $_;
print;
でいけます。


876:871
02/09/23 00:26
$a=shift;/$a/&&print while(<>);


877:デフォルトの名無しさん
02/09/23 01:01
>>876
惜しい。
$a=shift;/$a/&&print while<>

でも始めから7行以内に収まる事が分かってるようなネタで
盛り上がるのは止めてもらえまいか。
どうせなら10行くらいから頼む。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch