1 :
デフォルトの名無しさん :
2001/03/10(土) 09:09 海外のプログラマーが、たったの七行足らずで DVDのプロテクトを解除するプログラムを作成! 我々も負けてはいられません! ルール:七行なら言語は問いません。では、どうぞ!
2 :
デフォルトの名無しさん :2001/03/10(土) 09:27
<イチロー養成、動体視力強化プログラム Java> ・動作環境 MS-DOS プロンプト 1>class Suzuki { 2> public static void main(String args[]) { 3> while (true) { 4> System.out.print( System.in ) ; 5> } 6> } 7>}
3 :
SAGE :2001/03/10(土) 09:44
1> #include <stdio.h> 2> 3> int main() 4> { 5> printf( "Hello, World!" ); 6> return 0; 7> }
横幅はいったい何行あるんだ?
横幅は80桁でしょう、そりゃ。 1>cli 2>hlt 3>nop 4>nop 5>nop 6>nop 7>nop
6 :
デフォルトの名無しさん :2001/03/10(土) 16:46
セミコロンで区切ればいくらでも書けるんじゃないのか。
スレタイトル、なぜか「エロプログラミング」に見えた。 卯津だ・・
9 :
デフォルトの名無しさん :2001/03/10(土) 17:27
>海外のプログラマーが、たったの七行足らずで >DVDのプロテクトを解除するプログラムを作成! このコードが気になる。だれかあぷして。
10 :
アンノウン名無しさん :2001/03/10(土) 17:47
面白くなりそうなスレですね。
7行で意味のある複雑なことをやりたいですね〜
>>6 世界標準と言うことで、1行79文字以下で行きましょう。
13 :
デフォルトの名無しさん :2001/03/10(土) 19:07
転載あげ
#!/usr/bin/perl -w
# 526-byte qrpff, Keith Winstein and Marc Horowitz <
[email protected] >
# MPEG 2 PS VOB file on stdin -> descrambled output on stdout
# arguments: title key bytes in least to most-significant order
$_='while(read+STDIN,$_,2048){$a=29;$c=142;if((@a=unx"C*",$_)[20]&48){$h=5;
$_=unxb24,join"",@b=map{xB8,unxb8,chr($_^$a[--$h+84])}@ARGV;s/...$/1$&/;$d=
unxV,xb25,$_;$b=73;$e=256|(ord$b[4])<<9|ord$b[3];$d=$d
>>8 ^($f=($t=255)&($d
>>12 ^$d
>>4 ^$d^$d/8))<<17,$e=$e
>>8 ^($t&($g=($q=$e
>>14 &7^$e)^$q*8^$q<<6))<<9
,$_=(map{$_%16or$t^=$c^=($m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;$t
^=(72,@z=(64,72,$a^=12*($_%16-2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]}(16..271))
[$_]^(($h>>=8)+=$f+(~$g&$t))for@a[128..$#a]}print+x"C*",@a}';s/x/pack+/g;eval
[Hot Wired - 7行でDVD暗号を解読するプログラム]
http://www.hotwired.co.jp/news/news/technology/story/20010308302.html
まずxをpack+に置き換えてから、$_の内容を実行するんですよね。 それでSTDINから$_に2048バイトずつ読み込んで、$a=29,$c=142、 ifのなかで、@aに$_の内容をunsigned charの配列にして読み込み、 その21番目と48と論理積とって偽ならそのまま出力、真なら$h=5, $_と@aの80番目のXORをとってその下8ビット・・・むきーーーー
向こうの高校生よりも劣るのか、日本のプログラマって。 さいてー、プププ
while (read(STDIN,$_,2048))
{
$a = 29;
$c = 142;
if ((@a = unpack("C*",$_))[20] & 48)
{
$h = 5;
$_ = unpack(b24,join("",@b = map
{
pack(B8,unpack(b8,chr($_^$a[--$h+84])))
}
@ARGV ));
s/...$/1$&/;
$d = unpack(V,pack(b25,$_));
$b = 73;
$e = 256 | (ord($b[4])) << 9 | ord($b[3]);
$d = $d
>>8 ^($f = ($t = 255)&($d
>>12 ^$d
>>4 ^$d^$d/8))<<17,
$e = $e
>>8 ^($t&($g = ($q = $e
>>14 &7^$e)^$q*8^$q<<6))<<9,
$_ = (map
{
$_%16or$t^=$c^=($m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;
$t ^=(72,@z=(64,72,$a^=12*($_%16-2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]
}
(16..271) )[$_]^(($h>>=8)+=$f+(~$g&$t))for@a[128..$#a]
}
print pack("C*",@a)
}
あ、間違えてる、、、
19 :
デフォルトの名無しさん :2001/03/11(日) 00:35
これ、どうやって使うの?
なんだ。7行に収まったってだけじゃん・・・
>向こうの高校生よりも劣るのか、日本のプログラマって。 >さいてー、プププ 否定はしないよ。あっちのメガデモ関係とか見てると鬱になるよな。
22 :
デフォルトの名無しさん :2001/03/11(日) 00:56
>>21 技術云々って言うか、暇な奴が多いってことだろうけど。
日本のプログラマは搾取対象なので、趣味でなんか作る暇も無い。
(そういう風にプログラマを使ってる糞会社のせい。)
っていうか、おれ高校生の時プログラムなんてしなかったし。
日本にも1画面プログラムや1行プログラムがたくさんあったじゃん。
26 :
デフォルトの名無しさん :2001/03/11(日) 03:39
void main() while(1) printf("逝って良し!\n");
>>25 テクノポリス別冊 プログラム・ポシェット
に投稿してました。
28 :
五郎 :2001/03/11(日) 04:35
これはその高校生もすごいが、それよりperlがすごいんだよ。
てゆーか高校生じゃないじゃん、(
>>13 )どーでもいーけど。
妙にデモスレと似た雰囲気だなここは(藁
31 :
21 :2001/03/11(日) 06:10
すまん。吾輩のせいかも。
32 :
トリッキーの1 :2001/03/11(日) 06:20
(関東など一部の地域での)テレビの2ちゃんねるシミュレータ、
すなわち砂嵐シミュレータを作ってみました。ざーっていうあれです。音は鳴らないけど。
言語はC+APIです。VisualC++6でコンパイル確認、Win2kと98で動作確認しました。
かな〜り削り取ったつもりですが、#include含めて13行もあります。
#include <Windows.h>
int i,r,a=640,b=400;long t[11]={40,640,400,2097153};char*k,y[0xfa000];long
WINAPI WndProc(HWND d,UINT m,UINT w,long l){PAINTSTRUCT p;switch(m){case 15:
HBITMAP q;HDC e;e=CreateCompatibleDC(BeginPaint(d,&p));GetDIBits(e,(q=
CreateCompatibleBitmap(p.hdc,a,b)),0,b,0,(BITMAPINFO*)t,0);for(k=y;k<y+a*b*4;
k+=4)*k=*(k+1)=*(k+2)=(r=r*9+5)
>>16 ;SetDIBitsToDevice(p.hdc,0,0,a,b,0,0,0,b,y
,(BITMAPINFO*)t,0);DeleteObject(q);DeleteDC(e);EndPaint(d,&p);InvalidateRect
(d,0,0);return 0;case 2:PostQuitMessage(0);}return DefWindowProc(d,m,w,l);}int
WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int n){MSG m;WNDCLASS w;w.style=3;w
.lpfnWndProc=WndProc;w.cbWndExtra=w.cbClsExtra=0;w.lpszMenuName=0;w.hIcon=0;w.
hbrBackground=0;w.hCursor=LoadCursor(0,IDC_ARROW);w.lpszClassName="Tax's";w.
hInstance=i;RegisterClass(&w);ShowWindow(CreateWindow("Tax's","2ch",1<<19,99,
99,a,b,0,0,i,0),n);while(GetMessage(&m,0,0,0))DispatchMessage(&m);return 0;}
あと1行くらいは何とかなるかもしれないけれど、7行はちょっと……
オリジナルの、まともな変数名なコードを読みたいという人がもしいれば公開します。
あと、「俺ならここはこうする」という人がいれば是非是非教えてください。
33 :
このスレの1 :2001/03/11(日) 06:34
あくまで七行でお願いします。
34 :
30 :2001/03/11(日) 06:38
#include <stdio.h> int main(){ FILE *stream = fopen( "temp.txt", "w" );int giko, hahaha; for( giko = 0; giko <= 0xF; giko++ ){fprintf( stream, "%x│", giko ); for( hahaha = 0; hahaha <= 0xF; hahaha++ ) fprintf( stream, " %x", giko & hahaha ); fprintf( stream, "\n" );}fclose( stream );}
>>32 11行にはなったけど…7行はツラいなぁ。
// 無意味にC++。VC++6依存かも。
#include <windows.h>
PAINTSTRUCT p;HBITMAP q;HDC e;char*k,y[1<<20];int a=640,b=400,i,t[11]={40,a,b,
2097153},r;long WINAPI f(HWND d,UINT m,UINT w,long l){if(m==15){GetDIBits((e=
CreateCompatibleDC(BeginPaint(d,&p))),(q=CreateCompatibleBitmap(p.hdc,a,b)),0,
b,0,(BITMAPINFO*)t,0);for(k=y;k<y+a*b*4;k+=4)*k=*(k+1)=*(k+2)=(r=r*9+5)
>>16 ;
SetDIBitsToDevice(p.hdc,0,0,a,b,0,0,0,b,y,(BITMAPINFO*)t,0);DeleteObject(q);
DeleteDC(e);return !InvalidateRect(d,0,!EndPaint(d,&p));}if(m==2)
PostQuitMessage(0);return DefWindowProc(d,m,w,l);}int WINAPI WinMain(HINSTANCE
i,HINSTANCE,LPSTR,int n){WNDCLASS w={3,f,0,0,i,0,LoadCursor(0,IDC_ARROW),0,0,
"Tax's"};RegisterClass(&w);ShowWindow(CreateWindow("Tax's","2ch",1<<19,99,99,a
,b,0,0,i,0),n);for(MSG m;GetMessage(&m,0,0,0);DispatchMessage(&m));return 0;}
39 :
デフォルトの名無しさん :2001/03/11(日) 11:22
Noise.java------------------------- import java.awt.*;import java.awt.image.*;import java.util.*;public class Noise extends Canvas{int P=256;byte[]c=new byte[P];int W=320;int H=240;byte[]p=new byte[W*H];MemoryImageSource s;Image image;Random r=new Random();public Noise(){ for(int i=0;i<P;i++)c[i]=(byte)r.nextInt();s=new MemoryImageSource(W,H,new IndexColorModel(8,P,c,c,c),p,0,W);s.setAnimated(true);image=createImage(s);} public void update(Graphics g){for(int i=0;i<W*H;i++)p[i]=(byte)r.nextInt();s. newPixels(0,0,W,H);g.drawImage(image,0,0,null);repaint(20);}public void paint( Graphics g){update(g);}public Dimension getPreferredSize(){return new Dimension( W,H);}public static void main(String[]a){Frame f=new Frame("Noise");Noise n=new Noise();f.add(n);f.pack();f.setVisible(true);}} 32氏にならって作成。 Javaアプリケーション。 3行オーバー。 APIの使い方ちゃうねん。 レイアウトめんどい。 終了はCTRL+Cで(駄目すぎ)。 はっきり言って面白くない。 他の題材を探してこようと思う。
40 :
39 :2001/03/11(日) 11:26
とにかくJavaでは見た目糞コードっぽくならなくてつまらん。 やはりPerlしかあるまいか。
>>38 やっぱ他人の目は大切だな。何で気付かない?という所でだいぶん無駄がありましたね。
3行目が処理系依存なのが残念ですが、修正しても多分11行に収まりそうです。
最適化ありがとうございます。随分参考になりました。
>>40 Javaは言語が綺麗ですからね。import文はいいなぁ……(笑)
42 :
デフォルトの名無しさん :2001/03/11(日) 12:15
>>16 16,7,8歳頃ってハッカーとして一番の成長期だと思う。
なのに、日本の高校生は受験に追われ、PCとネットに(特にネットに)触れる機会が
少ないので、諸外国と比べハッカーが育ちにくいというのは、憂うべき状況だな。
43 :
デモスレ住人 :2001/03/11(日) 12:19
>>32 Watcom.
#include<windows.h>typedef void*v;typedef int i;i a=640,b=400,t[11]={40,640,400
,2097153},r;char*k,y[1<<25];HDC h,e;WINAPI w(v d,i m,i w,i l){if(m==15){v q=
CreateCompatibleBitmap(h,a,b);GetDIBits(e=CreateCompatibleDC(0),q,0,b,0,(v)t,0)
;for(k=y;k<y+a*b*4;k+=4)*k=*(k+1)=*(k+2)=(r=r*9+5)
>>16 ;SetDIBitsToDevice(h,0,0,
a,b,0,0,0,b,y,(v)t,0);DeleteObject(q);DeleteDC(e);InvalidateRect(d,0,0);return
0;}return(m==2)?PostQuitMessage(0),0:DefWindowProc(d,m,w,l);}WNDCLASS c={0,(v)w,
0,0,(v)(1<<22),0,0,0,0,"."};WINAPI WinMain(v i,v x,v y,i z){MSG m;RegisterClass
(&c);h=GetDC(CreateWindow(".","頑張ってみたけど9行が限界かなぁ",37066<<16|32,
99,99,a,b,0,0,i,0));while(GetMessage(&m,0,0,0))DispatchMessage(&m);return 0;}
44 :
デフォルトの名無しさん :2001/03/11(日) 12:41
>42 プ。ちょうどその期間だけポッカリとブランクがあるんですけれど。
あのさ、smalltalkなら最終的にどんなプログラムでも一行なんすけど・・・
46 :
>39 :2001/03/11(日) 13:03
8行になった。 N.java import java.awt.*;import java.awt.image.*;import java.util.*;class N extends Frame{int W=320,H=240,P=256;byte[]c=new byte[P],p=new byte[W*H]; MemoryImageSource s;Image im;Random r=new Random();int i;N(){for(i=0;i<P;i++)c [i]=(byte)r.nextInt();s=new MemoryImageSource(W,H,new IndexColorModel(8,P,c,c,c ),p,0,W);s.setAnimated(true);im=createImage(s);setSize(W,H);setVisible(true);} public void update(Graphics g){for(i=0;i<W*H;i++)p[i]=(byte)r.nextInt();s. newPixels(0,0,W,H);g.drawImage(im,0,0,null);repaint(20);}public void paint( Graphics g){update(g);}static void main(String[]a){new N();}}
>>45 なんで?1行80文字以下の制限があるのに?プ
48 :
デフォルトの名無しさん :2001/03/11(日) 13:13
なんか知らんけど、発言するたびに屁を漏らす奴が一人いるね、このスレ。
49 :
43 :2001/03/11(日) 13:19
ごめん,8行で書けたわ. 訂正.
#include<windows.h>typedef void*v;typedef int i;i a=640,b=400,t[11]={40,640,480
,2097153},r;char*k,y[1<<25];v h,m=y;WINAPI w(v d,i m,i w,i l){if(m==15){v q=Cr\
eateCompatibleBitmap(h,a,b);GetDIBits(h,q,0,b,0,(v)t,0);for(k=y;k<y+a*b*4;k+=4\
)*k=*(k+1)=*(k+2)=(r=r*9+5)
>>16 ;SetDIBitsToDevice(h,0,0,a,b,0,0,0,b,y,(v)t,0);\
DeleteObject(q);return InvalidateRect(d,0,0);}if(m==2)ExitProcess(0);return De\
fWindowProc(d,m,w,l);}WINAPI WinMain(v i,v x,v y,i z){v c[]={0,(v)w,0,0,(v)(1<\
<22),0,0,0,0,"."};RegisterClass((v)c);h=GetDC(CreateWindow(".","2ch",37066<<16|
32,99,99,a,b,0,0,i,0));while(GetMessage(m,0,0,0))DispatchMessage(m);return 0;}
えらい圧迫感のあるスレだな(藁
>>49 コンパイル出来なかったですが(Cコンパイラだとinclude以外は可能かな?)
参考になる部分は多かったです。文末の\はしらなかった。
WM_PAINTでBegin/EndPaintを呼ばなくてもいいんでしたっけ?
Windows3.1だと飛んでしまった記憶があるんですが、今試してみると
上手く動いてそうに見えます。MSDNにも「呼べ」って書いてないし。
最終的に10行になりました。後1行なら何とかなるでしょうが、
速度を維持したまま7行は絶対無理だと確信しました(笑)。
今回のはBegin/EndPaint問題も回避して、DCも毎回解放し、
何より全ての行が78文字以上なので等角フォントでみると
とても美しく見えます。俺としては満足です。
皆さんのコードはとても参考になりました。ありがとうございます。
#include <Windows.h>
HBITMAP q;HDC e,v;char*k,y[1<<20];int a=640,b=400,c,i,t[11]={40,a,b,1572865},r
;long WINAPI f(HWND d,UINT m,UINT w,long l){c=DefWindowProc(d,m,w,l);if(m==2)
PostQuitMessage(0);if(m==15){GetDIBits((v=GetDC(d)),(q=CreateCompatibleBitmap(
v,a,b)),0,b,0,(BITMAPINFO*)t,0);for(k=y;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9
+5)
>>16 ;SetDIBitsToDevice(v,0,0,a,b,0,0,0,b,y,(BITMAPINFO*)t,0);DeleteObject(q
);InvalidateRect(d,0,0);ReleaseDC(d,v);}return c;}int WINAPI WinMain(HINSTANCE
i,HINSTANCE,LPSTR,int n){MSG m;WNDCLASS w={3,f,0,0,i,0,LoadCursor(0,IDC_ARROW)
,0,0,"Tax's"};RegisterClass(&w);ShowWindow(CreateWindow("Tax's","2ch",1<<19,99
,99,a,b,0,0,i,0),n);for(m;GetMessage(&m,0,0,0);DispatchMessage(&m));return 0;}
52 :
46 :2001/03/11(日) 13:35
7行になった〜 N.java import java.awt.*;import java.awt.image.*;import java.util.*;class N extends Frame{int W=320,H=240;byte[]p=new byte[W*H];MemoryImageSource s;Image m;Random r=new Random();void b(){for(int i=0;i<W*H;i++)p[i]=(byte)r.nextInt();}N(){b();s =new MemoryImageSource(W,H,new IndexColorModel(8,256,p,p,p),p,0,W); s.setAnimated(true);m=createImage(s);setSize(W,H);setVisible(true);}public void update(Graphics g){b();s.newPixels();g.drawImage(m,0,0,null);repaint(20);} public void paint(Graphics g){update(g);}static void main(String[]a){new N();}}
53 :
駄目プログラマ :2001/03/11(日) 13:49
#include <windows.h> int WINAPI WinMain (HANDLE hI,HANDLE hP,LPSTR lp,int n) { RECT g;DWORD i=-1;HDC hdc = GetDC(0);GetWindowRect(GetDesktopWindow(), &g); while(i--)SetPixel(hdc,rand()%g.right,rand()%g.bottom,rand()); ReleaseDC(0,hdc);return 0; } ほらよ、7行砂嵐プログラム。WIN32用でCな。win98meで動作確認。win2kは未確認。 ほっとけば いつか終了(藁。 我慢できなくなったらタスク終了しとけ。
つかライブラリの量と質によるだろperlだってモジュールがあるし。 なんだって最終的に1行にできるよ。
56 :
デフォルトの名無しさん :2001/03/11(日) 16:49
>>55 用意されてるものだけで書くのが面白いんだろ。
57 :
デフォルトの名無しさん :2001/03/11(日) 16:54
>>51 これはすげえ。これだけのコードの短さを保ちながら、WNDCLASS部分などの
エラーチェック以外はほぼ完璧だ。しかも鬼門のDIBits関連APIをいじりながら、
描画アルゴリズムも最適化されてる。それでこの速度が達成出来るのか、うーむ。
いい勉強をさせられた。久々に他人のソースを見て感動したよ。
58 :
デフォルトの名無しさん :2001/03/11(日) 18:00
>51 >WM_PAINTでBegin/EndPaintを呼ばなくてもいいんでしたっけ? 呼ばなくてもいいけど、そのときはDefWindowProc()に処理を回さないとだめ。 DefWindowProc()が代わりにBegin/EndPaintを呼んでくれる。 WM_PAINTでBegin/EndPaintを呼ばずにreturnすると、無限ループになるよ。
59 :
57 :2001/03/11(日) 18:23
>58 51さんはちゃんとその周りの処理も出来ているよ。 先にDefWindowProcを呼んで、その後で個別処理をしている。 ちなみにBegin/EndPaintを呼ばないと無限ループというのは間違いで、 WM_PAINTが絶え間なく呼ばれ続けるだけのはず。 今回の様なプログラムならそれを逆手にとって InvalidateRectを呼ばない方法も考えられるね。 (そうするとまた少しコードが短くなる(笑)) でもそれは本来正しいプログラムではないので、51さんの方法がベストでしょう。
60 :
デフォルトの名無しさん :2001/03/11(日) 19:27
あまり誉められたものじゃないけど9行。
もう1行いけそう
#include <windows.h>
HBITMAP q;HDC e,v;char*k,y[1<<20];int a=640,b=400,c,i,t[11]={40,a,b,1572865},r;
int WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){int m[7];WNDCLASS w={67,De\
fWindowProc,0,0,i,0,0,0,0,"1"};RegisterClass(&w);ShowWindow(CreateWindow("1",0,
1<<19,0,0,a,b,0,0,i,0),1);while(GetMessage((MSG*)m,0,0,0)){DefWindowProc((HWND)
m[0],m[1],m[2],m[3]);if(m[1]==513)return 0;if(m[1]==15){GetDIBits((v=GetDC((HW\
ND)m[0])),(q=CreateCompatibleBitmap(v,a,b)),0,b,0,(BITMAPINFO*)t,0);for(k=y;k<y
+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)
>>16 ;SetDIBitsToDevice(v,0,0,a,b,0,0,0,b,
y,(BITMAPINFO*)t,0);DeleteObject(q);InvalidateRect((HWND)m[0],0,0);}}}
61 :
60 :2001/03/11(日) 19:28
ちなみに、クリックで終了w ウインドウを閉じると、メモリにゴミが残りますw スタイル変更したほうがよかったな。
62 :
デフォルトの名無しさん :2001/03/11(日) 19:51
>52 ふ〜ん。Javaの方が短いけれどずいぶんスッキリしているなあ
63 :
デフォルトの名無しさん :2001/03/11(日) 20:01
すごいですね。プログラムまったくわかりませんが、 大学に行ったらこんな凄いプログラムつくってみたいです
64 :
名無しでGO! :2001/03/11(日) 20:05
ところで、なんでみんな明らかに長くなりそうなWindows+CとかJavaなの?
65 :
60 :2001/03/11(日) 20:25
もうちょっと縮めて8行
#include <windows.h>
HBITMAP q;HDC v;char*k,y[1<<20];int a=640,b=400,c,i,t[11]={40,a,b,1572865},r;W\
INAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){int m[7];WNDCLASS w={67,DefWind\
owProc,0,0,i,0,0,0,0,"1"};RegisterClass(&w);ShowWindow(CreateWindow("1",0,1<<19
,0,0,a,b,0,0,i,0),1);while(GetMessage((MSG*)m,0,0,0)){w.lpfnWndProc((HWND)m[0],
m[1],m[2],m[3]);if(m[1]==513)break;if(m[1]==15){v=GetDC((HWND)m[0]);for(k=y;k<y
+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)
>>16 ;SetDIBitsToDevice(v,0,0,a,b,0,0,0,b,
y,(BITMAPINFO*)t,0);DeleteObject(q);InvalidateRect((HWND)m[0],0,0);}}return 0;}
66 :
>64 :2001/03/11(日) 20:41
だったら他の言語で書いてよ。
67 :
トリッキーの1 :2001/03/11(日) 20:44
>>58 -59
情報tnxです。
59さん、確かにコレを利用するとかなり短く書けますね。
>>60 うーん、怖い。メッセージループ内で処理する場合、
SendMessageで送られたメッセージなどが
直接プロシージャにまわされてしまうので、
この例では例えばWM_DESTROYなどが処理できないはずです。
しかし、今思いついたんですが、GetMessageの返す
エラーメッセージを利用する方法がありますね。
というわけで
>>58 -60さんを参考にして書いてみました。
これも8行ですが、ちゃんと終了出来ます。
メモリはOSが解放してくれることを期待しています。
#include <Windows.h>
HBITMAP q;char*k,y[1<<20];int a=640,b=400,r,m[8];BITMAPINFO t={40,a,b,1,24};H\
WND g;int WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){WNDCLASS w={3,DefWi\
ndowProc,0,0,i,0,LoadCursor(0,IDC_ARROW),0,0,"T"};RegisterClass(&w);HDC v=Get\
DC(g=CreateWindow("T","2ch",268959744,99,99,a,b,0,0,i,0));q=CreateCompatibleB\
itmap(v,a,b);while(GetMessage((MSG*)m,g,0,0)!=-1){if(m[1]==15){GetDIBits(v,q,0
,b,0,&t,0);for(k=y;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)
>>16 ;SetDIBitsToD\
evice(v,0,0,a,b,0,0,0,b,y,&t,0);}else DispatchMessage((MSG*)m);}return 0;}
7行が見えてきましたね(笑)
まるでPGP鍵のようだ。
>>62 美しい言語である上、比較的簡単にグラフィックをさわれますからね。
>>63 これは悪い例です。というか、パズルみたいな物です。参考にしてはいけません。
確かに私は大学生ですが、普段こんな狂ったコードを書いているわけではありません。
>>64 他に適した言語がなかなか見つからないんですが、心当たりありますか?
使ったこと無いけれど、HSPとかだと簡単なのかな?
馬鹿スレから名スレへ
70 :
デフォルトの名無しさん :2001/03/11(日) 21:01
68さん>> プログラム組んだことないのですが はじめからC++って大丈夫ですか?? C言語知らなくてもC++の入門書読んでも大丈夫ですか??
71 :
60 :2001/03/11(日) 21:01
>>67 >メモリはOSが解放してくれることを期待しています。
CS_CLASSDC か CS_OWNDC指定しておけば平気だと思う。
この例だと
WNDCLASS w = {67, ...
かな
>>71 =60さん
なるほど、名案!素晴らしい。
ちなみに
>>67 は、WM_PAINTが外から投げられると画面の更新を止めます。
その可能性は結構大きいので、バグプログラムだと言えるでしょう。悲しい。
>>70 すみません、スレ違いなので別の場所で会えれば……
73 :
60 :2001/03/11(日) 21:07
関係ないけど、ちょっと気になってMSDN見てみた。 >警告 GetMessage 関数は、0 以外の値、0、-1 のいずれかを返します。したがって、次のようなコードは避けてください。 >while (GetMessage(lpMsg, hWnd, 0, 0)) ... おぃ、どういうことだよ。 今までのサンプルってなんなんだ?
>>73 =60
-1を返しても、メッセージは大抵取れています。
Windows3.1の名残なのか、hwnd==NULLの場合でも正常に動作します。
ただこの場合、頻繁にエラーの-1が返されるようです。
しかし、本当にエラー(Windowが消滅した、など)を返してきた場合
対応できないので、
>>67 ではわざわざhwndを設定してエラーが出ないようにし、
その代わりエラーが返ってきたら(必ずいつか返ってくる)強制終了しています。
75 :
60 :2001/03/11(日) 21:47
ゴール?
7行到達w
Cだとプリプロセッサというウザイものがあるから難しいねw
>>67 を参考に。
#include <windows.h>
HDC v;char*k,y[1<<20];int a=640,b=400,c,i,r, m[8];BITMAPINFO t={40,a,b,1,24};H\
WND g;WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){ WNDCLASS w={67,DefWind\
owProc,0,0,i,0,0,0,0,"1"};RegisterClass(&w);v=GetDC(g=CreateWindow("1",0,26895\
9744,0,0,a,b,0,0,i,0));while(GetMessage((MSG*)m,g,0,0)!=-1){if(m[1]==15){for(k=
y;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)
>>16 ;SetDIBitsToDevice(v,0,0,a,b,0,0
,0,b,y,&t,0);}elseDispatchMessage((MSG*)m);}return 0;}
76 :
トリッキーの1 :2001/03/11(日) 22:04
>>75 恥ずかしい……まさかこんな大穴を見落としていたとは。
確かにここまできたらGetDIBitsをする意味は全くないですね。
ちょっと惜しいのは、ウィンドウをドラッグすると更新が止まってしまう事です。
↓はそれを修正したInvalidateRectを呼ぶバージョンです。あとちょっと手を入れてあります。
#include <Windows.h>
char*k,y[1<<20];int a=640,b=400,c,r,m[8];BITMAPINFO t={40,a,b,1,24};HWND g;WI\
NAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){WNDCLASS w={67,DefWindowProc,0,0
,i,0,0,0,0,"T"};RegisterClass(&w);HDC v=GetDC(g=CreateWindow("T","2ch",513<<19
,99,99,a,b,0,0,i,0));while(GetMessage((MSG*)m,g,0,0)!=-1){if(m[1]==15){for(k=y
;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)
>>16 ;SetDIBitsToDevice(v,0,0,a,b,0,0
,0,b,y,&t,0);}else DispatchMessage((MSG*)m);InvalidateRect(g,0,0);}return 0;}
しかし60さん、メッセージループといい素晴らしい目の付け所です。
60さんがいなければ7行達成出来ませんでしたね。今回はホントに勉強になりました。
77 :
39 :2001/03/11(日) 22:09
>>52 ブラボー! 素晴らしいでし。
ていうか、宣言をまとめることすら思いつかなかった俺って
(いつも1行1個なんだも〜ん)
鬱だ氏のう
78 :
60 :2001/03/11(日) 22:14
>>76 むむっ、こっちも別のアプローチで完成w
InvalidateRect呼ばないけど、ちょっとずるしてその辺解決。
#include <windows.h>
HDC v;char*k,y[1<<20];int a=640,b=400,c,i,r, m[8];BITMAPINFO t={40,a,b,1,24};H\
WND g;WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){WNDCLASS w={67,DefWindow\
Proc,0,0,i,0,0,0,0,"1"};RegisterClass(&w);v=GetDC(g=CreateWindow("1",0,2689597\
44,0,0,a,b,0,0,i,0));for(;;){if(PeekMessage((MSG*)m,0,0,0,1))DispatchMessage((
MSG*)m);else{if(!IsWindow(g))return 0;for(k=y;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(
r=r*9+5)
>>16 ;SetDIBitsToDevice(v,0,0,a,b,0,0,0,b,y,&t,0);}}}
79 :
トリッキーの1 :2001/03/11(日) 22:20
>>78 ああなるほど。良くあるOnIdleの形ですね。
どちらの手法でも最終的にCPUを喰いまくるので(笑)
OKでしょう。
……そろそろ次のネタの時期ですね。
フルスクリーンのラスタースクロールとか(笑)
>>51 自己レス
>最終的に10行になりました。後1行なら何とかなるでしょうが、
>速度を維持したまま7行は絶対無理だと確信しました(笑)。
今日の昼の発言。なんといい加減な確信だ(鬱)
81 :
デフォルトの名無しさん :2001/03/11(日) 22:28
ついでに多重スクロールもきぼん
7行で?(藁
83 :
81>82 :2001/03/11(日) 22:39
いやべつに
84 :
38 :2001/03/11(日) 22:39
俺は
>>51 のコードが非常に素晴らしいと思う。
もちろん7行達成も凄いことだが。
>>85 ほめてくれてありがとう。
でも実は51、処理系依存の部分が1ヶ所あります。
書き直しても簡単に10行なのに、気付かなかった自分がちょっと嫌。
87 :
60 :2001/03/11(日) 23:03
うんうん、51はすごかった。 俺もアレに触発されてやってみたわけだし。
88 :
52 :2001/03/11(日) 23:04
>77 Javaの方が短いけれどわかりやすい。 ・・・、というかWin32 APIよくわからないだけかも・・・。 乱数使うときはRandom#nextInt()を使ったほうが高速なんですね。 今までMath.random()使っていたけれど実はMath.random()が重いということを 知った今日この頃。 # Random#nextInt()はintだしねー
89 :
60 :2001/03/11(日) 23:06
結局出来上がったコードはインデント戻せば普通な感じで面白み無いしね。
最後におまけで整理した行連結(\)なしバージョン
#include <windows.h>
char*k,y[1<<20];int a=640,b=400,c,r;BITMAPINFO t={40,a,b,1,24};WINAPI WinMain(
HINSTANCE i,HINSTANCE,LPSTR,int){MSG m;WNDCLASS w={67,DefWindowProc,0,0,i,0,0,0
,0,"1"};RegisterClass(&w);HWND g=CreateWindow("1",0,268959744,0,0,a,b,0,0,i,0);
HDC v=GetDC(g);for(;;){if(PeekMessage(&m,0,0,0,1))DispatchMessage(&m);else{if(!
IsWindow(g))return 0;for(k=y;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)
>>16 ;
SetDIBitsToDevice(v,0,0,a,b,0,0,0,b,y,&t,0);}}}
90 :
デフォルトの名無しさん :2001/03/12(月) 00:53
新しいお題をクレー。粘土をクレー。
91 :
60 :2001/03/12(月) 01:16
7行ラスタスクロールっしょ? 元絵を作る時点で7行超えてるし(鬱
>>91 えっ……マジだったの?
ああ、今回はJavaにしたい……
93 :
デフォルトの名無しさん :2001/03/12(月) 04:55
;; nasmw s.asm -o s.com dd 10cd13b0h,0c38ea0b7h,193740e4h,0f8e2aac7h,8626c031h,0f2e94105h,0ffh
94 :
トリッキーの1 :2001/03/12(月) 05:24
>>93 それは7行スレよりトリッキースレでしょう。
お待ちしております(笑)
>>91 骨格だけ作ってみました。10行です。最適化していないのでコード的に無駄だらけです(tとか)。
ここから出発するのはやめた方がいいかもしれません。BitBltは良くない。
とはいえ、Get/PutDIBitsを使うのもいまいち良くないですし。
いっそのこと、Windowの形態を無くしてしまうのも手かも……
その場合終了方法が問題です。
フルスクリーン ラスタースクロール
#include <windows.h>
#include <math.h>
HDC v,d,e;HWND g;int n,f,t[10]={40,0,0,1572865},m[8];WINAPI WinMain(HINSTANCE
i,HINSTANCE,LPSTR,int){t[1]=GetSystemMetrics(0);t[2]=GetSystemMetrics(1);
WNDCLASS w={67,DefWindowProc,0,0,i,0,0,0,0,"Lus"};RegisterClass(&w);v=GetDC(g=
CreateWindow("Lus",0,WS_VISIBLE|WS_POPUP,0,0,t[1],t[2],0,0,i,0));d=GetDC(0);
SelectObject(e=CreateCompatibleDC(d),CreateCompatibleBitmap(d,t[1],t[2]));
BitBlt(e,0,0,t[1],t[2],d,0,0,SRCCOPY);while(GetMessage((MSG*)m,g,0,0)!=-1){if
(m[1]==15)for(n=0;n<t[2];n++)BitBlt(v,sin(n*3.0/t[2])*sin((f++)/40.0)*60,n,t[1
],1,e,0,n,SRCCOPY);DispatchMessage((MSG*)m);InvalidateRect(g,0,0);}return 0;}
トリッキーの1さん、すっかりここの主になっちゃったね(藁
96 :
デフォルトの名無しさん :2001/03/12(月) 13:52
>94 なんでこの行数でこんな事が出来るんだ・・
97 :
:2001/03/12(月) 14:44
優良スレだな。
98 :
デフォルトの名無しさん :2001/03/12(月) 14:55
月面着陸ゲームを50 or 25行で。
ぬ、560文字という制限なのですね。 Rubyじゃ無理だな。
100 :
デフォルトの名無しさん :2001/03/12(月) 15:07
>98 おいおい、(約)7行っていう縛りがあるから面白いんじゃないの? 50行×79字なんて掲示板には適さないし、研ぎの魅力が半減だ。
101 :
38 :2001/03/12(月) 15:56
7行で圧縮&展開だ〜! …というネタを振ろうと思って試しに作ってみたら出来ちゃった。 #include <stdio.h> main(int C,char**V){FILE*r,*w;int c,p=-1,l=1;if(C==4){r=fopen(V[2],"rb");if(r) {w=fopen(V[3],"wb");if(*V[1]-'x'){while((c=getc(r))-EOF){if(p-c||l==255){if(l- 1)putc(p,w),putc(l,w);putc(c,w),l=0;}l++,p=c;}if(l-1)putc(p,w),putc(l,w);}else {while((c=getc(r))-EOF){if(c==p){l=getc(r);while(l--)putc(p,w);if(EOF==(c=getc (r)))break;}else if(p+1)putc(p,w);p=c;}}fclose(r);fclose(w);}}else puts( "usage: [a|x] [file_in] [file_out] (a:compress, x:expand)");return 0;} # ただしただのRLEなので単色ビットマップとか以外はむしろサイズ増えるかも(^^;
102 :
60 :2001/03/12(月) 16:33
とりあえず、9行。
>>94 まだいけそうなのでがんばります。
#include <windows.h>
#include <math.h>
WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){WNDCLASS w={67,DefWindowProc,0,0,i,0,0
,0,0,"R"};HDC e,d=GetDC(0);int a=GetSystemMetrics(0),b=GetSystemMetrics(1),n,f,
o=SRCCOPY;RegisterClass(&w);HWND g=CreateWindow("R",0,9<<28,0,0,a,b,0,0,i,0);M\
SG m;SelectObject(e=CreateCompatibleDC(d),CreateCompatibleBitmap(d,a,b));BitBlt
(e,0,0,a,b,d,0,0,o);while(IsWindow(g)){if(PeekMessage(&m,0,0,0,1))DispatchMess\
age(&m);for(n=0;n<b;n++)BitBlt(GetDC(g),sin(n*3.0/b)*sin((f++)/40.0)*60,n,a,1,e
,0,n,o);}return 0;}
103 :
デフォルトの名無しさん :2001/03/12(月) 17:25
>>101 この調子でスライド辞書+ハフマンお願い。
C++コンパイラもよろしく。
105 :
60 :2001/03/12(月) 21:14
いんちきラスタスクロールになったけど(笑)、いちお、7行。 まっとうなやつで可能なのかな? #include <windows.h> #include <math.h> int a=GetSystemMetrics(0),b=GetSystemMetrics(1),n,f,o=SRCCOPY,s;MSG m;HINSTANCE i;main(){ WNDCLASS w={67,DefWindowProc,0,0,i=GetModuleHandle(0),0,0,0,0,"R"}; RegisterClass(&w);HWND g=CreateWindow("R",0,9<<28,0,0,a,b,0,0,i,0);HDC d=GetDC( g);while(IsWindow(g)){if(PeekMessage(&m,0,0,0,1))DispatchMessage(&m);else{for(n =0;n<b;n++)BitBlt(d, s=sin((f+n+1)/40.0)*60,n,a,1,d,s,n,o);f++;}}return 0;}
107 :
60 :2001/03/12(月) 21:43
ここに提示されるソースのインデントを整えるツールとか7行でできるかな?
108 :
トリッキーの1 :2001/03/12(月) 23:15
>>105 これでいいんじゃないでしょうか。Windowを登録しないという技を使えば、
表示的にはまともな(ただし作法からは大幅にはずれた)プログラムは出来そうですが。
砂嵐で培ったノウハウが活用されていますね。C+APIに関してはコレくらいかな?
さて、次は何でしょう。圧縮ですか?インデントツールですか?
インデントツールは難しそうです。構文解析を7行は辛いな(笑)
109 :
デフォルトの名無しさん :2001/03/12(月) 23:20
倉庫番きぼーん
110 :
B++ :2001/03/12(月) 23:21
俺も挑戦してみたくなったので参戦。
とりあえずラスタスクロールを
>>94 をもとに作ってみた。
#include <windows.h>
#include <math.h>
char*p,q[1<<23];int v,w,h,y,f;HANDLE n,a,b,c,t;int APIENTRY WinMain(HINSTANCE
i,HINSTANCE,LPSTR,int){v=(w=GetSystemMetrics(0))*3;h=GetSystemMetrics(1);b=
CreateCompatibleDC(a=GetDC(0));BITMAPINFO o={{40,w,h,1,24}};SelectObject(b,
CreateDIBSection(a,&o,0,(void**)&p,0,0));BitBlt(b,0,0,w,h,a,0,0,SRCCOPY);c=
GetDC(n=CreateWindow((LPCTSTR)32770,"2ch",9<<28,0,0,w,h,0,0,i,0));MSG m;
CopyMemory(q+v,p,v*h);while(GetMessage(&m,0,0,0)){for(y=0;y<h;y++)CopyMemory(p
+y*v,q+y*v+v+(int)(sin(y*3.0/h)*sin(++f/10.0)*60)*3,v);BitBlt(c,0,0,w,h,b,0,0,
SRCCOPY);DispatchMessage(&m);InvalidateRect(n,0,0);}return 0;}
下手にバックバッファ(DIBSection)使ったら長くなった。
ポイントはウィンドウクラスに32770(ダイアログ用のクラス)
を使うとRegisterClassが不要になること。
111 :
トリッキーの1 :2001/03/12(月) 23:34
>>110 参戦大歓迎です(笑)
>ポイントはウィンドウクラスに32770(ダイアログ用のクラス)
なるほど、そんな怪しい方法があったとは。参考になります。
この場合、"EDIT"などでもいいかもしれませんね。
しかしこの場合、どうやって終了させればいいんでしょ?
ALT+F4利かないですね。例のSendMessage問題が難しそうです。
後、このコードはC++処理系だとコンパイル出来ないのが残念ですね。
112 :
39 :2001/03/12(月) 23:55
>>109 ゲーム系は入力周りだけで7行食っちまいそうでし。
標準Cの範囲でなんか題材ないかにゃー?
標準Cだと、ヘッダファイルが行数を圧迫してつらいっす。 stdio、stdlibだけで2行だし、そのうえ特殊な物をつかうと…… 致し方ないですけどね(笑)
やっぱPerlにしようよ。
115 :
60 :2001/03/13(火) 00:23
>>105 あ、処理系依存だな。
まぁ、しょうがないか。
>>114 Perlですか。
専門外なんで、パスですかね(^^;
116 :
38 :2001/03/13(火) 01:04
-- Cのソースのインデントを整えてるふりをする(笑)ツール -- ※ 構文解析?知らんな(ナンチテ ※ IEからコピペするときは行末スペースを削ってからぶち込んでクレ。 ※ 絶対Perlとかの方が向いてる作業だよなぁ、これ…。 #include <stdio.h> #define g EOF!=(c=getc(stdin)) #define p(x) putc(x,stdout) int main(){int i,c,d=0,n=0;while(g){p(c);if(c!='#')break;while(g){p(c);if(c== '\n')break;}}while(g){if(c=='\\'&&g&&c!='\n')p('\\');if(c!='\n'){if(c=='}')d-- ;if(n){n=0;for(i=0,p('\n');i<d;i++)p('\t');}p(c);if(c==',')p(' ');if(c==';')n= 1;if(c=='{'){d++;n=1;}if(c=='}')n=1;}}return 0;}
117 :
38 :2001/03/13(火) 01:17
↑いかん、致命的バグがあった…(汗
118 :
39 :2001/03/13(火) 02:20
soukoban.pl---------------
open I,"s.txt";while(<I>){chop;$m.=$_;$w=length;$h++;}$p=index $m,"P";$m=~
s|P|.|;@b=(0,0,$w,0,-1,0,1,0,-$w,0);while($m=~/\$/){$t=$m;substr $t,$p,1,"P";
for(1..$h){print substr($t,0,$w,"")."\n";}print"\n";$v=$b[<STDIN>];$d=$p+$v;
$c=substr $m,$d,1;if($c eq'#'){next;}if($c eq'$'){$c=substr $m,$d+$v,1;if($c
eq'#'){next;}substr $m,$d,1,".";substr($m,$d+$v,1,$c eq"_"?'#':'$');}$p=$d;}
s.txt---------------------
................
......#####.....
......#...#.....
....###$..#.....
....#..._.#.....
....#...__#.....
....#.P.$$#.....
....#.....#.....
....####..#.....
.......####.....
................
................
>>109 氏の挑戦に応えて、倉庫番である。
5行である。
恐るべしPerl。
ステージは外部ファイル(邪道?)。
移動は8、2、4、6+リターン。
Perl初心者なので無駄あると思う。
誰か面白いステージ作って下さい。
119 :
39 :2001/03/13(火) 02:23
しまったバグ発見。
120 :
39 :2001/03/13(火) 02:33
open I,"s.txt";while(<I>){chop;$m.=$_;$w=length;$h++;}$p=index $m,'P';$m=~s|P|.| ;@b=(0,0,$w,0,-1,0,1,0,-$w,0);while($m=~/\$/){$t=$m;substr $t,$p,1,'P';for(1..$h ){print substr($t,0,$w,"")."\n";}print"\n";$v=$b[<STDIN>];$d=$p+$v;$c=substr $m, $d,1;if($c eq'#'){next;}if($c eq'$'){$c=substr $m,$d+$v,1;if($c =~/#|\$/){next;} substr $m,$d,1,".";substr $m,$d+$v,1,$c eq'_'?'#':'$';}$p=$d;} よし、修正(汗)。
やはりperlだとあまり面白くないと思うのは俺だけ?
122 :
デフォルトの名無しさん :2001/03/13(火) 04:45
1画面って事で 25x80文字位のショートプログラムスレ欲しいねぇ
くくくれー。題材くれー。
125 :
トリッキーの1 :2001/03/13(火) 09:47
>>118 残念ながらうちのjperl4(dos)ではインタプリタを通りませんでした。
それっぽいところを修正したら、今度は標準出力に何も表示されません。
うーん、同じ症状の人はいないかな?
>>121 -122
perlは汚い言語なので、凄いと思わせるプログラムはなかなか難しいでしょう。
よほど難しい題材でないと、「7行でこんな事が!」という感じにはなりづらいです。
>>108 参考までに、全画面ラスタースクロールのWindowを登録しないバージョンを作ってみました。
展開してみるとわかると思うけど、簡単かつ邪道な方法です。
7行です。終了は左クリックです。
#include <windows.h>
#include <math.h>
WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){HDC d,e;int x=GetSystemMetrics(
0),y=GetSystemMetrics(1),n,f;d=GetDC(0);SelectObject(e=CreateCompatibleDC(d),
CreateCompatibleBitmap(d,x,y));BitBlt(e,0,0,x,y,d,0,0,SRCCOPY);while(!(
GetKeyState(1)&(1<<31))){for(n=0;n<y;n++)BitBlt(d,sin((n)*3.0/y)*sin((f++)/
40.0)*60,n,x,1,e,0,n,SRCCOPY);Sleep(1);}InvalidateRect(0,0,1);return 0;}
すかすかなので、気合いを入れればもう1行くらい余裕で縮まりそうです。
全画面砂嵐なら5行で作れるかもしれませんね(笑)
126 :
38 :2001/03/13(火) 12:14
>>116 修正版。
#include <stdio.h>
#define p(x) putchar(x)
main(){int c,i,v=10,k=0,d=0,n=0;for(;(c=getchar())-EOF;v=c){if(v==10&&c==35)do
{p(c);}while(c-10&&(c=getchar())-EOF);else{if(c==92&&g){if(c==10){c=v;continue
;}else p(92);}if(c==10)c=32;if(c=='}')d--;if(n){n=0;if(!k&&c-59)for(i=0,p(10);
i<d;i++)p(9);}if(c==41)p(32);p(c);if(c==44)p(32);if(c==40)p(32),k++;if(c==41)k
&&k--;if(c=='{')n=1,d++;if(c=='}'||c==59||c==58)n=1;}}return 0;}
ダメダメ。俺の腕じゃこんなもんだな。
>>118 うち(v5.6.0)だとちゃんと動いたっす。マップも
スクリプト内に埋めちゃってても7行で行けるんでは?
>>125 いまどきPerl4はないと思うが…。今の普通はどう考えても5だよ。
128 :
デフォルトの名無しさん :2001/03/13(火) 14:18
すげぇ!みんなすげぇよ!
129 :
デフォルトの名無しさん :2001/03/13(火) 14:58
とりあえず、125のを無理やりPascalにしてみました(藁 a.pas--------------------- program a;uses Windows;var d,e:HDC;x,y,n,f:UINT;begin x:=GetSystemMetrics(0);y :=GetSystemMetrics(1);d:=GetDC(0);e:=CreateCompatibleDC(d);SelectObject(e, CreateCompatibleBitmap(d,x,y));BitBlt(e,0,0,x,y,d,0,0,SRCCOPY);while((1shl 31) and GetKeyState(1)=0)do for n:=0to y-1do begin BitBlt(d,Round(sin(n*3/y)*sin(f /40)*60),n,x,1,e,0,n,SRCCOPY);Inc(f);Sleep(0);end;InvalidateRect(0,0,True)end. 5行でふ。しっかし、こんなんでよう動きますなあ・・・。
130 :
デフォルトの名無しさん :2001/03/13(火) 15:16
デモスレからのお便り(ワラ 7行でレイトレーシングしてクレヨ
>>130 むしろ、7行レイトレーシングを引っ提げて
そっちから殴り込みかけてくれヨ。(^^)
132 :
デフォルトの名無しさん :2001/03/13(火) 17:50
見てみたいぜ!月面着陸ゲーム!
>>127 Dos時代から環境を引きずっているのだよ…許してください。
135 :
*nix厨 :2001/03/13(火) 19:22
参戦します。 スライド辞書圧縮にチャレンジしました。 #include <stdio.h> int l=0,s,i,j,m,e=32,f=0x3ff;char c,*d=0;main(){while((c=getchar())-EOF){d=rea\ lloc(d,l+1);d[l++]=c;}d[l]=0;if(l<4){for(i=0;i<l;i++)printf("%c",d[i]);return 0 ;}printf("%c%c%c",d[0],d[1],d[2]);for(s=3;s<(l-3);s++){j=(s>e)?e:s;for(m=1,j=(( l-s-2)>j)?j:(l-s);j>2;j--){for(i=(s-(s&f));i<s;i++){if(!(m=memcmp(d+i,d+s,j))) break;if((i+j)>l)break;}if(!m)break;}if(!m){printf("(%d,%d)",s-i,j);s+=j-1;}el\ se putchar(d[s]);}for(i=s;i<l;i++) printf("%c",*(d+i));return 0;} の7行。 コード化は課題とさせてください。 動作はテキストファイルを放りこめば見れます。
おぉぉぉ。まじで?
古いの送っちまった。鬱 ま、7行で動くからいいか・・・
コンパイル通らぬ…。 #include <stdio.h> #define p(x) putchar(x) main(){int c,i,v=10,k=0,d=0,n=0;for(;(c=getchar())-EOF;v=c){if(v==10&&c==35)do p(c);while(c-10&&(c=getchar())-EOF);else{if(c==92&&(c=getchar())-EOF){if(c==10) {c=v;continue;}else p(92);}if(c==10)c=32;if(c=='}')d--;if(n){n=0;if(!k&&c-59) for(i=0,p(10);i<d;i++)p(9);}if(c==41)p(32);p(c);if(c==44)p(32);if(c==40)p(32),k ++;if(c==41)k&&k--;if(c=='{')n=1,d++;if(c=='}'||c==59||c==58)n=1;}}return 0;} こうじゃないか?
>むしろ、7行レイトレーシングを引っ提げて >そっちから殴り込みかけてくれヨ。(^^) うむ。我々は誰の挑戦でも受ける!
>>135 をを、凄い。7行で作れるもんなんだね。
141 :
デフォルトの名無しさん :2001/03/13(火) 23:14
>>137 うぉぉ。
本当にできるとは。
新しい方も見てみたい。
age
142 :
38 :2001/03/13(火) 23:26
>>138 おぉThanks!その通りです…
>>135 よーし次はハフマンよろしく!(w
ってのは冗談だけど、ArithmetricCoder辺りなら7行におさまらないかな…
143 :
デフォルトの名無しさん :2001/03/13(火) 23:37
>137 コンパイル通らんぞ #include <stdlib.h> #include <memory.h> が抜けてる。 それと、これって当然解凍できないよね。 バイナリの圧縮も出来ないし。 まだまだ職人の入り込む余地はあるな
144 :
デフォルトの名無しさん :2001/03/13(火) 23:58
こういうネタは手短に書けるように設計されたCやperl言語の圧勝だね。 行指向の言語じゃ無理だし。 流行のDelphiやpythonじゃこうはいかない・・?
145 :
デフォルトの名無しさん :2001/03/14(水) 00:15
あの、
>>135 ,138の
(c=getchar())-EOF
の部分って、等価比較より引き算の方が速いって事ですか?
それとも単に字数を稼ぐ為?
EOFのこういう使い方は初めてみたので。
146 :
*nix厨 :2001/03/14(水) 01:20
仕切りなおし。 #include <stdio.h> int e=31,f=1023,g=0,h,i,j,k,l=0,m,n=127,s;char *d=0;main(){while((s=getchar())-EOF){d= realloc(d,l+1);d[l++]=s;}d[l]=0;for(s=0;s<(l-3);s++){j=(s>e)?e:s;for(m=1,j=((l-s-2)>j)?j:( l-s);j>2;j--){for(i=(s<f)?0:s-f;i<s;i++){if((!(m=memcmp(d+i,d+s,j)))||((i+j)>l))break;}if( !m)break;}if(!m){if(s-g){for(k=s-g;k>n;k-=n){putchar(n);for(h=0;h<n;h++)putchar(d[g++]);} putchar(k);for(;k>0;k--)putchar(d[g++]);}putchar(0x80+(j<<2)+(s-i)/256);putchar((s-i)%256) ;s=(g=s+j)-1;}}putchar(l-s);for(i=s;i<l;i++)putchar(d[i]);return 0;} 下記データが並んだのフォーマット。 先頭バイトの*値*が0x80未満なら以降の*値*バイトが未圧縮。 0x80以上なら次のバイトと合わせて先頭ビットがフラグ(1=圧縮)、7-16ビットが 一致する相対位置、2-6が一致するバイト数。 これで復号も可能なデータになったはずだけど、バグがあるかも。
案の定、終了時の処理がバグってる。 ついでにターミナルの設定を間違ったみたいで、横が90字くらいあるぞ(w だめだ。今日は寝よ
148 :
39 :2001/03/14(水) 02:00
>うち(v5.6.0)だとちゃんと動いたっす。マップも >スクリプト内に埋めちゃってても7行で行けるんでは? エディットしやすさを優先したんですが、 よく見たら埋め込むスペースがありますね。 というわけで、ちょこちょこと無駄を省いて (代入後再評価できるのど忘れしてた。ジーザス、なんてこった) マップ込み5行倉庫番でし。 sokoban.pl----------------------- $p=35;$m='###########..$...._##.$.##.._##..$...._##.$....._##..$########..# ' .' #..##### #....._# ########';@b=(0,0,$s=10,0,-1,0,1,0,-$s,0);while($m=~/\$/ ){substr$t=$m,$p,1,'P';for(1..$s){print substr($t,0,$s,"")."\n";}print"\n";if(( $c=substr$m,$d=$p+($v=$b[<>]),1)eq'#'){next;}if($c eq'$'){if(($c=substr$m,$d+$v, 1)=~/#|\$/){next;}substr$m,$d,1,".";substr$m,$d+$v,1,$c eq'_'?'#':'$';}$p=$d;}
1 WIDTH40,25:CONSOLE0,25,0,1:COLOR5,32:PRINTCHR$(12);SPC(5);"<= SCORE":LINE(0,2) -(37,24),"■",3,B:M=-1730:V=2:FORT=1TO400:I=INP(0):V=-V*(I=255)+(I=253)*2-(I=247 )*2+((I=223)-(I=251))*120:M=M+V:IFPEEK(M)=32THENBEEP1:POKEM,135:PRINTCHR$(11);T: BEEP0:NEXT ワンラインあるけあるけゲームだよー。P8用。
150 :
39 :2001/03/14(水) 02:22
あああああっ、空白が勝手にまとめられてるし。再掲! sokoban.pl---------------- $p=35;$m='###########..$...._##.$.##.._##..$...._##.$....._##..$########..#....' .'..#..#####..#....._#..########';@b=(0,0,$s=10,0,-1,0,1,0,-$s,0);while($m=~/\$/ ){substr$t=$m,$p,1,'P';for(1..$s){print substr($t,0,$s,"")."\n";}print"\n";if(( $c=substr$m,$d=$p+($v=$b[<>]),1)eq'#'){next;}if($c eq'$'){if(($c=substr$m,$d+$v, 1)=~/#|\$/){next;}substr$m,$d,1,".";substr$m,$d+$v,1,$c eq'_'?'#':'$';}$p=$d;}
<script language="JavaScript"> &lt;!-- alert(" Λ_Λ \n ( ´∀`)\n ( )\n | | | \n (__)_) "); //--&gt; </script>
>>150 動いたよん(Perl5.6Win32) ヽ( ´ー`)ノ
153 :
*nix厨 :2001/03/14(水) 14:59
やっと7行になったよ
#include <stdio.h>
int e=31,f=1023,g=0,h,i,j,k,l=0,m,n=127,o,(*p)()=&putchar,s;char *d=0;main(){
while((s=getchar())-EOF){d=realloc(d,l+9);d[l++]=s;}memset(d+l,0,8);printf(
"%x\n",l);l+=8;for(s=0;s<(l-3);s++){j=(s>e)?e:s;for(m=1,j=(l-s-2>j)?j:(l-s);j>2
;j--){for(i=(s<f)?0:s-f;i<s;i++){if(!(m=memcmp(d+i,d+s,j))||i+j>l)break;}if(!m)
break;}if(!m){if(s-g){for(k=s-g;k>n;k-=n)r(o=n);r(o=k);}(*p)(128+(j<<2)+(s-i)/
256);(*p)((s-i)%256);s=(g=s+j)-1;}}}r(){(*p)(o);for(h=0;h<o;h++)(*p)(d[g++]);}
出力フォーマットは
>>146 と同じだが、先頭行に圧縮前サイズを出力するようになった。
これは終了時の処理が7行にまとまらなかったためで、オーバーランして圧縮し、
復号時に圧縮前サイズまで展開をする。この外道な仕様で勘弁して(w
154 :
*nix厨 :2001/03/14(水) 19:45
復号できたよ。
#include <stdio.h>
#include <stdlib.h>
int c,h,i,j,l,s=0;char *d=0;main(){if(scanf("%x\n",&l)-1)return 1;if(!(d=(char*
)malloc(l+8)))return 2;while((c=getchar())-EOF){if(c<127){for(i=0;i<c;i++){if((
h=getchar())-EOF){d[s++]=h;}else return 1;}}else{if((h=getchar())-EOF){h+=(c-
128)<<8;for(i=0,j=s-(h&1023);i<h
>>10 ;i++){d[s++]=d[j++];if(s>l)break;}}else
return 1;}if(s>l)break;}fwrite(d,1,l,stdout);return 0;}
フォーマット異常時の処理まで手が回っていないので、
>>153 の出力結果だけ
放りこむようにしてください。
155 :
デフォルトの名無しさん :2001/03/14(水) 21:47
>>153 -154
おぉ!すげーよ
バイナリもそれなりに圧縮するし、ちゃんと戻る(w
謝っとこ、何度も書き込むんで、ドキュソと思っていました。ごめん
157 :
デフォルトの名無しさん :2001/03/14(水) 23:11
>>153 -154
VisualC++6(Win32)で動作確認しました。
符号化、復号化共に、以下のコードを追加しました。
#include <fcntl.h> //_O_BINARY
main(){
_setmode( _fileno( stdin ), _O_BINARY );
_setmode( _fileno( stdout ), _O_BINARY );
...
バイナリデータをリダイレクトする場合、Windowsでは最初に
setmodeを実行しないとうまくいかない様です。(ほかに良い方法はあるかな?)
それにしても凄いプログラムですね。
158 :
デフォルトの名無しさん :2001/03/14(水) 23:25
159 :
>157 :2001/03/15(木) 00:08
今Windowsのコンソールで試したら、 ファイルの先頭が改行"\r\n"のデータに対してはなんかおかしくなるね。 scanfのせいだろうけど。
160 :
デフォルトの名無しさん :2001/03/15(木) 00:19
>158 >Sorry, right now you cannot enter the contest. >The International Obfuscated C Code Contest is closed. って書いてあるぞ。
161 :
tara :2001/03/15(木) 02:06
7行超簡易HTTPクライアントです。エラーチェックもほとんど無し。 Windows専用です。引数に数字でホスト名を入力(www.yahoo.co.jpなら 210.152.236.113)してください。デフォルトのインデックスファイルの 内容を取得します。リンクする時にWinsockのライブラリを含めてください。 #include <stdio.h> #include <winsock.h> main(int c,char **a){SOCKADDR_IN d;WSADATA w;char t[99],x[]="GET /\n\n"; int z;SOCKET s;WSAStartup(MAKEWORD(2,2),&w);s=socket(AF_INET,SOCK_STREAM,0);if( c!=2)return;d.sin_family=AF_INET;d.sin_port=htons(80);d.sin_addr.s_addr= inet_addr(a[1]);if(!connect(s,(PSOCKADDR)&d,sizeof(d))){send(s,x,7,0);Sleep( 5000);while(z=recv(s,t,99,0)){t[z]=0;printf("%s",t);}}closesocket(s);} HTTPヘッダなどはそのまま出てしまいます。
>>155 ハフマンの方が短くなりそうなので、ハフマンに挑戦してみます。
さすがに自信が無いのでsage
163 :
デフォルトの名無しさん :2001/03/15(木) 11:23
>>32 トリッキーの1氏、まともな変数名のを拝見したく。
是非お願い姿態。
164 :
トリッキーの1 :2001/03/15(木) 18:01
>>163 ご要望にお応えして。
最初から行数を減らすことを念頭に置いていたので、
あまりよろしくない部分もあるのでご注意。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
int i;
static int r; // 乱数用
switch( message )
{
case WM_PAINT:
{
hdc = BeginPaint (hWnd, &ps);
unsigned char *bitmap;
bitmap=new unsigned char[640*400*3];
HDC hmemdc;
hmemdc=CreateCompatibleDC(hdc);
HBITMAP hb;
hb=::CreateCompatibleBitmap(hdc,640,400);
BITMAPINFO bi;
// 最低でも以下の情報だけは指定する必要がある
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bi.bmiHeader.biWidth = 640;
bi.bmiHeader.biHeight = 400;
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biBitCount = 24;
bi.bmiHeader.biCompression = BI_RGB;
// 念のために精確なBITMAPINFOを取得しておく
GetDIBits(hmemdc,(HBITMAP)hb,0,400,0,&bi,DIB_RGB_COLORS);
for(i=0;i<640*400*3;i+=3)
{
// r:疑似乱数
// RGBすべてを同じ値にしてグレースケールにする
bitmap[i]=bitmap[i+1]=bitmap[i+2]=r
>>16 ;
r = (r * 9 + 5);
}
// dcにコピー
SetDIBitsToDevice(hdc,0,0,640,400,0,0,0,400,bitmap,&bi,DIB_RGB_COLORS);
DeleteObject((HBITMAP)hb);
DeleteDC(hmemdc);
delete bitmap;
EndPaint( hWnd, &ps );
InvalidateRect(hWnd,NULL,false);
break;
}
case WM_DESTROY:
PostQuitMessage( 0 );
break;
default:
return DefWindowProc( hWnd, message, wParam, lParam );
}
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
MSG msg;
WNDCLASS wndclass;
HWND hWnd;
if(!hPrevInstance)
{
// 古いWNDCLASSを使用(行数を減らすため)
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=NULL;
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=NULL;
wndclass.lpszClassName="Tax";
wndclass.lpszMenuName=NULL;
if(!RegisterClass(&wndclass))
return FALSE;
}
hWnd=CreateWindow("Tax","2ch",WS_OVERLAPPED|WS_SYSMENU
,CW_USEDEFAULT,CW_USEDEFAULT,640,400
,NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
while( GetMessage(&msg, NULL, 0, 0) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return msg.wParam;
}
165 :
158 :2001/03/15(木) 22:06
>>160 終わってたのか…。
読んでなかった。
じゃあ、
The 2CH Obfuscated C Code Contest
2OCCCでも作るかな。
じゃあ誰かとりあえず2occc.org取ってください(藁 2occc.???.comみたいなサブドメでも可。
167 :
*nix厨 :2001/03/16(金) 01:28
ハフマン圧縮(未完)です。
外道の技とアルゴリズム変更にまで手を染めたのですが、どうしても7行は無理でした。
とりあえず符号の生成までは7行でしたので、未完ながら努力の足跡書きこんどきます。
今回のは最低限のincludeもありません、コンパイルが通らない時は適当に付け加えてください。
q(int *a,int *b){return *a<*b?-1:1;}struct v{int i,b,h,n;}*v;struct{int n,i,e,k
;struct v v[63];}x[32]={0,},*a=x;main(){int b,i,j,l=0,m,n=1024;char *d=0;while(
(b=getchar())+1)a[(d=realloc(d,l+2))[l++]=b
>>4 ].n++,a[d[l++]=b%16].n++;for(i=0;
i<32;i++)a[a[i].i=a[i].v[0].i=i].e=1;qsort(a,16,n,&q);for(b=17,i=0;!x[i].n;i++,
a++)b--;while(2<b){qsort(a,b--,n,&q);for(j=1;j<3;j++)for(i=0,v=a[j].v;i<a[j].e;
i++)v[i].h|=(j%2)<<v[i].b++;m=a[1].e;memcpy(a->v+a->e,a[1].v,m<<4);memcpy(a->v+
m+a->e,a[2].v,496);a->e+=m+a[2].e;a->n+=a[1].n+a[2].n;memcpy(a+2,a,n);a+=2;}
/* ここからデバッグ用。つか、これ無しだと意味不明になる */
printf("huffman code\n");
{
int y,z;
for(y=0;y<a[0].e;y++){
if(a[0].v[y].i<16){
printf("%d ",a[0].v[y].i);
for(z=a[0].v[y].b-1;z+1;z--)
printf("%d",(a[0].v[y].h>>z)%2);
printf("\n");
}
}
}
}
7行プログラム良いなー。 普通なら上の見たく空白が潰れると鬱氏だけど、全然関係ないや(ワーィ!
169 :
デフォルトの名無しさん :2001/03/16(金) 02:12
>>167 すげー。凄すぎるぜアンタ!!
俺はアンタを抱きしめたいぜ!
男に抱きしめられても困る
って意見は却下。
170 :
ランバート :2001/03/16(金) 07:20
参戦したくて教科書片手に書いてみたけど、 オイラの頭じゃレイトレは無理ですぅ。 ヘボプログラマは参戦不可ですか? T.java import java.awt.*;public class T extends Frame{double B,A,D,m,X,Y,Z,R,L; int a=10000;public static void main(String a[]){T r=new T();r.setSize(255,255); r.show();}public void paint(Graphics g){for(int y=0;y<255;y++)for(int x=0; x<255;x++){int c=L(x-128,y-128);c=c<0?0:c;g.setColor(new Color(c,c,c)); g.drawLine(x,y,x,y);}}int L(int x,int y){B=-a*4;A=x*x+y*y+a;D=B*B-4*A*a*3; if(D>0){m=(-B+Math.sqrt(D))/(2*A);X=x*m;Y=y*m;Z=-100;R=Math.sqrt(X*X+Y*Y+Z*Z); X/=R;Y/=R;Z/=R;L=1/Math.sqrt(3);L=(X-Y-Z)*L*255;return(int)L;}return 0;}}
>>164 トリッキーの1氏、サンクス。
スレ的に終わったっぽい話題なのにすんまそん。
>>164 トリッキーの1氏、サンクス。
スレ的に終わったっぽい話題なのにすんまそん。
>>167 すげー、なんで動く?
PGが得意ってより、理解が深いんだろうな
変形ツリーでノード・ペアの確定と同時に符号まで振ってる
別なアルゴリズムと言って良いような…
174 :
ランバート :2001/03/16(金) 21:39
なんか違うんだよなぁ。 7行に収まらないし。 誰か本物のレイトレを見せてくれよぅ。 import java.awt.*;public class N extends Frame{double A,B,C,D,E,F,G,L,M,N,R,T, X,Y,Z,H=200;static void main(String[]a){N r=new N();r.setSize(200,200); r.show();}public void paint(Graphics g){for(int y=0;y<H;y++)for(int x=0;x<H; x++){int c =L(x-100,y-100);g.setColor(new Color(c,c,c));g.drawLine(x,y+20,x, y+20);}}int L(int x, int y){B=-H*H;A=x*x+y*y+H*50;C=(H-50)*H;D=B*B-4*A*C; if(D>0){R=(-B+Math.sqrt(D))/(2*A);X=x*R;Y=y*R;Z=-100*R;L=1/Math.sqrt(3); R=Math.sqrt(X*X+Y*Y+Z*Z);L=(X-Y-Z)*L/R;int h=(int)(((double)F(X,Y,Z,R))*L); return L>0?(h>0?h:(int)(L*255)):30;}return F(x,y,100,0);}int H(double x, double y, double z, double r){E=x;F=y;G=z-H;x/=r;y/=r;z/=r;T=-(E*x+F*y+G*z); x=2*x*T+E;y=2*y*T+F;z=2*z*T+G;return F(x,y,z,F);}int F(double x,double y, double z,double b){M=10000-b;N=y==0?0:M/y;return N>0?((((x*N>0?x*N+M/2:-x*N)%M) >M/2)^(((z*N+H)%M)>M/2)?100:200):0;}}
>>174 いや、十分すげーじゃん。その調子で頼むぜ!
176 :
60 :2001/03/17(土) 01:35
>>167 に触発されてRangecorderを製作中。
つか、ちぢまらね〜
>>176 これだけ圧縮物が集まると、後はブロックソートと外面のファイル管理さえあれば
立派に実用ツールですね
178 :
デフォルトの名無しさん :2001/03/17(土) 18:38
179 :
38 :2001/03/17(土) 19:45
>>178 MTFくらいなら俺でも出来そうだ(w。とりあえずencoderのみ。
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
main(){setmode(fileno(stdin),_O_BINARY);setmode(fileno(stdout),_O_BINARY);
int c,i,j,t,tbl[256];for(i=0;i<256;i++)tbl[i]=i;
while(EOF!=(c=getchar())){for(i=0;tbl[i]!=c;i++);t=tbl[i];for(j=i;j;
j--) tbl[j]=tbl[j-1];tbl[0]=t;putchar(i);}return 0;}
180 :
38 :2001/03/17(土) 20:12
>>179 改訂版。
引数無しで実行すると stdin から読んで stdout に吐くencoder。
第一引数を 'd' として実行すると decoder。
#include <stdio.h>
#include <io.h>
main(int C,char**V){setmode(fileno(stdin),1<<15);setmode(fileno(stdout),1<<15);
int c,i,t,tbl[256];for(i=0;i<256;i++)tbl[i]=i;while((c=getchar())-EOF){if(C>=2
&&*V[1]=='d'){putchar(t=tbl[c]);while(c--)tbl[c+1]=tbl[c];tbl[0]=t;}else{for(i=
0;tbl[i]!=c;i++);putchar(i);t=tbl[i];while(i--)tbl[i+1]=tbl[i];tbl[0]=t;}}
return 0;}
>>177 それなら7行超えるけど出力部も作りますかね。
でも4ビットのハフマンだから余り縮まないよ?
182 :
デフォルトの名無しさん :2001/03/18(日) 11:57
アーカイバーお願いします。
183 :
デフォルトの名無しさん :2001/03/18(日) 12:55
結局、そのDVDのプロテクトを解除するプログラムって どうやってDVDの再生するのよ。 どうやって使うのよ。 そこが抜けていると何にも役にたたないプログラムだよね。
184 :
名無しさん :2001/03/18(日) 14:12
いやあれは DVD の暗号がたった7行の、しかもperlスクリプトで 解けることで、プログラムの可能性を示す教育目的のプログラムだ。 それ言っては、プログラミングの解説本にあるようなアルゴリズム 解説のためのサンプルコードにケチを付けてるのと一緒。
185 :
デフォルトの名無しさん :2001/03/18(日) 14:37
暗号が解けるといったって、どこにDVDディスクを読みに行くコードがあるわけ? サンプルになってるの?
187 :
デフォルトの名無しさん :2001/03/18(日) 15:17
>>186 まあまあ、コードが理解できないようなかわいそうな奴なんだから、
そんなにきつい事言うなよ。
185=186=187=188 ネタ?
185=186=187=188=189=190 ネタ!
191 :
デフォルトの名無しさん :2001/03/18(日) 15:56
7行じゃDVDも再生できないしぃ コメントもついてないしぃ オンラインヘルプもついてないしぃ だっめっじゃっあぁぁぁぁん
7行でOSを書いてくれ。
>>191 とりあえず君がコードを読めない人間であることはよくわかった。
>オンラインヘルプもついてないしぃ
もはや意味不明。
まあまあ、またーりと行こうよ。
7行超えてますけど出力もする版のハフマン圧縮です。
出力部は、真面目に削ってないので入れた結果11行でした。
符号表は先頭から4ビットの符号長と可変長の符号の組が16個です。
int b,i,j,l=0,m,n=1024,c=0,p=7,h[32];r(int h,int b){for(b--;b+1;b--){c|=(h>>b)%
2<<p;if(!p--)putchar(c),c=0,p=7;}}q(int*a,int*b){return*a<*b?-1:1;}struct v{int
i,b,h,n;}*v;struct{int n,i,e,k;struct v v[63];}x[32]={0,},*a=x;main(){char*d=0;
while((b=getchar())+1)a[(d=realloc(d,l+2))[l++]=b
>>4 ].n++,a[d[l++]=b%16].n++;
for(i=0;i<32;i++)a[a[i].i=a[i].v[0].i=i].e=1;qsort(a,16,n,&q);for(b=17,i=0;!x[i
].n;i++,a++)b--;while(2<b){qsort(a,b--,n,&q);for(j=1;j<3;j++)for(i=0,v=a[j].v;i
<a[j].e;i++)v[i].h|=(j%2)<<v[i].b++;m=a[1].e;memcpy(a->v+a->e,a[1].v,m<<4);
memcpy(a->v+m+a->e,a[2].v,496);a->e+=m+a[2].e;a->n+=a[1].n+a[2].n;memcpy(a+2,a,
n);a+=2;}for(i=0;i<16;i++){for(j=0;j<32;j++){if(a->v[j].i==i){r(a->v[j].b-1,4);
r(a->v[j].h,a->v[j].b);h[i]=a->v[j].b;h[i+16]=a->v[j].h;break;}}}for(i=0;i<l;i
++)r(h[d[i]]+16,h[d[i]]);if(p-7)r(0,p);}
符号表は先頭から4ビットの符号長と可変長の符号の組が16個です。
その後に符号化したデータが入り、最後は0でパディングしてあります。
195 :
デフォルトの名無しさん :2001/03/18(日) 16:45
7行でエロゲーム希望。 画像も7行内にテキストで収めること。 アイコラは不可。
>>195 顔文字板のAAを使えばできそうな気も…
>>195 エロタイピング練習ソフトだ。
偽AI搭載で「いやよいやよも好きのうち」まで実装してみたぞ。
#include<stdio.h>
main(){
int c;while((c=getch())!=0x1B)
switch(c){
case' ':printf("いやっ\n");break;
case'\r':printf("そこはだめっ\n\a\a\a");break;
default:printf("書いていて悲しくなったのは隠しておきたい\n");}}
どうだ。7行で音まで出るぞ。
>>195 できた。
#include<stdio.h>
main(){printf("namco: (())\n");}
199 :
57行にせOS(i386) :2001/03/18(日) 21:44
[BITS 16] [ORG 0] jmp start msg00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db 'kaomozi dasitai yo...', 13, 10, 0 msg01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db 'dareka yatte hosii naa...', 13, 10, 0 msg02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db 'mou ascii na seikatu ha iyada!', 13, 10, 0 msg03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db 'haa.', 13, 10, 0 msg04&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db 'zya-ne.', 13, 10, 0 rebootmsg&nbsp;&nbsp;&nbsp;&nbsp;db 'nannka botan osite kure.', 13, 10, 0 message : &nbsp;&nbsp;&nbsp;&nbsp;lodsb &nbsp;&nbsp;&nbsp;&nbsp;or al,al &nbsp;&nbsp;&nbsp;&nbsp;jz done &nbsp;&nbsp;&nbsp;&nbsp;mov ah,0eh &nbsp;&nbsp;&nbsp;&nbsp;mov bx,0007 &nbsp;&nbsp;&nbsp;&nbsp;int 0x10 &nbsp;&nbsp;&nbsp;&nbsp;jmp message done : &nbsp;&nbsp;&nbsp;&nbsp;ret getkey : &nbsp;&nbsp;&nbsp;&nbsp;mov ah, 0 &nbsp;&nbsp;&nbsp;&nbsp;int 016h &nbsp;&nbsp;&nbsp;&nbsp;ret reboot: ;; reboot &nbsp;&nbsp;&nbsp;&nbsp;mov si, rebootmsg &nbsp;&nbsp;&nbsp;&nbsp;call message &nbsp;&nbsp;&nbsp;&nbsp;call getkey &nbsp;&nbsp;&nbsp;&nbsp;db 0EAh &nbsp;&nbsp;&nbsp;&nbsp;dw 0000h &nbsp;&nbsp;&nbsp;&nbsp;dw 0FFFFh xwait : &nbsp;&nbsp;&nbsp;&nbsp;call message &nbsp;&nbsp;&nbsp;&nbsp;call getkey &nbsp;&nbsp;&nbsp;&nbsp;ret start : &nbsp;&nbsp;&nbsp;&nbsp;mov ax,0x7c0 &nbsp;&nbsp;&nbsp;&nbsp;mov ds,ax &nbsp;&nbsp;&nbsp;&nbsp;cli &nbsp;&nbsp;&nbsp;&nbsp;mov ax,0x9000 &nbsp;&nbsp;&nbsp;&nbsp;mov ss,ax &nbsp;&nbsp;&nbsp;&nbsp;mov sp,0xffff &nbsp;&nbsp;&nbsp;&nbsp;sti &nbsp;&nbsp;&nbsp;&nbsp;mov si, msg00 &nbsp;&nbsp;&nbsp;&nbsp;call xwait &nbsp;&nbsp;&nbsp;&nbsp;mov si, msg01 &nbsp;&nbsp;&nbsp;&nbsp;call xwait &nbsp;&nbsp;&nbsp;&nbsp;mov si, msg02 &nbsp;&nbsp;&nbsp;&nbsp;call xwait &nbsp;&nbsp;&nbsp;&nbsp;mov si, msg03 &nbsp;&nbsp;&nbsp;&nbsp;call xwait &nbsp;&nbsp;&nbsp;&nbsp;mov si, msg04 &nbsp;&nbsp;&nbsp;&nbsp;call xwait &nbsp;&nbsp;&nbsp;&nbsp;call reboot times 510-($-$$) db 0 dw 0xAA55
200 :
199 :2001/03/18(日) 21:44
201 :
デフォルトの名無しさん :2001/03/18(日) 23:33
>200 つながりませんでした
202 :
デフォルトの名無しさん :2001/03/18(日) 23:34
あ、つながりました。
203 :
名無しさん :2001/03/19(月) 06:57
そーいえば昔、アスキーでプログラムコンテストしてなかったか? 1行部門、256バイト部門と1024バイト部門があって ほとんどが BASIC と機械語だったよーな
>>1 そんだけDVDのプロテクトがアホだったって事です。
改行を一切入れなければ1行プログラムだって可。
205 :
デフォルトの名無しさん :2001/03/20(火) 22:37
#include <dshow.h> int main(int C,char*V[]){IGraphBuilder *pB;IMediaControl *pC;WCHAR v[MAX_PATH]; if(1<C){CoInitialize(NULL);CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPR\ OC_SERVER,IID_IGraphBuilder,(void**)&pB);pB->QueryInterface(IID_IMediaControl,( void**)&pC);MultiByteToWideChar(CP_OEMCP,0,V[1],-1,v,MAX_PATH);pB->RenderFile(v ,NULL);pC->Run();MessageBox(NULL,"","",MB_OK);pC->Release();pB->Release();CoUn\ initialize();return 0;}} どっかの掲示板からのコピペっす.
つーか、#includeは1行でいいの?ってしょうがないか
207 :
デフォルトの名無しさん :2001/03/21(水) 03:11
ブラウザの”×”(閉じる)ボタンを非表示にできません。 JSでもダメみたいっす。どうにか制御できないもんでしょうか?
208 :
270 :2001/03/21(水) 04:50
すいません。スレチガイ。逝コウ。
209 :
ランバート :2001/03/21(水) 06:50
朝から頭の体操してます。 光が今ひとつだけど レイトレっぽくなったのではないでしょうか? でもオイラの頭じゃ7行は無理っス。 import java.awt.*;public class R extends Frame{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;}} static void main(String[]a){R r=new R();r.setSize(255,255);r.show();}public void paint(Graphics g){for(int y=0;y<255;y++)for(int x=0;x<255;x++){V A=new V(x-128,y-128,100);V B=new V(0,0,200);int c=L(A,B);g.setColor(new Color(c,c,c)) ;g.drawLine(x,y+20,x,y+20);}}double a,b,c,d,R;int L(V A,V B){a=(new V(A)).c(A); b=(new V(A)).c(B);c=(new V(B)).c(B)-10000;d=b*b-a*c;if(d>0){R=(-b+Math.sqrt( d))/a;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;int h=(int)(((double)H(N,A))*R);return R>0?( h>0?h:(int)(R* 255)):30;}return F(A);}int H(V N,V A){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;return F(N);}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;}}
210 :
名無しさん@お腹いっぱい。 :2001/03/21(水) 21:15
DVD複製防止を解除するプログラム DVDつきのwindows 98 があります さて、どうやって7行プログラムを実行 して、解除するのでしょうか? 恐らくここをみた人の8割が思っているはず
>>210 じゃぁ、あんたここにいる8割はアホだと思ってんの?
自分がアホだからって他人もアホだと思うのは大間違い
>>210 なになに? よく分からんが、実行の仕方教えてとかヘタレな話?
213 :
デフォルトの名無しさん :2001/03/22(木) 00:33
俺もヘタレだからヘタレなコードしか書けんが、 7行すれなんだからコードで語ろうぜ!
214 :
デフォルトの名無しさん :2001/03/22(木) 04:39
7行ごえ #include<windows.h> #include<math.h> int*P,y[1<<18],a=256,c,r,m[8],n,S=a/2,u,v;BITMAPINFO T={40,a,a,1,32};HWND g; float s,X,Y=-.57,Z,t,l,d;WINAPI WinMain(HINSTANCE I,HINSTANCE,LPSTR,int) {WNDCLASS w={67,DefWindowProc,0,0,I,0,0,0,0,"T"};RegisterClass(&w);HDC h=GetDC( g=CreateWindow("T","2ch",513<<19,0,0,a,a,0,0,I,0));while(GetMessage((MSG*)m,g,0,0)!=-1) {if(m[1]==15){s+=.1;Z=Y*cos(s);X=Y*sin(s);P=y;for(v=S;v>-S;v--){for(u=-S;u<S;u++) {d=9999-u*u-v*v;d>0?t=sqrt(d),l=sqrt(u*u+v*v+t*t),n=(X*u/l+Y*v/l+Z*t/l)*255,n=n<0?0:n: n=64;*P++=n;}}SetDIBitsToDevice(h,0,0,a,a,0,0,0,a,y,&T,0);}else DispatchMessage((MSG*)m); InvalidateRect(g,0,0);}return 0;}
>>210 ちょっとボク、VOBってしってる?
>>211 -212
210はわざわざageてくれたんだよ。
でもちょっと英語が苦手なんだよ。
たぶんスクリプトの実行方法からして分からないんじゃない?(w
アーカイバーは7行じゃきついか...
>>210 Win98にコピー対策なんぞあったか。
エラーセクタプロテクトも何もないと思ったが。
# シリアルなんぞコピー対策ではない
本来の使い方は、DVDからripしてきたvobに、
/usr/local/bin/perl unvob.pl < rip.vob > out.mpg
とかやる。
コードを読め。
コメントを読め。
218 :
名無しさん@お腹いっぱい。 :2001/03/22(木) 22:45
>217 来の使い方は、DVDからripしてきたvobに、 これはどうやるんでしょうか? <マジレス希望!>
219 :
デフォルトの名無しさん :2001/03/22(木) 22:56
220 :
デフォルトの名無しさん :2001/03/22(木) 23:03
オレはコードよめるぜって知ったかぶりしかいないが だれも7行プログラムの使用方法を知らないのであった。
221 :
デフォルトの名無しさん :2001/03/22(木) 23:03
DVDのプロテクトを解除できたらどうなるんだろう
まあ、217に使い方かいてあるし・・・
>>217 無駄無駄。たぶんDVDコピーしたいぜ教えてクンのPCにはPerlすら入ってないぜ。
要するに7行でリッパーを書けという話?
なあ、最近気づいたんだが218のような奴はMS−DOSすら使ったこと無いんでは? dir > abc.txt なんてコマンドも知らないんじゃ?
229 :
デフォルトの名無しさん :2001/03/23(金) 17:03
「シニス メテ」とかよくやったなぁ。 「ハシ」も比較的よくあったかも。 あぁ、時代が違うのか・・・
下げ忘れ 鬱逝
スナミ Syntax Error Ready ?. 0 Ready
vbsの自己生成スクリプト。cのやつのパクリだけど s="s=Z:wscript.echo replace(s,chr(90),chr(34)+s+chr(34))":wscript.echo replace(s,chr(90),chr(34)+s+chr(34))
234 :
デフォルトの名無しさん :2001/04/03(火) 22:56
age
なんか書け
236 :
デフォルトの名無しさん :2001/04/04(水) 04:21
10 PRINT "あげ"; 20 GOTO 10
237 :
デフォルトの名無しさん :2001/04/05(木) 23:08
/* efdtt.c Author: Charles M. Hannum <
[email protected] > */
/* */
/* Thanks to Phil Carmody <
[email protected] > for additional tweaks. */
/* */
/* Length: 434 bytes (excluding unnecessary newlines) */
/* */
/* Usage is: cat title-key scrambled.vob | efdtt >clear.vob */
#define m(i)(x[i]^s[i+84])<<
unsigned char x[5],y,s[2048];main(n){for(read(0,x,5);read(0,s,n=2048);write(1,s
,n))if(s[y=s[13]%8+20]/16%4==1){int i=m(1)17^256+m(0)8,k=m(2)0,j=m(4)17^m(3)9^k
*2-k%8^8,a=0,c=26;for(s[y]-=16;--c;j*=2)a=a*2^i&1,i=i/2^j&1<<24;for(j=127;++j<n
;c=c>y)c+=y=i^i/8^i
>>4 ^i
>>12 ,i=i
>>8 ^y<<17,a^=a
>>14 ,y=a^a*8^a<<6,a=a
>>8 ^y<<9,k=s
[j],k="7Wo~'G_\216"[k&7]+2^"cr3sfw6v;*k+>/n."[k
>>4 ]*2^k*257/8,s[j]=k^(k&k*2&34)
*6^c+~y;}}
238 :
デフォルトの名無しさん :2001/04/05(木) 23:09
239 :
デフォルトの名無しさん :2001/04/23(月) 21:00
あげ
240 :
デフォルトの名無しさん :2001/04/24(火) 02:25
> 七行プログラミング なんか俳句みたいなノリですね。
241 :
デフォルトの名無しさん :2001/05/19(土) 04:19
age
242 :
デフォルトの名無しさん :2001/06/02(土) 06:01
age
3ヶ月前に終ってるね
245 :
デフォルトの名無しさん :2001/06/02(土) 14:48
なんかこのスレみてたら昔MacPOWERでやってた HyperCard10行勝負!思い出したよ。 懐かしさと感動をあたえてくれたよ、このスレ…続きを見たいもんだ
246 :
デフォルトの名無しさん :2001/06/02(土) 16:04
>>245 見たいなら、なんか新たなネタを振るとよいと思われ。
>>246 JPEGとかMP3とか…
…ネタもまともにふれなくてごめん。
248 :
デフォルトの名無しさん :2001/06/04(月) 23:20
あ、結城さんだ。
250 :
デフォルトの名無しさん :2001/06/05(火) 02:46
昔あった dshar という DOS 版 shar の展開コードは7行じゃないけどすごかったよ echo T_OOWW3=XXWX5 2PY5w3P_-l.P-KD1Ep-OLPZ-pJP-pw40PQX5fsPu>%2 echo dsharTMPcmd:5Fe,xPQX-=.PQX-MQP-xx4_P5rjP5Z2P-jE,JP=>>%2 echo 5O2,APQX5R8P-rJPPRX5iBP-x=PRX5TsP59DHHP5rIHP-w64ZP=>>%2 echo 40-2APQX-MiP-trP5_WP-pBP51w,pPTYPZPZP__ox44Qx47HGSz2.r>>%2 echo 4OSitBnaz43PysRGiC.EGb5_h0PEGL7l8JwIm1E48WwPiOB7tLGM8O>>%2 echo Bur_GTvb6jJEXCzHHoE2feG.Oh71PZ64.ChRPFt4ltaz6URzCLAmDG>>%2 echo MHUckSHkJzB2An4ECsRFpANlGn4EWsRFpA0fm4CORzKX42.l8HGXGN>>%2 echo .UuBD_k8H47HGZGl4_kFUERn4IBL8dstltaVuerBCoC1PP9tWQ7l4c>>%2 echo k09.AOSvtOIVx4DKMHWIOB8J2n4D6P8tazLP4eSOIsRErOyutU3.BP>>%2 echo hoQsRErLsORoP4.o6hbzD24OGqu60a44Cp.1od8NgTVzCT4OBAv9cq>>%2 echo 814Whp.Ck8HCy4oauAk4Cn94B6UB2zCx4mDBzwpJ94.ByB.CMHYuX2>>%2 echo .Jp4KQLsRGh4pArv2MQTBOR1QRtOsO3nP4.nnhBsRFK8gHCOPD4dea>>%2 echo Yb.QFRlMQTKQ4nnhbnP4.J8v94PAtElta2jT9pWVab5jKz3Q4b8mCn>>%2 echo ndBsREXV2MRH6uu46cN5x.EQtuZpxoWQx47HG_zq.T4psORL7mFb.U>>%2 echo N1B48LGH2OCutFCq_1AQr4.PII47GnPP4t0KQt6KzBmCkvx_Kprp.4>>%2 echo l4BpMO4anCc46bj559A5lF4xP_RsLLMBg1aZWPnKbx.K.:>>%2 これででてきたものは COM 形式のファイルとして実行できる立派な「バイナリ」なんだけど。
251 :
デフォルトの名無しさん :2001/06/05(火) 07:27
昔に bat2com とかいう、DOS の bat ファイル → .com 化ファイルってあったね。 あの当時、凄い衝撃的で、あれでプログラム習おうって気になったし・・・・・
252 :
デフォルトの名無しさん :2001/06/05(火) 15:57
>>250 その展開コードは、たぶん同一作者の
"com2txt"ってソフト使ってると思われ。
最初の"T_OOWN3="って部分を逆アセンブルすると
綺麗なソースが出てくるのにショックを受けた覚えがある。
おかげでx86アセンブリ覚えました :-)
253 :
デフォルトの名無しさん :2001/06/06(水) 01:19
>>252 どういう原理なんですか? 普通に画面表示するbatにしか見えない・・・
本当に"画面表示"するbatかよくみてみなよ
>>250 1つ目のパラメーターには何が入るのだろうか…?
256 :
デフォルトの名無しさん :2001/06/06(水) 17:21
257 :
デフォルトの名無しさん :2001/06/06(水) 19:27
昔懐かしREM文に書いた機械語… じじいsage
259 :
デフォルトの名無しさん :2001/06/06(水) 22:15
>>257 PureDOSかW9x系列じゃないと動かないと思うさ。
NT/2000/Meは当然ながら無理だよ。
com2txtの方が感動がでかいと思う。
260 :
デフォルトの名無しさん :2001/06/09(土) 23:40
は は は は は は は
261 :
デフォルトの名無しさん :2001/06/15(金) 23:35
Lispで記号処理。
263 :
デフォルトの名無しさん :2001/07/04(水) 09:59
期待age
264 :
ho :2001/07/04(水) 22:38
VBどシロウトです。 FF9の穴掘り宝探しゲームをイメージしてください。 Dim XX, YY, c Private Sub Form_Load() Randomize: Form1.ScaleMode = 6: XX = Form1.ScaleWidth * Rnd: YY = Form1.ScaleHeight * Rnd: c = 0 End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Form1.Cls: c = c + 1: Print c & " 回目": If Abs(X - XX) < 1 And Abs(Y - YY) < 1 Then Print "当たり ": Form_Load Else Print "距離 " & Int(((X - XX) ^ 2 + (Y - YY) ^ 2) ^ 0.5) & "mm" End Sub
265 :
デフォルトの名無しさん :2001/07/14(土) 15:53
mata-ri age
266 :
デフォルトの名無しさん :2001/07/14(土) 16:35
# 今月のカレンダー ($d,$m,$y,$w)=(localtime)[3..6];print$y+1900,'/',++$m,"/$d\n",$"x(($w-=$d- 1)%7*3);printf"%2d%s",$_,++$w%7?$":$/for(1..28+($m-2?3-$m*.86%2:!($y%4)));
このスレの栄光と挫折 ネタスレ(スタート) ↓ Windows7行時代(最盛期) ↓ 標準C7行時代(衰退) ↓ ネタスレ
>>268 どこら辺が?それほどトリッキーには見えないけど
28+($m-2?3-$m*.86%2:!($y%4)) のあたりとか、縮めるのチョト苦労したのよ。 この無駄な努力をかってください。
1 #!/bin/csh -f 2 foreach dn (`/bin/ls |awk '{print $NF}'`) 3 @ cnt = `pwd|awk 'BEGIN{RS="/"}{print}'|wc -l` 4 while( $cnt ) 5 echo -n "| ";@ cnt-- 6 end 7 if( -f $dn ) then 8 echo "|--- $dn (F)" 9 else if( -d $dn ) then 10 echo "|=== $dn (D)";cd $dn;`basename $0` $1 $2;cd .. 11 endif 12end うーん。。。かなり削って12行。。。 shで書けば頭のまじない取れるし、もっと減るかも。。
273 :
272 :2001/07/17(火) 01:35
インデントが、なくなっちまった。。。
>>272 ホットゾヌではポップアップ内でだけインデントが反映される
275 :
デフォルトの名無しさん :2001/07/31(火) 05:27
age
276 :
デフォルトの名無しさん :2001/08/10(金) 03:11
age
277 :
デフォルトの名無しさん :2001/08/10(金) 04:18
# sorry this is all one line -- it didn't work on multiple lines for me eval ` ifconfig | sed -e ' /^[^[:space:]]*:[0-9]*/ { s|^\([^:]*\):\([0-9]*\).*$|X=x; TMP="\2"; [ "$device" != "\1" ] \|\| |g; b; }; /^[^[:space:]]/ { s|.*|X=x; [ 0 = 0 ] \|\| |g; b; }; /inet addr: [0-9]*\.[0-9]*\.[0-9]*\.[0-9]* *Bcast:[0-9.]* *Mask:[0-9.]*/ { s|^.*inet addr:\(\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\) *Bcast:\([0-9.]*\) *Mask:\([0-9.]*\).*$|eval " rdev_${TMP}_addr=\1; rdev_${TMP}_mb=\7_\6; rdevip_\2_\3_\4_\5=${TMP}; rdev_LIST=\\\\"\\\\$rdev_LIST \\\\${TMP}\\\\"; " \|\| |g; b; }; s|^.*$||g; ' ` X=x; 本当は改行を入れたらダメ /etc/sysconfig/network-scripts/ipup-aliases にこんなの書いてあった、、、すごいよぅ
278 :
デフォルトの名無しさん :2001/08/10(金) 04:34
↑ 何所よ??
279 :
N88BASIC :2001/08/10(金) 12:12
10 FOR I=1 TO 100:X=RND(100):Y=RND(100):PSET(X,Y),6:NEXT: X=0:Y=0:WHILE W<100 AND GET@(X,Y)<>0:PSET(X,Y),2:K$=INPUT$: S=1-CHR(K$)<>20:FOR S=S TO 0:Y=Y-1:NEXT:X=X+1:F=X>100:WEND: IF F THEN PRINT "クリア" ELSE PRINT "ゲームオーバー" N88Basicで障害物よけ1ボタンゲーム。 100個の障害物(点)があり、それをよける。スペースを押すと 上昇し、離すと下降。 N88BASICの命令を忘れてしまったので、以下の命令は勘でかいた。 PSET(X,Y),6 座標x,yに黄色いの点を描画 GET@(X,Y)<>0 画面上のx,yにある点の色が黒でなければ S=1-CHR(K$)<>20 K$のアスキーコードが&H20(=スペース)ならばSは0,でなければ1
280 :
279 :2001/08/10(金) 12:15
分解。 FOR I=1 TO 100 X=RND(100): Y=RND(100): PSET(X,Y),6: NEXT: X=0: Y=0: WHILE W<100 AND GET@(X,Y)<>0: PSET(X,Y),2: K$=INPUT$: S=1-CHR(K$)<>20: FOR S=S TO 0: Y=Y-1: NEXT: X=X+1: F=X>100: WEND: IF F THEN PRINT "クリア" ELSE PRINT "ゲームオーバー"
281 :
279 :2001/08/10(金) 12:17
>>279 ,280
まちがえた。これだとキー押してるときに何もせず
離しているときに上昇してしまう…
10 FOR I=1 TO 100:X=RND(100):Y=RND(100):PSET(X,Y),6:NEXT:
X=0:Y=0:WHILE W<100 AND GET@(X,Y)<>0:PSET(X,Y),2:K$=INPUT$:
S=1-CHR(K$)<>20:FOR S=S TO 0:Y=Y+2:NEXT:Y=Y-1:X=X+1:F=X>100:WEND:
IF F THEN PRINT "クリア" ELSE PRINT "ゲームオーバー"
282 :
迷路(らしきもの) :2001/08/10(金) 12:50
#include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]){ randomize(); struct _a { short s[82]; f(){int i;for(i=0;i<39;i++) s[i]=rand()&0x100?'/':'\';s[i]=0;} } d; for(int i=0;i<80;i++){ d.f();puts((char *)(d.s));}; return 0;} 実行例 /////\\\\/\/\\// \//\/\\////\/\\\ /\\\\\\\//\\\\\/ /\/\\\/\/\\\\\// ////\\/\\//\\/\\ /\/\\\\\\\/////\ \//\//\\////\/\\ \/\/\\\\//\/\/\\ /\\/\\//\\/\//\\ //\//\/\//\\/\\/ \////\\/\///\//\
>>279 ゴメン。あまり身が詰まってるように見えない。
多分このスレでは、訳わからんぐらい密度の高いコードが
期待されていると思われ。
284 :
デフォルトの名無しさん :2001/08/10(金) 17:15
こんなのは無理かい? ┌──┐ │┌┐│ └─┘│ ───┘
285 :
デフォルトの名無しさん :2001/08/10(金) 21:04
#include <stdio.h> #include <stdlib.h> int y=0;int main(int argc, char* argv[]){ randomize(); struct a{ short s[40]; a(){int x;for(x=0;x<39;x++) s[x]='/'+(((4410+ x*y/(x+y+1))%2)<<8); s[x]=0;y++;puts((char *)(s));}; } b[25]; return 0;} 乱数より規則あった方が楽しい \\\\\///////// \\//////////\\ \/////\\\\\\\\ \///\\\\\\\/// \//\\\\\////// ///\\\//////\\ //\\\/////\\\\ //\\\///\\\\\\ //\\///\\\\\// //\\///\\\//// //\\//\\\///// //\///\\\///\\
286 :
デフォルトの名無しさん :2001/08/10(金) 21:17
287 :
デフォルトの名無しさん :2001/08/10(金) 21:21
渦巻きも作れるよ
s[x]='/'+(((2+((x-20+((y-9)
>>9 ))
>>8 )+((y-9)
>>9 ) )%2)<<8);
//////\\\\\
//////\\\\\
//////\\\\\
//////\\\\\
//////\\\\\
\\\\\//////
\\\\\//////
\\\\\//////
\\\\\//////
こんなの出来た・・・・・パラメーターは・・・ \/\/\/\/\/\/\/\/\/\//\/\/\/\/\/\/\ \/\/\//\/\/\//\/\/\//\/\/\/\\/\/\/\ /\//\//\/\\/\\/\//\//\/\\/\//\//\/\ \//\\//\//\\//\//\\//\//\\/\\//\\/\ //\\///\\//\\\//\\///\\//\\///\\//\ \\\////\\\////\\\////\\\///\\\\///\ ///////\\\\\\\///////\\\\\\///////\ \\\\\\\\\\\\\\\\\\\\/////////////// \\\\\\\///////\\\\\\///////\\\\\\\/ ///\\\\///\\\\///\\\////\\\////\\\/ \\//\\\//\\///\\//\\///\\//\\\//\\/ /\\//\\/\\//\\/\\//\//\\//\//\\//\/ \/\\/\\/\//\//\/\\/\//\//\/\\/\\/\/ /\/\/\\/\/\/\\/\/\/\//\/\/\//\/\/\/ \/\/\/\/\/\/\/\/\/\//\/\/\/\/\/\/\/ \/\/\/\\/\/\/\\/\/\//\/\/\//\/\/\/
コードは特筆すべきではないけれど、実行結果は美しい…… コードにずいぶん余裕があるし、ここは一つグラフィック対応で作って下さい(笑
windows に書いても面白くないけど・・・リクエストだから
#include <windows.h>
int main(){ SIZE w; HANDLE d=GetDC(0); GetTextExtentPoint(d,"/",2, &w);
int e=GetSystemMetrics(0)/w.cx,f=GetSystemMetrics(1)/w.cy,hx=e/2,hy=f/2;
for(int y=0;y<f;y++){for(int x=0;x<e;x++){ short s[3]={0};
s[0]='/'+(((4096+(x-hx)*(y-hy)/7+((x-hx+((y-hy)
>>9 ))
>>8 )+((y-hy)
>>9 ) )%2)<<8);
TextOut(d,x*w.cx,y*w.cy,(char *)s,2); }}; Sleep(3333); return 0;}
たぶん289氏のリクエストは違うと思われ
アニメーションさせてみたい
293 :
290 :2001/08/11(土) 21:05
>>291 ? 普通にLINE文とかビットマップで書くって事?
だとしたら、マンデルブロみたいな絵の方が楽しいかもな
といってマンデルブロ書いてもオリジナライティ無いし・・・
テキストでって所がある意味面白いと思ったんだけど(貼り付けられるし)
たしかにオリジナラ? は大事かな・・・ じゃ ─│┌┐┘└├┬┤┴┼ これで考えてみよう 7行じゃ無理かな?
ああ、ただグラフィカルに美しい、かつ迷路、っていうのがいいなぁ……って。 でも何でもいいですよ、面白ければ(笑
296 :
デフォルトの名無しさん :2001/08/12(日) 00:15
その調子でテキスト版ディアブロ作ってくれ (つまりローグ)
298 :
デフォルトの名無しさん :2001/08/17(金) 12:38
299 :
デフォルトの名無しさん :2001/08/17(金) 16:33
#include<stdio.h> main(){ printf("age"); main() }
>>284 ヘタレでごめん、もっと綺麗に出来るかも・・
#include <stdio.h>
#include <stdlib.h>
const int n=11;int y=0;short l[]={' ','┌','┘','┐','─','│','└'};
int main(){struct a{short s[40];a(){int x,ny;for(x=0;x<=n;x++)
s[x]=l[(x<min(y,ny=n-y-(y>n/2)))+(x>max(y,ny))+(y!=x)*(x!=ny)*4+((x==y)+(x==ny)*3)*((y>n/2)+1)];
s[x]=0;y++;puts((char *)(s));}} b[n];return 0;}
あ、nは奇数限定かも・・・・
302 :
*nix厨 :2001/08/17(金) 19:48
懐かしいスレがあがってるので
>>297 で7行
int a[]={0,41,60,-1},*b=a,*c=a;char q[]="int a[]={0,41,60,-1},*b=a,*c=a;char q[\
]=\0#include <stdio.h>\0main(){for(;*b!=-1;b++){printf(q+*b);for(*c||putchar(34\
);-1<*c;c++){printf(q+*c);putchar(92);putchar(48);}*b||putchar(34)&putchar(59);\
putchar(10);}}\0";
#include <stdio.h>
main(){for(;*b!=-1;b++){printf(q+*b);for(*c||putchar(34);-1<*c;c++){printf(q+*c\
);putchar(92);putchar(48);}*b||putchar(34)&putchar(59);putchar(10);}}
実際にコンパイルする際は、行末の\で行を繋いでからやってね
include <stdio.h> #include <stdlib.h> short l[]={' ','┌','┘','┐','─','│','└'}; int const n=19;int y=0,main(){struct a{short s[n+2];a(){int w,z,x=0;while(x<=n) s[x++]=l[(x<min(y,w=n-y-(z=y>n/2)++)||x>max(y,w))+(y!=x&&x!=w)*4+((x==y)+(x==w)*3)*z]; s[x]=0;y++;puts((char*)s);}}b[n];return 0;} これが僕の限界・・・・ほとんど縮んでない。
>>303 いや結構頑張ってるよ
絵的に面白いのは出来ない?
ルールは1行79文字以下だった・・・。
include <stdio.h>
#include <stdlib.h>
int const n=19;short s[n+2],*l=(short*)" ┌┘┐─│└";int y=0,main(){
struct a{a(){int w,z,x=0;while(x<=n)s[x++]=l[(x<min(y,w=n-y-(z=y>n/2)++)||
x>max(y,w))+(x!=y&&x!=w)*4+((x==y)+(x==w)*3)*z]; s[x]=0;y++;puts((char*)s);}
}b[n];return 0;}
>>304 この経線使うと接続判定必要だよね(^^;
出来るかのなぁ・・・
適当にやってもこんな調子になっちゃんだよね。 ─┐─└└│───│└└┌┌─ ┐┘┌┐││───││└│┘┐ ┘┌┌└┘─────│─┌┌┘ ┌└└└│┌────┐└└└┌ └│││││┌──┐││││└ │││││││┌┐││││││ └│││││└─┘│││││└ ┌└└└│└───┘│└└└┌ ┘┌┌└┌─────┐└┌┌┘ ┐┘┌┘││───││─┌┘┐ ─┐┐└└│───│└└│┐─
だって、" ┌┘┐─│└"この配置自体にも意味があるからね(^^;
フォントに "_"を90度倒したものって無いのかな? あれば "/"と 同じ方式が使えるのに
>>308 それじゃあまったく意味がないっす。
何の為に斜め以外を使うんだか・・・
>>304 難しいことなにもしてないけどこんなのどう?
#include <stdio.h>
char* c = "┌┼┘└┐";
main(){ int i,j;
for(i=0;i<20;i++){ for(j=0;j<20;j++){
fwrite(c+((i*2+j)%5)*2,2,1,stdout);
} printf("\n"); }
}
┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐ ┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼ ┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└ ┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌ └┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘ ┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐ ┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼ ┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└ ┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌ └┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘ ┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐ ┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼ ┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└ ┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌ └┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘ ┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐ ┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼ ┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└ ┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌ └┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘
なるほど、パターンを最初っから作ってしまうのか(^^; コロンブスの卵的・・・
なんかレスついたのでもう個だけ。 パターン見つければいくらでもできるけど このスレの趣旨から外れそうなのでこのシリーズこれで最後。 public class CCC{ public static void main(String[] x){ String s="│┌┐││┌┘││└┘│└─┘└──┼──┐┌─┐"; for(int i=0;i<25;i++){ for(int j=0;j<25;j++){ int wk;System.out.print(s.substring(wk=(i*7+j)%25,wk+1)); } System.out.println(); } } }
│┌┐││┌┘││└┘│└─┘└──┼──┐┌─┐ ││└┘│└─┘└──┼──┐┌─┐│┌┐││┌┘ ┘└──┼──┐┌─┐│┌┐││┌┘││└┘│└─ ┐┌─┐│┌┐││┌┘││└┘│└─┘└──┼── ││┌┘││└┘│└─┘└──┼──┐┌─┐│┌┐ ┘│└─┘└──┼──┐┌─┐│┌┐││┌┘││└ ─┼──┐┌─┐│┌┐││┌┘││└┘│└─┘└─ ┐│┌┐││┌┘││└┘│└─┘└──┼──┐┌─ ┘││└┘│└─┘└──┼──┐┌─┐│┌┐││┌ ─┘└──┼──┐┌─┐│┌┐││┌┘││└┘│└ ─┐┌─┐│┌┐││┌┘││└┘│└─┘└──┼─ ┐││┌┘││└┘│└─┘└──┼──┐┌─┐│┌ └┘│└─┘└──┼──┐┌─┐│┌┐││┌┘││ ──┼──┐┌─┐│┌┐││┌┘││└┘│└─┘└ ─┐│┌┐││┌┘││└┘│└─┘└──┼──┐┌ ┌┘││└┘│└─┘└──┼──┐┌─┐│┌┐││ └─┘└──┼──┐┌─┐│┌┐││┌┘││└┘│ ──┐┌─┐│┌┐││┌┘││└┘│└─┘└──┼ ┌┐││┌┘││└┘│└─┘└──┼──┐┌─┐│ │└┘│└─┘└──┼──┐┌─┐│┌┐││┌┘│ └──┼──┐┌─┐│┌┐││┌┘││└┘│└─┘ ┌─┐│┌┐││┌┘││└┘│└─┘└──┼──┐ │┌┘││└┘│└─┘└──┼──┐┌─┐│┌┐│ │└─┘└──┼──┐┌─┐│┌┐││┌┘││└┘ ┼──┐┌─┐│┌┐││┌┘││└┘│└─┘└──
318 :
デフォルトの名無しさん :2001/08/19(日) 13:03
作品募集中
クリップボードの半角スペースを に、タブを 4つに変更する #include<windows.h> int WINAPI WinMain (HINSTANCE d, HINSTANCE e,PSTR f,int g){HGLOBAL a,b;BYTE *c; BYTE sp[24] = " ";OpenClipboard(NULL); a = GetClipboardData(CF_TEXT);if(!a)return 0;b = GlobalAlloc(GHND,10000); c = GlobalLock(b);lstrcpy(c,GlobalLock(a));GlobalUnlock(a);while(*c){if(*c==32||*c==9){ MoveMemory(c+(*c==32?6:24),c+1,lstrlen(c));MoveMemory(c,sp,(*c==32?6:24));}c++;} GlobalUnlock(b);EmptyClipboard();SetClipboardData(CF_TEXT,b);CloseClipboard();return 0;}
320 :
km :2001/08/19(日) 17:59
#include <stdio.h> #define R(x,y) (w[b&1][(s+L+80*y)%L/80*80+(s+80+x)%80]=='O') void main(){int a,b=0,s=0,L=80*24;char w[2][2001];do{w[0][s++]=((s%7)&(s%64))? 'O':' ';}while(s<L);while(1){printf("\x1B[2J%s",w[b&1]);getchar();s=0;do{a= R(-1,-1)+R(0,-1)+R(1,-1)+R(-1,0)+R(1,0)+R(-1,1)+R(0,1)+R(1,1);w[(b+1)&1][s]=( a==3)?'O':(a!=2)?' ':w[b&1][s];s++;}while(s<L);b++;}} トーラス世界型のライフゲームです。横80文字コンソール専用。VC++5.0で確認。 終了は ctrl+C です。リターンキーを押して1世代ずつ進めて下さい。 コンソールアプリとか詳しくないんで画面消去にエスケープシーケンス使ったり 入力待ちに getchar() とか使ってるけど,普通はどうやるんスかー?(´Д`)
7行って、ただむやみに横長にして7行に縮めるのアリですか? 本当の意味でスッキリ7行だと素晴らしいと思うが…
んー でもほら,もともと 1 さんが感動したDVDプロテクト解除のコードも 無理やり 7 行に押し込めたものだし〜・・・。
323 :
322 :2001/08/19(日) 18:15
あ,さっきのナシ。
>>12 さんがルール決めてますね。1行は79文字以内。
なるほど。余計なこと言ってごめんなさい。 …だって会社で短縮したプログラム書いてたら 「君のは行数短いけど横に長いね。」って 言われちゃったんだYO!(泣)
>>319 Perlなら同じ事をずっと短く単純で済む
#!perl
use Win32::Clipboard;package Win32::Clipboard;sub
t{$_=shift;s/\t/' ' x 4/ge;s/( +)/' ' x length($1)/ge;return $_}
Set(t(Get()));
ちぇっ、7行オーバーしちゃった。でもせっかくだから、ね。 内容はオセロ。 #include <stdio.h> #define R(x,v,w,y,z) r(i,c,x,(v>w?w:v))|r(i,c,-x,(y>z?z:y)) char n[]=" \\MD[REJQZBCIUY:<;A@^XP5]=`8cdkVbmFNWelGO9?_gf32>4on0H1i67jha";int i,c,p,s[8],m[64],y,z;d(){for(c=0;c<64;c++){printf("%s%s","┼\0●\0○"+m[c]*3,( 2-(c%8==7)-(c==63))+"\n\n");}}r(int i,int c,int d,int e){p=0;while(e-->0&&(c+= d,m[c]))if(m[c]-i)s[p++]=c;else{d=p;while(p)m[s[--p]]=i;return d;}return 0;}q( int i,int c){y=c%8,z=c/8;if(R(1,7-y,7,y,7)|R(7,y,7-z,7-y,z)|R(8,7,7-z,7,z)|R(9 ,7-y,7-z,y,z)){m[c]=i;d();}else q(3-i,c);}main(){m[28]=m[35]=1;m[27]=m[36]=2;d ();while(i++<60){q(2-i%2,n[i]-48);}}
328 :
デフォルトの名無しさん :2001/08/19(日) 23:25
n[]って打ち筋なんだね。 どうせだからAIも積んでもらい隊Na!
330 :
デフォルトの名無しさん :2001/08/21(火) 02:59
≫329 いやー、無理でしょう(藁 しかし、すごいなー、このページの人たちは。 僕も参戦してイイですかね?
>>330 そりゃもちろん(・∀・)イイ!! でしょ!!
参加者が増えてスレのびたほうがいいにきまってるし。
3目並べなら行けるかな?
3目並べ、対戦式で8行・・・鬱・・・・ トリッキーなとこ全然ないし(笑) #include <stdio.h> unsigned long b=0,z[]={0x15,0x1041,0x10101,0x1110}; char i,j,k,l,s[]=" ",c[]=" OX",q[]=" ?",d(long a,long b){return ((a&b)==b);} int main(){for(l=0;l<9;l++){puts("\n 012");for(i=0;i<3;i++){s[0]=i+'0';for(j=1;j<4;j++) s[j]=c[b>>(i*6+j*2-2)&3];puts(s);}i=1-l%2;if(d(b>>i,z[0])||d(b>>(i+6),z[0])|| d(b>>(i+12),z[0])||d(b>>i,z[1])||d(b>>(i+2),z[1])||d(b>>(i+4),z[1])||d(b>>i,z[2])|| d(b>>i,z[3])){putchar(c[++i]);puts(" won");return i;}q[0]=c[1-i+1];puts(q); scanf("%d,%d",&j,&i);b+=(l%2+1L)<<(j*6+i*2);}return 0;}
>>333 小さくすれば、トリッキーに見えます。
つーか、それってトリッキーじゃないんですか>3目並べ、対戦式
335 :
300 :2001/08/21(火) 20:28
やべ、バグだらけやった・・・・
これでいいかな?
誰か思考ルーチン組んで〜(笑)
#include <stdio.h>
unsigned long k,b=0,z[]={0x15,0x1041,0x10101,0x1110};char s[]=" 012",c[]=" XO",
q[]="O?\0X?",d(long a,long b){return ((a&b)==b);};int h,i,j,l,main(){for(l=0;l<9;l++){
puts(" 012");for(i=0;i<3;i++){s[0]=i+'0';for(j=0;j<3;j++)s[j+1]=c[b>>(i*6+j*2)&3];
puts(s);}h=l%2;if (d(k=(b>>h),z[0])||d(k
>>6 ,z[0])||d(k
>>12 ,z[0])||d(k,z[1])||d(k
>>2 ,z[1])||
d(k
>>4 ,z[1])||d(k,z[2])||d(k,z[3])){putchar(c[h+1]);puts(" won");return i;}
puts(q+h*3);scanf("%d,%d",&j,&i);b+=(2L-h)<<(i*6+j*2);}return 0;}
337 :
トリッキーの1 :2001/08/21(火) 23:55
面白い題材が上がっていたので復帰します(笑) 7行オセロ、人間対無能AIです。 #include <stdio.h> int p,t,a,d,c,v,i,m[90]={0},s,r[]={-10,-9,-8,-1,1,8,9,10};void k(){if(m[p]==0) for(i=0;i<8;i++){for(c=0,v=p+r[i];m[v]==3-t;v+=r[i])c++;if(c&&m[v]==t){a+=c;v= p;if(d)do m[v]=t,v+=r[i];while(m[v]!=t);}}}char*h="・○●\n";int main(){for(i= 1,m[41]=m[49]=2;i<10;m[i++*9]=3)m[40]=m[50]=t=s=1;for(;;a=d=0){for(p=9;p<82;++ p)k(),printf("%.2s",&h[m[p]*2]);if(a)for(d=a=s=p=8;a==8;k())t-2?(scanf("%d %d" ,&p,&i),p+=i*9):++p;else if(s)s=0,printf("pass");else break;t=3-t;}return 0;} もはやインデントを揃えた位では元のコードが読めなくなってしまっていますが、 もしコメント付き変数名まとものバージョンを欲しい方がいれば上げます。
338 :
トリッキーの1 :2001/08/21(火) 23:58
人間の入力は、「X軸 Y軸」と半角で入力します。 置けない場所を指定した場合は再度入力してください。 X=55などの変な入力をチェックしていないので、即クラッシュします。 両者置けなくなったらプログラム終了です。自分で数えてください。 もっとも、このコンピュータは激弱ですので負けようがないとおもいますが(笑 ・・・・・・・・ ・・・・・・・・ ・・・・・・・・ ・・・○●・・・ ・・・●○・・・ ・・・・・・・・ ・・・・・・・・ ・・・・・・・・ 3 5 ・・・・・・・・ ・・・・・・・・ ・・・・・・・・ ・・・○●・・・ ・・○○○・・・ ・・・・・・・・ ・・・・・・・・ ・・・・・・・・ ・・・・・・・・ ・・・・・・・・ ・・・・・・・・ ・・●●●・・・ ・・○○○・・・ ・・・・・・・・ ・・・・・・・・ ・・・・・・・・ 1 1 3 3 ・・・・・・・・ ・・・・・・・・ ・・○・・・・・ ・・○○●・・・ ・・○○○・・・ ・・・・・・・・ ・・・・・・・・ ・・・・・・・・ ・・・・・・・・ ・・・・・・・・ ・・○・・・・・ ・●●●●・・・ ・・○○○・・・ ・・・・・・・・ ・・・・・・・・ ・・・・・・・・
すごひ
むむむ・・・・変なことするより配列素直に使った方が良いのかな?? ちょっと悔しい・・・・ さすがです。
>>337 うわ、マジでオセロですか?コンピュータと対戦ですか?
信じられない・・
つーかinclude含めて7行だし。
>>337 うぁ、凄いー!!
今コード展開してるんですが、、、あまりに凄すぎて笑えてくる
見るべきところの多いコードで、参考になりまくりだ、ありがとう。
344 :
トリッキーの1 :2001/08/22(水) 00:42
>>340 =300
このスレの初期の頃の砂嵐プログラムで、効率的な削り方を覚えました。
あれ、今年の3月だったんだなぁ。懐かしいというか(笑)。
>>343 ありがとうです。番兵を駆使してとにかくif文から逃げました。
後はもう小手先のテクニックでひたすら1文字ずつ……。
途中の三項演算子のトリックに気付いて、やっと7行が見えましたね。
>>337 等幅で見てたらなんか芸術を感じた
コードに圧倒された気分だ。とにかくすげぇ
346 :
デフォルトの名無しさん :2001/08/22(水) 02:34
感動age
本当にどうでもいいがグローバル h は消去できるね しかし文字数を減らすと綺麗に7行にならない。 すごい 感動した
348 :
デフォルトの名無しさん :2001/08/22(水) 03:33
sageさせるかぁぁぁぁぁ!!!!!!!!!
349 :
デフォルトの名無しさん :2001/08/22(水) 04:44
今までちょっといんちきだったけど、正真証明、1行79字以内7行だと思う。
行き詰まったので次のネタ探し(^^;
#include <stdio.h>
long k,b=0,z[]={0x15,0x1041,0x10101,0x1110};char s[]=" 012",d(long a,long b){
return ((a&b)==b);};int h,i,j,l,main(){for(l=0;l<9;l++){puts(" 012");for
(i=0;i<3;i++){s[0]=i+'0';for(j=0;j<3;j++)s[j+1]=" xo"[b>>(i*6+j*2)&3];puts(s);}
if(d(k=(b>>(h=l%2)),z[0])||d(k
>>6 ,z[0])||d(k
>>12 ,z[0])||d(k,z[1])||d(k
>>2 ,z[1])
||d(k
>>4 ,z[1])||d(k,z[2])||d(k,z[3])){puts("x won\0o won"+h*6);return h;}
puts("O?\0X?"+h*3);scanf("%d,%d",&j,&i);b+=(2L-h)<<(i*6+j*2);}return 0;}
353 :
トリッキーの1 :2001/08/22(水) 11:25
皆さん反応サンクスです。エンジニア冥利につきます(笑)
>>347 マジで盲点でした。なるほど、確かにその通りです。
やっぱり一人でやるとどこかに盲点が出来るな……。
参考になりました。
>>350 ,351
次にsageで載せておきます。参考になれば幸いです。
int put,turn,all,done,pass,count,cur,i, // 盤状態:横9*縦10で、使用は8*8 // 0:無し 1:1player 2:2player 3:改行 // y*9+xというイメージ。0行目と9行目は番兵 map[90]={0}, // 盤を走査する場合、縦横斜め方向に向かうために足されるべき数 dir[]={-10,-9,-8,-1,1,8,9,10}; void check() // putに駒を置いた場合ひっくり返せる枚数をallに足す { if(map[put]==0) for(i=0;i<8;i++) // 8方向走査 { // dir[i]の方向の相手のコマの数を確認 for(count=0,cur=put+dir[i];map[cur]==3-turn;cur+=dir[i]) count++; if(count && map[cur]==turn) // 1枚以上存在し、その上端が自分のコマだったら { all+=count; cur=put; if(done) // doneがtrueの場合は、実際にひっくり返す do map[cur]=turn,cur+=dir[i]; while(map[cur]!=turn); } } } // mapに対応するオセロ駒&改行 char *h="・○●\n"; int main() { // 初期化 for(i=1,map[41]=map[49]=2;i<10;map[i++*9]=3) map[40]=map[50]=turn=pass=1; /* for(i=1;i<10;i++) map[i*9]=3; map[9*4+4]=map[9*5+5]=1;map[9*4+5]=map[9*5+4]=2; turn=pass=1; */ for(;;all=done=0) // ループのたびにallとdoneを初期化(セミコロン1個削除するため) { // 盤の表示。今回のデータ構造だとこれで表示できる // ついでにdone=0でcheckを呼び、何枚駒を置けるのチェック for(put=9;put<82;++put) check(),printf("%.2s",&h[map[put]*2]); if(all) // 1枚でも駒が置けた場合はcomは左上から走査、人は置けるまで繰り返す // 置けた(=allの値が変わった)らturn終了 for(done=all=pass=put=8;all==8;check()) turn-2?(scanf("%d %d",&put,&i),put+=i*9):++put; else if(pass) // 駒を置けない。s=0にしてフラグを立てる pass=0,printf("pass"); else // 両者とも駒を置けないので終了 break; turn=3-turn; // turn交代:1->2,2->1 } return 0; }
356 :
デフォルトの名無しさん :2001/08/22(水) 15:12
作品熱烈募集中
357 :
デフォルトの名無しさん :2001/08/22(水) 15:52
ネタ募集中・・・
358 :
デフォルトの名無しさん :2001/08/22(水) 18:13
7行で高速なアルファブレンドよろしく。
359 :
デフォルトの名無しさん :2001/08/22(水) 18:44
>>358 曖昧すぎるよ
1行で書けるネタだから7行に入らないだろうってくらい条件あげてね
360 :
デフォルトの名無しさん :2001/08/22(水) 18:53
358じゃないけど条件を付けてみよう。 AA でアルファブレンド」ってのはどう?
361 :
デフォルトの名無しさん :2001/08/22(水) 21:22
7行でタブブラウザーってできるでしょうか。
362 :
デフォルトの名無しさん :2001/08/22(水) 21:38
なんかいまさらだけど、すごいのが出てるね。
337、このトリッキーさでバグがなさげなのも評価したい。
>>360 アルファブレンドというネタ自体がイマイチ。
元絵とかの入力も全て含めて7行っていうネタの方がよろしい。
で、じゃあネタ出せといわれるとやっぱり困るんだけどね。
何かパズルネタとかかなぁ……
>>361 前2chで、HTAの極小ブラウザを見た気がする。
…どのスレだったっけか。
364 :
デフォルトの名無しさん :2001/08/22(水) 22:02
>>362 -363
http://piza.2ch.net/tech/kako/982/982930049.html の30番だね。ソースを転載すると、
// 以下転載
scrbrwsr.hta
-------------------------------------------------
<!-- Script Browser 777 by IUnknown -->
<HTML><TITLE>Script Browser 777 by IUnknown</TITLE>
<STYLE>
BODY{background=MENU;border=no}
#addrbar{width=532px}
#btn {width=30px;height=20px}
</STYLE>
<SCRIPT language="JavaScript">
var WB;
function InitWB(){
WB=document.all.tags("IFRAME").WB;
CT=document.body}
function ResizeWB(){
WB.style.width=CT.clientWidth-20;
WB.style.height=CT.clientHeight-50;
addrbar.style.width=CT.clientWidth-60}
function NaviWB(){WB.navigate(addrbar.value)}
</SCRIPT>
<BODY onload="InitWB()" onresize="ResizeWB()" oncontextmenu="return false" scroll="no">
<INPUT type="text" id="addrbar"> <INPUT id="btn" onclick="NaviWB()" type="button" value="GO">
<IFRAME id="WB" style="width:572px;height:355px"></IFRAME></BODY></HTML>
-------------------------------------------------
ファイル名は別に何でも構わないが拡張子だけは hta に
しておくこと。関連付けのないファイルアイコンになるが
ダブルクリックすればブラウザは起動するはずだ。
366 :
デフォルトの名無しさん :2001/08/22(水) 22:14
7行で「まともな」迷路ってまだだれもやってない?
367 :
デフォルトの名無しさん :2001/08/22(水) 23:29
7行シェル!
ごめんまちごうた s/シェル!/シェルスクリプト/ っていうかスクリプト言語作って。7行で。 ネイティブコンパイルできればなおヨシ。
>>368 lisp系だったらできるかもしれないが。
よくわかってないで発言してる?
あるいはネタかな。
いや。本当はさ、command.com代替品作って欲しかったんだよ。 でもスクリプトの方が面白そうかなぁ・・・なんて思ってさ。 ごめんな。日本語ヘタで。
ネタ欲しいですね〜。オセロネタは327さんにホント感謝。
7行でタグブラウザを実現するには、
>>364 さんの様に
IE系のスクリプトで書く必要がありそうですね。
タグをどのように実装するかがポイントかな。
シェルスクリプトは面白い物が作れなさそうです。というのも、
ある程度の標準ライブラリ的要素がないと出来ても面白くないし、
そういう物をつくっているとどの段階で「完成」と言えるのか
わからないし、機能を削って行数を得るのは美しくないですからね。
もはや時代遅れネタなのですが、6行で出来たのでアップします。
そろそろバグがありそうな気もしますが、
仮にあったとしても、もはや普通にデバッグ出来ません。
/* othello by Tax */
#include <stdio.h>
int*i,p,t,a,d,v,m[91]={-10,-9,-8,-1,1,8,9,10},s;void k(){if(m[p]==0)for(i=m;*i
;i++){for(v=p+*i;m[v]==9-t;v+=*i);if(v-p-*i&&m[v]==t&&(s=a=v=p,d))do m[v]=t,v
+=*i;while(m[v]-t);}}main(){for(m[40]=m[50]=s=t=3,m[41]=m[49]=6;s-1;a=d=0){for
(p=8;++p<82;printf("・\0○\0●\0\n"+m[p]))p%9?k():m[p]=9;for(a?d=a=p=9:s?s=0,
puts("pass"):s++;a==9;k())t-6?scanf("%d%d",&p,&v),p+=v*9:++p;t=9-t;}return 0;}
373 :
デフォルトの名無しさん :2001/08/23(木) 01:44
>>372 一段とトリッキーに・・・本領発揮っすね。
展開しても、見慣れているC言語だとは思えないんですけど。
print "Hello" print "Hello" print "Hello" print "Hello" print "Hello" print "Hello" print "Hello"
376 :
デフォルトの名無しさん :2001/08/23(木) 04:14
レイトレはどうなったのさぁ。
さりげなく
>>174 に素敵なのがある気がするぞ。7行になってないけど。>レイトレ
378 :
デフォルトの名無しさん :2001/08/23(木) 21:54
BASICのインタプリタ作ってください。 七行で。
7行ってことは、80*7=560文字 BASICの予約語だけで何文字かな?(笑
>>379 -380
じゃあサブセットでどうよ。
・行番号は00から99行まで(00,01,02...99)
・制御構文はGOTOとIF-THENのみ
・変数は整数のみ
・変数名は二文字
・内蔵関数は、GETとPUTのみ
GET aa : aaに数を入力させる
PUT aa : aaの内容を出力する
382 :
デフォルトの名無しさん :2001/08/24(金) 00:35
その仕様書も7行かいw
>>382 + 狙ってなかったんだけどね。
>>383 MODを%に割り当てよう。aa = bb % 5
もちろん即値は使えないとダメだよん。
それ以外はBASIC準拠でいいんじゃない?
対戦オセロに刺激されたので参戦。 マインスイーパです。でも、ここまでしか出来なかった。無念。 起動後、「横 縦 爆弾の数」の順で入力し、「x軸 y軸」で指定。 98SE、Borland C++ 5.5.1で確認。サイズ固定とかならもうちょい行けるけど。 #include <iostream.h> int u,a,b,w,h,m,*f,o[8],x,y,n,i,j;void C(int n){int&c=f[n];if(c<10)if(!(c&16)) {c|=16;m--;if(c==16)for(int r=0;r<8;r++)C(n+o[r]);}}void D(){for(i=0;i<a;){ printf("%c ","??????????######012345678@######"[f[i++]]);if(i%u==0)puts("");}} main(){cin>>w>>h>>b;if(b<w*h){srand(time(NULL));u=w+2;a=u*(h+2);f=new int[a]; m=w*h;o[0]=-u-1;o[1]=-u;o[2]=-u+1;o[3]=-1;o[4]=1;o[5]=u-1;o[6]=u;o[7]=u+1;for (i=0;i<a;i++){x=i%u;y=i/u;f[i]=x&&x<=w&&y&&y<=h?0:10;}for(i=0;i<b;i++){do n= rand();while(n>=a||f[n]>=9);f[n]=9;for(j=0;j<8;j++){int&c=f[n+o[j]];if(c!=9) c++;}}for(;;){D();cin>>x>>y;C(n=y*u+x);if(f[n]==(9|16)){puts("(T_T)");break;} if(m==b){puts("(^_^)");break;}}D();delete f;}}
386 :
デフォルトの名無しさん :2001/08/24(金) 02:26
>>385 ・includeにstdlib.hとtime.hが必要
・main関数にreturnがない
C++規格のコンパイラだとエラーになる。
しかしネタとしてはかなり面白い部類だし、
なんだか縮めがいがありそうな内容だね。
このネタで
>>337 さんの参戦を期待したい
>>386 さっそく指摘が!!
サンクスです。
いやー、BCC32でこれで通っちゃったからいいかなーと(笑)
分かってたけど、エラーも何も出なかったので。
少しでも削りたかったからだけど、やっぱりまずいですよねぇ。
もちっと色々考えてみます。ハイ。
388 :
デフォルトの名無しさん :2001/08/24(金) 09:07
#includeを1行にするのは酷すぎる……
389 :
デフォルトの名無しさん :2001/08/24(金) 09:25
インタプリタはJavaScript類なら可能かもしれないけど 面白くないぞ C言語だと ( ) + - * / の括弧+四則演算( *と/ 優先付)でも難しいと思う という事でお題 C言語で int fourStrToInt(char *str) を書け
390 :
デフォルトの名無しさん :2001/08/24(金) 11:08
>>389 fourStrToIntの仕様を書いてくれー、google検索したけど見つからない
#include <stdio.h> #include <stdlib.h> main(){printf("int fourStrToInt(char *str)");return EXIT_SUCCESS;}
>>389 str に数式を書いておいて、計算をして返す関数ってこと?
>>385 マインスイーパか、なかなか面白そうなネタですね。
確かにサイズ、爆弾の密度固定にすれば7行に収まるかもですね…
formulaStrToInt、という事か… アルゴリズムの基礎として知っているべき内容ではあるが、7行ねぇ… 再帰を使わずに実装しないと無理かな、やぱ
394 :
k|m :2001/08/25(土) 10:34
これを縮めても7行には収まりませんでした。 やっぱし再帰使うと無理っすか。。。 #include <stdio.h> typedef int FT; char *s; char C(){ // char (except space) while(*s==' '||*s=='\t') ++s; return *s; } FT N(){ // number char g=0; FT r=0; if(!C()) return 0; if(*s=='-') g=*s++; else if(*s=='+') ++s; C(); while(('0'<=*s)&&(*s<='9')){ r*=10; r+=(*s)-'0'; ++s; } return (g!='-')?r:-r; } FT E(); // prototype FT F(){ // factor FT r; if(!C()) return 1; if(*s=='('){ ++s; r=E(); s++; return r; } return N(); } FT T(){ // term FT r; char g; if(!C()) return 0; r = F(); C(); while(*s=='*'||*s=='/'){ g=*s++; if(g=='*') r*=F(); else if(g=='/') r/=F(); C(); } return r; } FT E(){ // exp FT r; char g; if(!C()) return 0; r = T(); C(); while(*s=='+'||*s=='-'){ g=*s++; if(g=='+') r+=T(); else if(g=='-') r-=T(); C(); } return r; } void main(){ char i=0, a[128]; while(a[i]="-3 + 12/ (( - 3) - 1)"[i])++i; s=a; printf("%d",E()); } 参考:C言語による最新アルゴリズム事典 / 奥村晴彦 著
あれれ? char i=0, a[128]; while(a[i]="-3 + 12/ (( - 3) - 1)"[i])++i; じゃなくて char a[] = "-3 + 12/ (( - 3) - 1)"; でいいのに・・・
>>394 のを無理矢理圧縮してみた。
bcc32 5.5.1 でしかコンパイル通ることを確認してないっす。
#include <stdio.h>
char*s,a[999];int e(),c(){while(*s==32||*s==9)s++;return!*s;}int n(){int r=0,g=
0;if(c())return 0;if(*s==43||*s==45)g=*s++;for(c();47<*s&&*s<=57;r=r*10+*s++-48
);return g-45?r:-r;}int f(){int r;return c()?1:(*s-40?n():(s++,r=e(),s++,r));}
#define m(N,U,P,Q,R,S) int N(){int r,g;if(c())return 0;r=U();c();while(*s==R||\
*s==S){g=*s++;if(g==R)r##P##=U();if(g==S)r##Q##=U();c();}return r;}
m(t,f,*,/,42,47)m(e,t,+,-,43,45)int main(){s=gets(a);return !printf("%d",e());}
式は標準入力から998文字以内で入れてください。
397 :
縮め君 :2001/08/25(土) 14:40
VC++でも大丈夫なように修正…。 #include <stdio.h> char*s,a[999];int e();int c(){while(*s==32||*s==9)s++;return!*s;}int n(){int r= 0,g=0;if(c())return 0;if(*s==43||*s==45)g=*s++;for(c();47<*s&&*s<58;r=r*10+*s++ -48);return g-45?r:-r;}int f(){int r;return c()?1:*s-40?n():(s++,r=e(),s++,r);} #define m(N,U,P,Q,R,S) int N(){int r,g;if(c())return 0;r=U();c();while(*s==R||\ *s==S){g=*s++;if(g==R)r##P##=U();if(g==S)r##Q## =U();c();}return r;} m(t,f,*,/,42,47)m(e,t,+,-,43,45)int main(){s=gets(a);return !printf("%d",e());}
398 :
394 :2001/08/25(土) 15:43
>>396 -397
短KEEEeeeeee(゚Д゚)感動したっす。
ちなみに関数 n() (
>>394 では N()) の中身をちょこっといじくって
各関数や変数をdouble型にするだけで,小数も扱えるんですよね。
これは挑戦あるのみっすね。笑い
相変わらずすげぇや(゜д゜)
defineの使い方が目からウロコ(゚Д゚)
401 :
sage :2001/08/26(日) 02:08
最近流行りのread.cgiを七行にまとめれ
402 :
ツール・怒・名無しさん :01/08/26 14:38
/*何とか7行で収まりました。397サンに比べると素直なコーディングと思います。*/ #include <stdio.h> char b[99],c[99],i,*p;S(){int r=E();if(*p==43)p++,r+=S();if(*p==45)p++,r-=S(); return r;}E(){int r=T();if(*p==42)p++,r*=E();if(*p==47)p++,r/=E();return r;}K() {for(;*p==32||*p==9;p++);}T(){int r;K();if(*p==40)p++,r=S(),p++;if(*p==45)p++,r =-T();if(*p==43)p++,r=T();if(c[*p])for(r=0;c[*p];r=10*r+*p++-48);K();return r;} main(){for(i=48;i<58;c[i++]=1);while(1)p=gets(b),printf("[%d]\n",S());}
403 :
デフォルトの名無しさん :01/08/26 15:56
上記に方々、助けてください。お願いします。 <お題:小町算(C言語)> 1,2,3,4,5,6,7,8,9(数字の並びは固定)である。 これらの数の間に+、−、何も入れないという演算子をいれて、計算 する。そして、計算結果が100になる組み合わせを、すべて表示する プログラムを作成せよ。100になるのは、12とうりのはず。 (夏休みの課題。今のところ27行。) <注意> 1行に2文以上書かない。 ヘッダー、DLL,COM,など、ソースレベルおよびバイナリレベルの外部ルーチン は禁止する。 ソースコードは、すべてカウントする。(コメント、ヘッダなど) プログラムは、コンソールアプリケーションとする。 入出力は、ストリーム入出力を使用する。 誰かたすけて〜。小町算中毒に・・・
405 :
デフォルトの名無しちん :01/08/26 17:50
やったーーーー!! 1行風呂グラム完成ーーーーーーーー!! #include <stdio.h>main(){for(;;) printf("(・∀・)ジサクジエンデシタ! ");}
406 :
デフォルトの名無しさん :01/08/26 17:52
いや、2行だ。 #include <stdio.h> void main(void){for(;;) printf("(・∀・)ジサクジエンデシタ! ");}
407 :
397 :01/08/26 18:41 ID:m/MpNQtE
>>402 すげー、つーか、あんた7行どころか6行やん!
408 :
300 :01/08/26 19:13 ID:cBHXyQ9g
>>402 でも、未宣言の関数呼んだりしてるし
これって構わないの??
.c なら大丈夫だっけ?
409 :
デフォルトの名無しさん :01/08/26 21:08 ID:fBf5GSTg
>>408 構わないよ。warningは出るけど無視。
リンカが帳尻あわせてくれる。
410 :
布団圧縮袋さん :01/08/26 21:19 ID:279bywtU
#include<stdio.h>main(){printf("げろしゃぶ");}
411 :
ツール・怒・名無しさん :01/08/26 23:10 ID:dHIzLWCQ
そーいえばgccで(未宣言関数を使用してもウォーニングが出ない) foo(){int a=hoge();} double hoge(){return 0.1;} とやってaの値が壊れてるぞと騒いでる新人がいたな。。。
ウォーニングと叫ぶ新人さん萌え
間違っちゃいないけどな。
関数はintを返すのです!! それ以外を返すなんてやだぃ!!
415 :
389 :01/08/27 10:00 ID:bSwtBedY
>>396 >>402 すごいなあ、四則演算でも厳しいと思ったんだけど・・
・・代入有(変数付)でもいけたかもしれないね。
文字列で四則演算して整数を返せって課題だから#includeやmainは不要だから・・・
じゃあ次の課題
C言語で vprintf か vsprintf を内部関数を呼ばずに書けってのは?
浮動小数点有 だと無理だから
% [flags] [width] type_char
type_char
d 整数 符号付き 10 進整数
i 整数 符号付き 10 進整数
o 整数 符号なし 8 進整数
u 整数 符号なし 10 進整数
x 整数 符号なし 16 進 int(a,b,c,d,e,f を使用)
X 整数 符号なし 16 進 int(A,B,C,D,E,F を使用)
c 文字 1 つの文字
s 文字列ポインタ ヌルターミネータを検出するか,精度に達するまで,文字を出力する
% なし % 文字がプリントされる
flags
- 結果を左詰めで維持し,右側に空白を埋込む
ライセンスが理解不能何だけど、 シェアウェア作っていいの?
417 :
デフォルトの名無しさん :01/08/27 12:30 ID:SZV9w40w
ライセンスが理解不能何だけど、 シェアウェア作っていいの?
418 :
◆JJ4mnGoc :01/08/27 12:51 ID:u6uH360E
>>402 402 に次の式渡したら答えが-10になりました。
3-4*2+15/3
[-10]
なんででしょ? bcc++5.5.1 拡張子cでコンパイルしました。
419 :
◆JJ4mnGoc :01/08/27 12:59 ID:u6uH360E
>>418 自己レス。
スタックが返る順に計算が行われてるから、
3-(4*2+15/3)になっちまってるみたいですね。
んー、これまずいですよね。私もちょっと考えてみます。
>>416 , 417
delスレに(・∀・)カエレ!!このかちゅーしゃ使いが!!
421 :
◆JJ4mnGoc :01/08/27 14:44 ID:u6uH360E
>>403 11個しか出ないと思って悩んでしまった
-1+2-3+4+5+6+78+9
これもアリなんだね? 演算子が「数の間に」ないけど。
422 :
60 :01/08/27 20:13 ID:8xBKXMk.
懐かしいスレが上がってるな、と思って参戦。
>>415 #include <stdarg.h>
typedef unsigned u;char c,s[99],*o,*h;int p,j,d;int z(char*b,u d,int r){j=0;
while(d)s[p++]="0123456789abcdef"[d%r],d/=r;while(b[j++]=s[--p],p);return j;}
int vsp(char*b,char*f,...){va_list v;va_start(v,f);h=b;do{if(*f=='%'){c=*++f;if
(c==37)*b++=37;if(c==99)*b++=va_arg(v,char);if(c=='s'){o=va_arg(v,char*);while(
*b=*o++)b++;}if(c=='u')b+=z(b,va_arg(v,u),10);if(c=='d'||c=='i'){d=va_arg(v,int
);if(d<0)*b++='-',d=-d;b+=z(b,d,10);}if(c=='x')b+=z(b,va_arg(v,u),16);}else*b++
=*f;}while(*f++);va_end(v);return b-h-1;}
%x/%d/%i/%u/%s/%cサポート(%oは忘れた)
雛型8行。もう少し縮みそうだけど、flag/widthのサポートは難しいかな。
423 :
60 :01/08/27 20:16 ID:Z85lGkRw
補足。 %の仕様が不明なので、%%で%を表示
/*418サン402は面白い手のつもりで駄目でした.また虫がいるかどうか遊んで見てね!*/ #include <stdio.h> char b[99],*p;E(){int r=T();l:if(*p==43){p++;r+=T();goto l;}if(*p==45){p++;r-= T();goto l;}return r;}T(){int r=F();l:if(*p==42){p++;r*=F();goto l;}if(*p==47) {p++;r/=F();goto l;}return r;}S(){for(;*p==32||*p==9;p++);}F(){int r=0;S();if( *p==40?p++,r=E(),p++,0:*p==45?p++,r=-F(),0:*p==43?p++,r=F(),0:1)for(;47<*p&&*p <58;r=10*r+*p++-48);S();return r;}main(){for(;;)p=gets(b),printf("%d\n",E());}
425 :
デフォルトの名無しさん :01/08/28 06:34 ID:XumLL8YM
とりあえず、7行。 だれか、幅とflagにも対応してください #include <stdarg.h> typedef unsigned u;typedef char c;int vsp(c*b,c*f,...){c x[9]="%csuxodi",t,s[99 ],*o,*h;int p,i,n,r;u d;va_list v;va_start(v,f);h=b;do{if(*f=='%'){p=i=0;x[8]=t =*++f;while(x[i++]!=t);if(i<3)*b++=(i==1)?37:va_arg(v,c);else if(i<4){o=va_arg( v,c*);while(*b=*o++)b++;}else{n=va_arg(v,int);r=i==5?16:i==6?8:10;if(i==7||i==8 )if(n<0)*b++='-',n=-n;d=n;while(d)s[p++]="0123456789abcdef"[d%r],d/=r;while(*b ++=s[--p],p);}}else*b++=*f;}while(*f++);va_end(v);return b-h-1;} #include <stdio.h> // テストドライバ int main() { int i; char buf[512]; i = vsp(buf, "%%%s%s%s%c %d %u %x %i %u %o", "test1 ", "test2 ", "test3", 'Z', -123, 123, 0x123, -123, -123, 83); printf("\n%d:%s\n", i, buf); return 0; }
426 :
60 :01/08/28 06:35 ID:XumLL8YM
名前入れ忘れた
427 :
:01/08/28 06:48 ID:cVrGreLc
稲垣メンバーゲーム作って!!!!!!!!!!!
428 :
60 :01/08/28 07:10 ID:XumLL8YM
#include <stdarg.h> typedef char c;int vsp(c*b,c*f,...){int p,i,n,r;va_list v;c x[9]="%csuxodi",*o, *h,s[99];unsigned d;va_start(v,f);h=b;do{if(*f^'%')*b++=*f;else{p=i=0;x[8]=*++f ;while(x[i++]!=*f);if(i<3)*b++=(i==1)?37:va_arg(v,c);else if(i<4){o=va_arg(v,c* );while(*b=*o++)b++;}else if(i<9){n=va_arg(v,int);r=i==5?16:i==6?8:10;if(i==7|| i==8)if(n<0)*b++='-',n=-n;d=n;while(d)s[p++]="0123456789abcdef"[d%r],d/=r;while (*b++=s[--p],p);}}}while(*f++);va_end(v);return b-h-1;} 整理、ってことで仕事に行きます。
430 :
ツール・怒・名無しさん :01/08/28 20:40 ID:oqu.Va2M
#include <stdio.h>/*小数対応版電卓!あまりTESTしてないけど遊んでね!7行だぜ!*/ typedef double d;char b[999],*p;d T(),F();d E(){d r=T();l:if(*p==43){p++;r+=T() ;goto l;}if(*p==45){p++;r-=T();goto l;}return r;}d T(){d r=F();l:if(*p==42){p++ ;r*=F();goto l;}if(*p==47){p++;r/=F();goto l;}return r;}S(){for(;*p==32||*p==9; p++);}d F(){d r=0,s=1,f=1;S();if(*p==40?p++,r=E(),p++,0:*p==45?p++,r=-F(),0:*p ==43?p++,r=F(),0:1)for(;47<*p&&*p<58;(f?r=10*r+*p++-48:(s/=10,r=r+s*(*p++-48))) ,(*p==46?p++,f=0:0));S();return r;}main(){while(p=gets(b))printf("%g\n",E());}
431 :
デフォルトの名無しさん :01/08/29 14:04 ID:7WZsAq3s
7行プログラミングって横に敷き詰めただけで 本当の7行プログラミングじゃないのが多いよね?
432 :
300 :01/08/29 14:27 ID:r10mk.nk
>>431 むむ・・・・
僕は出来るだけ区切りでしか改行してないつもり・・・(^^;;
434 :
431 :01/08/29 14:38 ID:7WZsAq3s
>>433 基本的に1文1行じゃないの?
このスレにあるのはただ横に並べただけのような気がするんだけど。
435 :
60 :01/08/29 14:41 ID:7sMIEKnc
436 :
300 :01/08/29 14:43 ID:r10mk.nk
>>434 でも、元ネタからしてそうなんだけど・・・・
むしろ、79*7文字以内がここの七行の意図。
437 :
431 :01/08/29 14:47 ID:7WZsAq3s
すいません、よく読んでいませんでした。 なるほど、79文字ないですか。 では、実際に1文1行7行プログラミングはやっぱり無理ですかね?
文の概念がない言語を使えば何とか。
439 :
60 :01/08/29 15:54 ID:f5AD.QBU
禿げしく勘違い。 書いてたのはvsprintfじゃ無くて、sprintfでした 勘違い下げ。
441 :
デフォルトの名無しさん :01/08/29 18:29 ID:caLfilt2
はい
442 :
60 :01/08/29 19:20 ID:vGbFff2E
>>437 7行(7文、cだと6文か?)で出来るプログラムなんて、誰でもかけるでしょ。
出来そうに無いことをやるから面白いんでない?
443 :
デフォルトの名無しさん :01/08/30 18:02 ID:kWM.DNtE
4バイトプログラム ---- ここから エL!ヘ ---- ここまで org 100h mov ah, 4ch int 21h 正常終了するだけです。 MS-DOS, Windowsで動作確認してます。 ↑くだらねぇ(´Д`)
444 :
デフォルトの名無しさん :01/08/30 19:12 ID:AMLCVR/E
----- エ ----- 2バイト。 int 20h これじゃダメなん? それから、!とヘの順序が逆だろ
445 :
デフォルトの名無しさん :01/08/30 19:56 ID:kWM.DNtE
>444 おお、ナイスですね。 順序が逆ってのも全くそのとおりです。 すんません。
さっき、4バイトのcoreジェネレータ作りやがったドキュソです。 いまここ、読み返してみましたが、面白いっすね。 私もBASIC挑戦してみまっす。
447 :
デフォルトの名無しさん :01/08/30 21:50 ID:LeZxLyYg
>>446 デモスレの256バイトプログラムを思い出した。
coreジェネレータっていう名前の
スゲェソフトなのかと一瞬焦っちまったよ。
448 :
デフォルトの名無しさん :01/08/30 22:20 ID:kWM.DNtE
はぁ、、、7行ではとてもとても…(´Д`) とんでもない行数になっちまいました。 //----------------------------------------------------------------------------// #include <stdio.h> #include <stdlib.h> #include <string.h> #define sc strncmp static int b[65536],r,m;static char l[100][80],c[80]; char*sk(char*s){char*p;for(p=s;*p==' ';p++);return p;}int ad(char*s){short*i;i= s;return*i;}int is(char*s){int z;if((*s>='0'&&*s<='9')||*s=='-')z=atoi(s);else z=b[ad(s)];return z;}cmd(char*s){int i,f,g;if(*s)if(sc(s,"GOTO ",5)==0){r=is(sk (s+5))-1;}else if(sc(s,"PUT ",4)==0){printf("%d.",is(sk(s+4)));}else if(sc(s, "? ",2)==0){f=0;if(s[strlen(s)-1]==';'){f=1;s[strlen(s)-1]=0;}printf("%s",s+2); if(f)printf("\n");}else if(sc(s,"GET ",4)==0){printf("?");gets(c);b[ad(sk(s+4)) ]=atoi(c);c[0]=0;}else if(sc(s,"IF ",3)==0){if(is(s+3))cmd(sk(s+6));}else if(s[ 2]=='='){f=is(s+3);g=is(s+6);f=(s[5]=='+')?f+g:(s[5]=='-')?f-g:(s[5]=='*')?f*g: (s[5]=='/')?f/g:(s[5]=='>')?f>g:(s[5]=='<')?f<g:(s[5]=='!')?f!=g:(s[5]=='=')?f ==g:(s[5]=='%')?f%g:f;b[ad(s)]=f;}else if(atoi(s)>0||s[0]=='0'){strcpy(l[atoi(s )],s+3);if(m<atoi(s))m=atoi(s);}else if(s[0]=='L'){for(i=0;i<=m;i++)if(*l[i]) printf("%02d %s\n",i,l[i]);}else if(s[0]=='R'){for(*s=r=0;r<=m;r++)cmd(sk(l[r]) );}else if(s[0]=='Q'){exit(0);}else{puts("ERR");}}main(){for(;;){gets(c);if(*c) {cmd(sk(c));puts("\nOK");}}}
449 :
デフォルトの名無しさん :01/08/30 22:30 ID:HxZGoFi6
>>444 スタックに0000hが入っているから1バイトでも済むぞ。
450 :
448 :01/08/30 22:36 ID:kWM.DNtE
ちなみに上のプログラムですが、演算部分がかなり簡素です。 それでもこんなにでかくて鬱。。
451 :
デフォルトの名無しさん :01/08/30 22:42 ID:3zV3Y2uE
>>449 MSX-DOS用のプログラムをMS-DOSで走らせない為に
使ってたね。iretだったっけ?
452 :
デフォルトの名無しさん :01/08/30 22:44 ID:DcpruMmY
453 :
デフォルトの名無しさん :01/08/31 00:05 ID:5Lf7sibE
>>448 も、もしかしてミニセットベーシックですか!?
スゲェ!あんたスゲェよ!
454 :
448 :01/08/31 01:07 ID:PIOyNsYQ
ありゃ、気づいてくださいましたか。光栄です(笑 現実逃避して書いた甲斐があったってもんです。。(本業は並列化コンパイラ しかし、7行ではないのでダメみたいです。 精進します…ってか、アレンジ許可ですんで誰か直して… #ところで、BASICの使い方知ってる人、今どれだけいるんですかね
455 :
448 :01/08/31 01:16 ID:PIOyNsYQ
ああ、ちなみに。 世界最小のBASIC(もどき)は恐らくVTL(バイナリ768バイト)っていう やつみたいです。20年以上前のものみたいです。 MC6800で書かれたものらしく、現在の32ビットプロセッサでは あれより小さいのはちと無理でしょうね。
456 :
デフォルトの名無しさん :01/08/31 21:27 ID:iy.vFuC.
誰か、七行で円周率を一億行くらい計算するプログラムって作れます?
458 :
456 :01/08/31 22:11 ID:p07F3Eh6
459 :
:01/08/31 22:13 ID:0gfyHouU
pribate Const 廃棄物 = -1 private sub プログラマ (眠い as string,残り時間 as long) on error goto さよなら プログラマ = 眠い * 残り時間 さよなら: プログラマ = 廃棄物 end sub
いや、 double a[100000000/10] てな配列取ってもいいのかなあって意味 だったら100桁計算するのも1億もそんなに変わらんから
何?このスレ。 7行といっても詰め込んで7行?意味ないじゃん。 Cでセミコロン使ったらその場で1行でわ? カンマ演算子を多用すれば結構縮まりそうだが(W
462 :
デフォルトの名無しさん :01/08/31 22:29 ID:nTJ9noQE
またか
>461 まあ、それもそうですね。 出題の仕方によっては、何でもありになってしまいますから。 ここの皆さんは、その辺を適当に見積もってマッタリやってるんですよ。 意味なんて追求するなら、こんなとこ(2ch)来ない方が有意義な一日が 送れるかもしれませんね。 それもまた、いいでしょう。さようなら。
464 :
デフォルトの名無しさん :01/08/31 23:05 ID:.ftWvnAA
rubyについてくるπを求めるサンプルコード。 これって桁おちとかしないのかな? ソースは全然追ってないけれども、連分数表示の公式から求めているのかな? #!/usr/local/bin/ruby k, a, b, a1, b1 = 2, 4, 1, 12, 4 while TRUE # Next approximation p, q, k = k*k, 2*k+1, k+1 a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1 # Print common digits d = a / b d1 = a1 / b1 while d == d1 print d $stdout.flush a, a1 = 10*(a%b), 10*(a1%b1) d, d1 = a/b, a1/b1 end end
465 :
デフォルトの名無しさん :01/08/31 23:14 ID:gbtJPnGk
>>464 Ruby知らないけど、今時のScript言語ならbignumぐらい
実装してるんでは?
467 :
300 :01/09/01 00:28 ID:MnqMeubQ
詰め込んであるっていっても制限文字数ありじゃん?? それ見て凄い、って思えない人にはこのスレ不要でしょうね。
468 :
464 :01/09/01 00:51 ID:fRlPzhIU
>>465 おれもrubyわからん。昨日インストールしたばったりだ。
でもなんとなく分かりそうじゃない?
インデントが消えちゃってるから見づらいけど。
469 :
デフォルトの名無しさん :01/09/01 11:48 ID:o5v4nYCE
ageてみる
>>461 スレのはじめから読め。
つか、もしかして煽ってんの?
471 :
デフォルトの名無しさん :01/09/01 19:48 ID:8ybdpsNg
#include <stdio.h> int main ( ) { char * i = "s" "a" "g" "e" ; printf ( "%s" , i ) ; return 0 ; } だめだ・・・・おさまらなかった・・・・
あおりにレスはカワルイデスヨ
474 :
デフォルトの名無しさん :01/09/02 21:52 ID:.hT4oV56
あまり注目されてないけどさ、
>>448 さんは実は凄くないかい?
>>448 試してみたけど縮まねー
今んとこ15行
478 :
デフォルトの名無しさん :01/09/07 23:13
元448です。 >475 ちゃいます(kw 誉めてもらえるのはうれしいっすが、誰か治してくれたらもと嬉しいです。。 >477 んー、RUNとかの代わりに"R"1文字って言う風にケチな仕様にしてますが、 GOTO を G とかにしたらそれこそ、BASICでなくなるんだろうなぁとか 思いながら作ってたらああなりました。 やっぱBASICよか、ほかのネタ考えたほうが面白いでしょうね。(ちと苦しいから…
追伸 448のプログラムは、以下のようなソースを通します。 10 A1=3 15 B1=2 20 M1=A1%B1 25 M2=M1=0 30 IF M2 GOTO 50 35 B1=B1+1 40 Q1=A1>B1 45 IF Q1 GOTO 20 46 PUT A1 50 A1=A1+1 55 GOTO 15 ↑3以上の素数計算を永遠にやります。。 …あんまり面白いものは作れないです(kw
自作自演臭いけど気にしないでw とりあえず、言いだしっぺなんで、 手元にDLしてあったHSPで479のを作りなおして見た A1=3 *x B1=2 *y M1=(A1\B1) M2=(M1==0) IF M2 :GOTO *z B1=B1+1 Q1=(A1>B1) IF Q1 :GOTO *y mes A1 *z A1=A1+1 wait 1 GOTO *x なんか、HSPってベーシックモドキって感じが拭えねぇなぁ ベーシック理解してれば一日で屑アプリは作れそう 一行に多重に命令を書いてやれば7行に収まるけど、まぁいいか
>481 自作自演っぽい 479の者です。別人だと証明します。。 っていうか、ID無いんですね、ここ。(kw 確かに":"で繋いで何行も書けますからねぇ>フルBASIC 僕は結構気に入ってた言語なんですが、やっぱ教育用言語の域は 脱せなかったのかな。 その反面、HSPは、けっこう単品で色々できるように工夫できてて 面白いですよね。 時間あれば、HSPも色々やってみたいんですがねぇ。。
しかしまぁ、同じ教育用言語といえばpascalの方が よほどためになるわなあ
HSP薦めてる奴は無視しましょう>483
いろいろ出来るように工夫されてる分、
自由度は一定以上は無い。
飼い殺しのようなもので、それ以上ほしかったらDLL依存しかないから、
あんまりお勧めできるもんじゃない
まぁ、上記のような素数を求めたりとかの簡易なのはCで作るよりは効率いいけど
(小数を扱うものは覗く)
>>482
nCrを全部書き出す。ヘタレなので32以下しかできない。 int main(int c,char** v){int N,R,m,i,r;unsigned long b,P=1;if(c<3)return -1; N=atoi(v[1]);R=atoi(v[2]);if(N>32||N<R)return;if(R<=N-R)m=0;else{m=1;R=N-R;} for(i=0;i<N-1;i++)P=(P<<1)+1;for(b=0;b<=P;b++){r=0;for(i=0;i<32;i++)if(1<<i&b) r++;if(r==R){unsigned long b2=0;unsigned long w=b;if(m==1){w=~w;w&=P;}while( b2<32){if(1<<b2&w){printf("%d ",b2+1);}b2++;}printf("\n");for(i=0;i<32;i++){ if(!(1<<i& b)){b|=1<<i;}else{break;}}}if(b==0xFFFFFFFF){break;}}return 0;}
487 :
デフォルトの名無しさん :01/09/11 08:45
オラァ!!
即興で作ったBase64エンコーダ。stdinから入れてstdoutに吐き出す。 #include <stdio.h> char *m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";void c(char*d,unsigned char*s,int l){int v[3]={0,2,3};long t=0;int i;for(i=l;i<3;i++ )s[i]=0;for(i=0;i<3;i++)t=(t<<8)|(s[i]);for(i=0;i<4;i++)d[i]=m[(t>>((3-i)*6))& 0x3F];if(l<3)memset(d+v[l],'=',4-v[l]);}int main(void){char r[54],*p;char o[4]; int l;while((l=fread(r,1,54,stdin))>0){p=r;while(l){int e=l>3?3:l;c(o,p,e);p+=e ,l-=e;fwrite(o,1,4,stdout);}putchar('\n');}return 0;}
489 :
デフォルトの名無しさん :01/09/11 18:31
おいらにゃHTTPサーバ7行はムリでした・・・(T^T) usage: java H port import java.io.*;import java.net.*;import java.util.*; public class H{public static void main(String a[])throws Exception{new H().e(new Integer(a[0]).intValue());}void e(int p)throws Exception{ServerSocket v=new ServerSocket(p);for(;;){Socket s;try{s=v.accept();}catch(IOException e){break;} new T(s).start();}v.close();}}class T extends Thread{Socket s;T(Socket q){s=q;} public void run(){try{StringTokenizer t=new StringTokenizer(new BufferedReader( new InputStreamReader(s.getInputStream()),1024).readLine()," ");t.nextToken(); String f=t.nextToken();if(f.endsWith("/"))f+="index.html";f="."+f;try{ DataInputStream i=new DataInputStream(new FileInputStream(f));DataOutputStream o =new DataOutputStream(s.getOutputStream());byte b[]=new byte[1024];int l;o. writeBytes("HTTP/1.0 200 OK\r\nContent-type: text/html\r\n");while((l=i.read(b)) !=-1){o.write(b,0,l);}o.close();}catch(FileNotFoundException y){try{ DataOutputStream o=new DataOutputStream(s.getOutputStream());o.writeBytes("HTTP" +"/1.0 404 Not found\r\n");o.close();}catch(IOException z){}}catch(Exception y){ }s.close();}catch(IOException e){}}}
sugoi!
#includ<stdio.h> int i=0,c,d=0,e=0;main(){while(EOF-(c=getchar())){i+=8;while(i>5)i-=6,d=d*256+c ,putchar("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(c >>i)&63]);if(++e>53)puts(""),e-=54;}if(i)putchar(i-4?"AQgw"[c&3]:"AEIMQUYcgkos\ w048"[c&15]),puts(i-4?"==":"=");else if(e)puts("");return 0;}
失礼、一行目 include の eが抜けている。
なんか違ってる。 #include<stdio.h> int i=0,c,d=0,e=0;main(){while(EOF-(c=getchar())){i+=8;while(i>5)i-=6,d=d*256+c ,putchar("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(d >>i)&63]);if(++e>53)puts(""),e-=54;}if(i)putchar(i-4?"AQgw"[d&3]:"AEIMQUYcgkos\ w048"[d&15]),puts(i-4?"==":"=");else if(e)puts("");return 0;}
#include<stdio.h> #include<string.h> char*m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",*a; int i=0,c,x,d=0;g(){x=getchar();return x-EOF?(a=strchr(m,x))?a-m:g():64;}main() {while((c=g())<64){i+=6;d=d*64+c;while(i>7)i-=8,putchar((d>>i)&255);}return 0;}
という訳でbase64は5行の世界みたい。
7行で不謹慎ゲーム
12行。7行への道は険しい。仕様は448さんとほぼ同じ。 ただし、RはRUN、QはQUIT、Lは実装せず。 ※4行目elseの後ろに半角スペースが1つあります。 #include<stdio.h> #include<stdlib.h> #include<string.h> #define X(c,n,e) if((!strncmp(p,c,n))&&(p+=n)){for(;*p==32;++p);p=(e);}else int b[65536],f,g,i;static char l[103][80],c[80],*p;I(){return*p-48?atoi(p)?atoi (p):b[*(short*)p]:atoi(p);}main(){do{gets(l[i=100]);p=l[i];while(i<101){for(;*p ==32;++p);X("\0",1,l[++i])X("GOTO ",5,l[i=I()])X("PUT ",4,(printf("%d\n",I()),l [++i]))X("GET ",4,(printf("?"),gets(c),b[*(short*)p]=atoi(c),*c=0,l[++i]))X("I\ F ",3,I()?p+3:l[++i])X("RUN",3,l[i=l[100][0]=0])X("QUIT",4,l[i=102])if(*p==48|| atoi(p))strcpy(l[atoi(p)],p+3),++i;else(61-p[2]?puts("ERR"):(p+=3,f=I(),p+=3,g= I(),--p,b[*(short*)(p-5)]=*p-43?*p-45?*p-42?*p-47?*p-60?*p-62?*p-21?*p-61?*p-37 ?f:f%g:f==g:f!=g:f>g:f<g:f/g:f*g:f-g:f+g)),p=l[++i];}puts("OK");}while(i-102);}
15行で力尽きた。
>>488 さんの小手先で短くした版。
#include <stdio.h>
#include <stdlib.h>
int u(char*s,char*r){for(;*r;s++,r++)if(*s-*r)break;return!*r;}int t(char*s){
int r=0;for(;*s;s++,r++);return r;}int b[65536],r,m;char l[100][80],c[80];char*
S(char*s){for(;*s==' ';s++);return s;}int N(char*s){return ((*s>'/'&&*s<':')||
*s=='-')?atoi(s):b[*(short*)s];}int C(char*s){int i=0,f,g=s[0];if(*s)if(u(s,
"GOTO "))r=N(S(s+5))-1;else if(u(s,"PUT "))printf("%d.",N(S(s+4)));else if(u(s,
"? ")){if(s[t(s)-1]==';'){i=1;s[t(s)-1]=0;}printf("%s",s+2);if(i)printf("\n");}
else if(u(s,"IF ")){if(N(s+3))C(S(s+6));}else if(s[2]=='=')f=N(s+3),g=N(s+6),i=
s[5]-43,b[*(short*)s]=i?i-2?i+1?i-4?i-17?i-19?i+22?i-18?i+6?f:f%g:f==g:f!=g:f>g
:f<g:f/g:f*g:f-g:f+g;else if((f=atoi(s))>0||g=='0'){for(i=0;i<t(s+2);i++)l[f][i
]=s[3+i];if(m<f)m=f;}else if(g=='L'){for(;i<=m;i++)if(*l[i])printf("%02d %s\n",
i,l[i]);}else if(g=='R')for(;i<=m;i++)C(S(l[i]));else if(g=='Q')exit(0);else if
(u(s,"GET ")){printf("?");fgets(c,79,stdin);b[*(short*)S(s+4)]=atoi(c);}else
puts("ERR");}main(){for(;;){fgets(c,79,stdin);if(*c){C(S(c));puts("\nOK");}}}
499 :
デフォルトの名無しさん :01/09/13 23:26
スゴイゴイスゴイー
熱い…熱いぜこのスレ!
>>497 +
>>498 で1行は縮みそうだね
>>498 のこれ好きー
>int u(char*s,char*r){for(;*r;s++,r++)if(*s-*r)break;return!*r;}
502 :
デフォルトの名無しさん :01/09/14 06:11
どうせならn行に圧縮したコードと、 インデント付けたソース両方載せて欲しいなぁ・・
503 :
デフォルトの名無しさん :01/09/14 06:13
>>477 さん
501さんの指摘した関数は
u(char*s,char*r){for(;*r&&*s!=*r;++r);return!*r;}
または
u(char*s,char*r){while(*r&&*s!=*r)++r;return!*r;}
(どちらもバイト数は同じ)と書けます。
・関数の返り値はintにして省略する。
・1度しか呼ばない関数を定義しない。
・変数は出来るだけグローバルにして同時に宣言。
・if文は出来るだけ使わない(?:を使うためにも関数の型をそろえる
などは有効)。
・;の代わりに,を使う。
この辺りはIOCCCの1-linerを作るコツと一致します。
>>502 さん
私のコードはインデントしても多分無駄です。
一応インデント+適当に括弧をつけて見やすくしました。
行数が多いようなので次に書きます。
505 :
491-495,497,504 :01/09/14 11:03
#include<stdio.h> #include<stdlib.h> #include<string.h> #define X(c,n,e) if((!strncmp(p,c,n))&&(p+=n)){for(;*p==32;++p);p=(e);}else int b[65536], f, g, i; static char l[103][80], c[80], *p; I() { return *p - 48 ? ( atoi(p) ? atoi(p) : b[*(short*)p] ): atoi(p); } main () { do{ gets(l[i = 100]); p = l[i]; while (i < 101){ for (; *p == 32; ++p); X("\0", 1, l[++i]) X("GOTO ", 5, l[i = I()]) X("PUT ", 4, (printf("%d\n", I()), l[++i]) ) X("GET ", 4, (printf("?"), gets(c), b[*(short*)p] = atoi(c), *c = 0, l[++i]) ) X("IF ", 3, I()? p+3 : l[++i]) X("RUN", 3, l[i = l[100][0] = 0]) X("QUIT", 4, l[i = 102]) if(*p == 48 || atoi(p)) strcpy(l[atoi(p)], p+3),++i; else ( 61 - p[2] ?
続きです。 puts("ERR"): ( p+=3, f=I(), p+=3, g=I(), --p, b[*(short*)(p-5)] = *p - 43 ? *p - 45 ? *p - 42 ? *p - 47 ? *p - 60 ? *p - 62 ? *p - 21 ? *p - 61 ? ( *p - 37 ? f: f % g ) : f == g : f != g : f > g : f < g : f / g : f * g : f - g : f + g ) ), p = l[++i]; } puts("OK"); } while (i - 102); }
>>504 >u(char*s,char*r){for(;*r&&*s!=*r;++r);return!*r;}
++sが抜けてるよ
ありがとう、ミスってました。 (新バージョンのバグの一因だった) さらに関数uは巧く引数をグローバル変数化したほうが全体として短くなります。
それに!=じゃなくて==だ。
11行。頭の2行なくてもgcc on Linuxなら通るよ。 #include<stdio.h> #include<stdlib.h> int b[65536],f,g,i,n;char *m[]={"GOTO ","PUT ","ET ","IF ","RUN","QUIT"},l[103] [80],c[80],*p,*q,*r,x;S(){for(;*p==32;++p);}T(){return!U()&&(S()|1);}U(){for(r= m[n++];*r&&*r==*p;++r)++p;return*r;}I(){g=atoi(p);return*p-48?g?g:b[*(short*)p] :g;}main(){do{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),*c=0,l[++i]:T() ?(I()?p+3:l[++i]):T()?l[i=l[100][0]=0]:T()?l[i=102]:(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+22?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");}while(i-102);}
ただし、GOPUTEIRUQUITがQUITの代わりになる、とかの突っ込みなしね。 良く見ると2文字縮まった。後ろ9行のみ。 これもGOTETPUIFがIFの代わりになったりします。 int b[65536],f,g,i,n;char*m[]={"GOTO ","ET ","PUT ","IF ","RUN","QUIT"},l[103][ 80],c[80],*p,*q,*r,x;S(){for(;*p==32;++p);}T(){return!U()&&(S()|1);}U(){for(r=m [n++];*r&&*r==*p;++r)++p;return*r;}I(){g=atoi(p);return*p-48?g?g:b[*(short*)p]: g;}main(){do{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("?" ),gets(c),b[*(short*)p]=atoi(c),*c=0,l[++i]:T()?printf("%d\n",I()),l[++i]:T()?( I()?p+3:l[++i]):T()?l[i=l[100][0]=0]:T()?l[i=102]:(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+22?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");}while(i-102);}
#include <stdio.h> #include <conio.h> #include <winsock.h> #include <string.h> main(int a,char**v){WSADATA w;int s[10],i,j,e=0,os,p=0,r;char b[1000],t[100]; u_long g=0;sockaddr_in o;a--;memset(&s,0,sizeof(s));os=sizeof(o);memset(&o,0, os);e|=WSAStartup(0x202,&w);e|=s[0]=socket(2,1,0);o.sin_family = 2;o.sin_addr. s_addr = a?inet_addr(v[1]):0;o.sin_port = htons(9314);if(a)e|=connect(s[0], (sockaddr*)&o,os);else{e|=bind(s[0],(sockaddr*)&o,os);e|=listen(s[0],9);}for(;e +1;){fd_set f;timeval v= {0, 0};FD_ZERO(&f);for(i=0;i<10;i++){if(s[i])FD_SET(s[ i], &f);}select(0,&f,0,0,&v);for(i=0;i<10;i++){if(s[i]&&FD_ISSET(s[i],&f)){if(a ||i){ioctlsocket(s[i],FIONREAD,&g);r=1000-p;recv(s[i],b+p,r,0);p+=(g>r)?r:g;for (;*b<=p;memmove(b,b+*b,p-*b),p-=*b){puts(b+1);if(!a){for(j=1;j<10;j++)if(s[j]) send(s[j],b,*b,0);}}}else{for(j=1;j<10;j++)if(!s[j]){s[j]=accept(s[0],0,0); break;}}}}if(a)if(kbhit()){fgets(t+1,99,stdin);t[*t=strlen(t+1)]='\0';(*t)++; send(s[0],t,*t,0);}}} 途中でめげたため匿名&終了処理してないチャットです。
age
>>511 int b[65536],f,g,i,n;char*m[]={"GOTO ","ET ","PUT ","IF ","RUN","QUIT"},l[103][
80],c[80],*p,*q,*r,x;S(){for(;*p==32;++p);}T(){return!U()&&(S()|1);}U(){for(r=m
[n++];*r&&*r==*p;++r)++p;return*r;}I(){g=atoi(p);return*p-48?g?g:b[*(short*)p]:
g;}main(){do{gets(p=l[i=100]);while(i<101){n=0;S();if((f=atoi(q=p))||*q==48)for
(p=l[f],q+=3;*p++=*q++;i=101);else++i,p=!*q?l[i-1]:T()?l[i=I()]:T()?printf("?")
,gets(c),b[*(short*)p]=atoi(c),l[i]:T()?printf("%d\n",I()),l[i]:T()?(I()?p+3:l[
i]):T()?l[i=*l[100]=0]:T()?l[i=102]:(61-q[2]?puts("ERR"):(p=q+3,f=I(),x=p[2]-42
,p+=3,g=I(),b[*(short*)q]=x-1?x-3?x?x-5?x-18?x-20?x+9?x-19?x+5?f:f%g:f==g:f-g:f
>g:f<g:f/g:f*g:f-g:f+g),l[i]);}puts("OK");}while(i-102);}
小手先の技で18文字縮小…できたかも。自信ない。
sugoi
>>541 さん
18字縮小とはやられました。
5行目は!*q?l[i-1] じゃなくて!*q?l[i] ですね。
下から2行目の 9は 23じゃないでしょうか?よって引き算の値を
43から42に変えても文字数は減らないと思います。
この2つの修正を加えると19字縮小になりますね。
間違えた。541じゃなくて514。
>>514 さん
駄目です。
atoiを無駄に呼ばない圧縮はOKですが、
!*q?で始まる巨大条件節がp+3を返して次のループに入る場合、変数iの
値が元と異なってしまいます。処理で言うなら、(BASICの)IFの条件が
成立した場合の動作がおかしくなります。
514さんの中で使用可能なのは
*c=0, の省略(5)
atoi() を不要にする(4)
他には
最後の x?で始まる条件節は順序を入れ替えて+=を使用(1)
I()?で始まる条件節の()が不要(2)
で実際は12字縮小ですね。
○×ならぬ○△。ただし双方とも3手より前のものは消える。 消える直前のものは●▲で表示される。対戦型、勝利判定付。 入力は11から33で行う。不正な入力で終了。 int b[9],i,j,k=4,l;P(){return j=b[i],printf(" \0●\0○\0▲\0△"+(j-j/3-j/5*2)* 3),++i<9?printf(i%3?"┃":"\n━╋━╋━\n"),P():puts("");}T(){return(b[i]-=(j=b[ i],k*3&j?k:0)),++i<9?T():0;}W(){l=k*3;return l&b[0]?l&b[1]?l&b[2]:l&b[3]?l&b[6] :l&b[4]?l&b[8]:0:l&b[4]?l&b[1]?l&b[7]:l&b[2]?l&b[6]:l&b[3]?l&b[5]:0:l&b[8]?l&b[ 5]?l&b[2]:l&b[7]?l&b[6]:0:0;}main(){for(;!W();){k^=5;do{printf("? ");l=atoi(ge\ ts());l-=4+l/10*7;if(l>8||l<0)return 0;}while(b[l]);i=0;T();b[l]=k*3;i=0;P();} return puts("\n○ Won!\0\n△ Won!"+k*3-3)&0;}
課題 ・あまり短くないので短くする。 ・思考ルーチンを入れて1人対戦にする。
521 :
デフォルトの名無しさん :01/09/17 23:58
#include行が無い・・・
>>516 ,
>>518 > 5行目は!*q?l[i-1] じゃなくて!*q?l[i] ですね。
おわ、ほんとだ。
> p+3を返して次のループに入る場合
ひぇぇぇぇ。
# でもこっちは p+3 を --i,p+3 に変えちゃえば…うーむ、苦しいか。
> 下から2行目の 9は 23じゃないでしょうか?
ここで意図してる処理って if( x=='!' ) return (f!=g); ですよね?
42 - 0x21 == 9 じゃないですか?
>>514 さん
x == '!' すなわち x - 42 == '!' - 42 すなわち (x-42) + 9 == 0
あなたが正しいですね。私の504, 510のコードが間違ってます。
504は21→33、510は22→10ですね。
#文字のASCII覚えてないので、man ascii して表みるんだけどOctal
#とかHexadecimalを見ていたみたい。←言い訳
>>300 さん
ルールが異なります。私のは勝負がつくまで延々打ち続けますよ。
(必ず9手以内に終わる、というやつではないです。)常に場面には
3個以内の○と△しかありません。従って履歴というか、打った順序
を覚える必要があり、あなたの方式で効率的に勝利判定を行おうと
するとそのままでは36bits必要になります。ただし各点の状態は7通り
なので、巧くすれば27bitsで済むように出来るかも知れません。
その辺り工夫が必要です。変数2つ使ってもいいかも。
>>524 なるほど、あれですか(^^;
今は7行に手をつけてる余裕がないので、
7行以下目指してがんばってくださいね
ビット演算版。不正入力は聞きなおし。gets()の不正な利用もなし。 #include <stdio.h> long a,b,c,i,k=2,w=73,x=4161,y=262657;W(long p){return!!(p-(c&p));}P(){return c =(a>>i&3)<<2-k,c+=(b>>i&3)<<k,printf(" \0●\0○\0▲\0△"+(c-c/3-c/5*2)*3),(i+= 3)<27?printf(i%9?"┃":"\n━╋━╋━\n"),P():puts("");}main(){for(P();c=b|b/2,W( w)&W(w<<9)&W(w<<18)&W(x)&W(x*8)&W(x*64)&W(y)&W(x*4033);c=a,a=b,b=c){c=w*y;a-=(a |a/2)&c;do printf("? "),scanf("%ld",&c),c-=4+c/10*7,c=c>8|c<0?0:3<<c*3;while(!c ||c&a||c&b);a+=c;i=0;P();k^=2;}return puts("\n○Won!\0\n△Won!"+k*4)&0;}
527 :
デフォルトの名無しさん :01/09/21 01:03
久々age
今日初めてこのスレ見て、かなり萌えてしまって
>>489 をいじってみた。Request-LineだけでResponseを送っちゃうのとRequest Methodを
見ていないのはhttpdとしてまずいので修正。まだつめられるかも...
import java.io.*;import java.net.*;public class W extends Thread{Socket s;int i
;DataOutputStream o;BufferedInputStream a,b;public static void main(String a[])
throws Exception{ServerSocket v=new ServerSocket(Integer.parseInt(a[0]));for(;;
){try{new W(v.accept()).start();}catch(IOException e){break;}}v.close();}String
n(String r) throws IOException{if(r.equals("")){while(((i=b.read())>0&&i!=32&&i
!=10)){r+=(char)i;}}else o.writeBytes("HTTP/1.0 "+r+"\r\n\r\n");return r;}
public void run(){try{b=new BufferedInputStream(s.getInputStream());String m=n(
""),f="."+n("");if(f.endsWith("/"))f+="index.html";o=new DataOutputStream(new
BufferedOutputStream(s.getOutputStream()));while(!n("").startsWith("\r")){}if(!
m.equals("GET"))n("501 Not Implemented");else{try{a=new BufferedInputStream(new
FileInputStream(f));n("200 OK\r\nContent-type: text/html");while((i=a.read())!=
-1){o.write(i);}a.close();}catch(FileNotFoundException y){n("404 Not found");}}
o.close();b.close();s.close();}catch(IOException e){}}W(Socket q){s=q;}}
529 :
デフォルトの名無しさん :01/09/21 16:30
cでincludeを1行と数えないのは悲しいです。 また、ANSI-Cに沿いましょう。 「書かなくてもコンパイラが勝手にincludeしてくれる(by gcc/bcc/tcc)」 などというマイナールールは避けませんか? Javaだとこういう問題が無いのがいいっすね。
530 :
デフォルトの名無しさん :01/09/22 14:47
いわゆるHigh&Lowです。(7行) 乱数種にtime()を使うのでtime.hのincludeが必要で、実質mainは4行制約です。 乱数種系関数がが処理系依存かも…。randomize()はlccに怒られました。 srand((unsigned)time(NULL)); srand(time(NULL)); randomize(); ↑もう少し削れそうです。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(){int t,r,i;srand(time(NULL));r=1+rand()%100;for(t=1;t<=5;++t){printf( "%d回>入力しれ(1-100):",t);scanf("%d",&i);if(r==i){puts("(・∀・)イイ!");return 0 ;}if(abs(r-i)<10)printf("(゚Д゚)ハァ?");else printf("Σ(,,゚д゚)ガーン!");if(r>i)puts (" age");else puts(" sage");}printf("■■■ 糸冬 ■■■ ○%d\n",r);return 0;}
530>> わかりやすくて(・∀・)イイ!
533 :
デフォルトの名無しさん :01/09/23 04:11
>>530 作者はANSI-Cを知らないようだし、それはいいんだけれど、
問題の作品自体も他の作品に比べて密度が低いですね。
530さんの参戦はうれしいことだけれど、
>>531 -532さん、これをほめちゃ、他の作品(未完だけれど
>>528 みたいな)が可哀想だよ
>>533 まあまあ、マターリしようよ♪
「密度が低い」というのは、みんな(530を含めて)わかってるって。
単純ながら、80桁×7行の範囲内で、モララさんを起用するようなセンスは(・∀・)イイ!と思うよ。
「■■■ 糸冬 ■■■」←バラエティ番組のお約束風で結果が見え見えなトコとか。
これを528と比較しては、折角参戦してくれた530が可哀想だよ。
535 :
トリッキーの1 :01/09/23 18:31
この2日ほど、マインスイーパ7行に取り組んでいるんですが…
今のところ9行止まりです。8行までなら小手先のテクニックで
何とかいけそうなんですが、さらに1行削るのはデータ構造の
根本的な見直しが必要になりそうっす。
途中だけれど、一応発表します。最初「X Y 爆弾」と入力し、
その後は「X軸 Y軸」と入力します。
#include <stdio.h>
#include <time.h>
int r=time(0),x,y,t,n,q,l;char*p,*m;o(int v,int f){int i,s=(v<0||v>q-1)?0:(!f)
?m[v]:(o(v,0))?p[v]='*',-1:2;if(s>1)for(i=0;i<9;i++)s+=o(v+(i%3-1)*x+i/3-1,f-1
);return (f==1&&p[v]=='/')?n--,p[v]='0'+s-2,(s==2)?o(v,2):s:s;}main(){scanf(
"%d%d%d",&x,&y,&t);l=x*y;p=m=new char[++x*y*2+x+1];q=x*y;n=q-y-t;for(;p-m-q;++
p)*p=0,*(p+q)=((p-m)%x+1-x)?r=r*9+5,((r
>>26 &63)<64*t/l--)?t--,*p=1,'*':'/':
'\n';for(*(p+q)=0;printf(p),n;)scanf("%d%d",&t,&r),n=(o(t-1+r*x-x,1)<0)?0:n;delete[]m;return 0;}
こちらも9行です。アルゴリズムを変えて再帰を使わずにやっています。
これも頑張れば8行までなら可能でしょうが、7行は辛いかな。
#include <stdio.h>
#include <time.h>
#define c(a) for(r=1,q=0;q<9;q++)y=a[t+(q%3-1)*x+q/3-1],r=(a-p)?r+y:r*(y-'0');
int r=time(0),f,x,y,t,n,q;char*p,*m;main(){scanf("%d%d%d",&x,&y,&t);n=x*y-t;f=
x*y;p=m=new char[++x*(y+2)*3];for(q=x*(y+2)+1;p-m-q;p++)*p=0,*(p+q)=f?((p-m)>x
&&f)?((p-m)%x)?r=r*9+5,((r
>>26 &63)<64*t/f--)?t--,*p=1,47:47:10:0:0;for(t=x+1;n
&&p[t]-'*';(t==p-m)?puts(p+x+1),scanf("%d%d",&t,&r),m[t+=r*x]?p[t]='*':p[t]|=
16:t++){c(p)if(!r&&p[t]==47||p[t]==63){c(m)n--,p[t]=47+r;t=x;}}puts(p+x+1);
delete[]m;return 0;}
今はtime.hを使ってかなりへちょいランダムジェネレータを自作していますが、
どんなにへちょくてもstdio.hのみで乱数を作れれば7行はすぐですね(まず無理だろうけど)
また暇が出来たら続きをやることにします。
>>535 小手先で7*80、ぴったり580文字。
文法から逸脱はしてないけど、反則?
ちなみに、ソースは見てないんで、中身はいじってません
ソース張り忘れた
typedef int I;typedef char* C;extern"C"{printf(C,...);long time(long*);scanf(C,
...);}I r=time(0),x,y,t,n,q,l;C p,m;o(I v,I f){I i,s=(v<0||v>q-1)?0:(!f)?m[v]:(
o(v,0))?p[v]='*',-1:2;if(s>1)for(i=0;i<9;i++)s+=o(v+(i%3-1)*x+i/3-1,f-1);return
(f==1&&p[v]=='/')?n--,p[v]='0'+s-2,(s==2)?o(v,2):s:s;}main(){scanf("%d%d%d",&x,
&y,&t);l=x*y;p=m=new char[++x*y*2+x+1];q=x*y;n=q-y-t;for(;p-m-q;++p)*p=0,*(p+q)
=((p-m)%x+1-x)?r=r*9+5,((r
>>26 &63)<64*t/l--)?t--,*p=1,'*':'/':'\n';for(*(p+q)=0
;printf(p),n;)scanf("%d%d",&t,&r),n=(o(t-1+r*x-x,1)<0)?0:n;delete[]m;return 0;}
ホントはdeleteも削ろうと思ったけど、収まったのでそのまま
539 :
トリッキーの1 :01/09/23 19:26
>>537 さすが60さん(お久しぶりです♪)
素晴らしい!全く思いつかなかった!
誰か、これが反則か否か教えて下さい……
ああ、しまった、デバッグバージョンっすねコレ
正しくはこちら。
typedef int I;typedef char* C;extern"C"{printf(C,...);long time(long*);scanf(C,
...);}I r=time(0),x,y,t,n,q,l;C p,m;o(I v,I f){I i,s=(v<0||v>q-1)?0:(!f)?m[v]:(
o(v,0))?p[v]='*',-1:2;if(s>1)for(i=0;i<9;i++)s+=o(v+(i%3-1)*x+i/3-1,f-1);return
(f==1&&p[v]=='/')?n--,p[v]='0'+s-2,(s==2)?o(v,2):s:s;}main(){scanf("%d%d%d",&x,
&y,&t);l=x*y;p=m=new char[++x*y*2+x+1];q=x*y;n=q-y-t;for(;p-m-q;++p)*p=0,*(p+q)
=((p-m)%x+1-x)?r=r*9+5,((r
>>26 &63)<64*t/l--)?t--,*p=1,'/':'/':'\n';for(*(p+q)=0
;printf(p),n;)scanf("%d%d",&t,&r),n=(o(t-1+r*x-x,1)<0)?0:n;delete[]m;return 0;}
後で気が向いたら、もう少し削ってみます。もしかしたら後1行くらいいけるかも。
>>529 さん
私の
>>519 のような#include<stdio.h>を書くとコンパイル出来ないもの
(書かなければgccを始めUNIX上の多くのコンパイラでコンパイル出来る)
ものは駄目ですか?
或いは#includeがなくとも多くのコンパイラ(メジャーなものの内の一つ)
でコンパイル出来る場合は#includeを書かない状態で7行を認めませんか?
#元のDeCSSの7行だって #!/usr/bin/perl は行数にいれていないよ。
#includeを入れて7行のほうがより美しい、というのは分かるが、それを
強制するのは創作の幅を少なくさせるという意味でよくない、と思う。
(K&R的に引数省略して書く(不正使用)とかは動作する範囲ではやりたい
し....最近のIOCCCでは禁止になったけど。)
それに、60さんの
>>537 のようなイカす作品が生まれない訳で、
(7*79が条件なので反則ではありますが....私も79(80ではない)に何度も
泣かされています)私としてはルールは緩く、作品はスマートに、と
思う訳です。
542 :
デフォルトの名無しさん :01/09/25 11:11
#includeナシに反対。 創作の幅がうんぬんっていうのはなんだかおかしいんじゃないか。 厳しいルールのなかでスマートでイカす作品を生み出すのが本来の目的じゃないの?
プロトタイプをまったく省略するのは反則だとは思うけど、、、 自分で書くのは、どうなんだろうねぇ。
>>創作の幅がうんぬんっていうのはなんだかおかしいんじゃないか。
なんだかとは?
>>厳しいルールのなかでスマートでイカす作品を生み出すのが本来の目的じゃないの?
違うと思うな。作品の芸術性が失われる。本来の目的言い出したら1番さん
どうなの?#!/usr/bin/perl含めて8行の作品を7行と言っている訳だしね。
あの長方形に文字が詰め込まれた形を良しとするならば#includeは忌み嫌う
べきでさえあるし。この辺りは感性の問題と思うからより多くの人がここを
楽しむためにはルールは緩くしておいて、各人が自分の気に入ったものを
評価すれば良いと思う。(それが私が作品の幅云々と言った意味)コンテスト
の場合はルールを厳しくするべきであり、それをフォーマルとするならば、
ここはカジュアルであると私は捕らえている。
>>544 さん 数えていませんでした。
>>536 を鵜呑みにしていました。
79なら◎ですよ。
最近参加してないし、コンパイラ依存のコード結構書いてますが・・・(^^; 僕的には、には「#includeを含めなくてもいいんじゃない?」っていう態度よりは 「#includeを含めた上で7行におさめようとする努力とその結果」に尊敬の念を感じます。
547 :
トリッキーの1 :01/09/25 14:01
個人的には、#includeは明らかにCの正しい文法だと思うし、
必要なのに無ければCでは無いと思います。
私は自分の書くCソースは、可能な限り幅広い環境で
正しく実行できるようにしようと思っているので、
(マインスイーパーはASCII文字依存になってしまいましたが)
#include無しでもいい、などという事を考えもしませんでした。
これは一人でも多くの人に自分を評価されたい、という自己満足のためです。
しかしそれでも、いかに#includeを少なくして機能を実装するか
(例えば、randomを使うときstdlib.hを使わず自前で作る、など)
等々、創作の幅が狭まるなどという事はありえません。発想力次第です。
特に60さん(
>>537 )が、#includeを使わないという素晴らしい方法を
編み出されたように、創作の幅はかえって広まっていると思います。
とはいえ、コレは私個人の意見です。発表は自由ですので、是非
練りに練ったソースを公開してもらえればと思います。
誰かが、それを#includeつきで7行にしてくれるかもしれません。
しかし、コンパイラ依存の場合は、万人が納得する物は提示出来ない
のではないか、と考えています。
#ちなみに#!/usr/bin/perlはPerlのプログラム構文ではないです、念のため
ども。
#includeが有る無しじゃなくて、プログラムとして完結しているか、
が重要だと思うだけど。#includeを取り除くのを目的としたのではなくて、
1行でも短くするtipsとしてあのコードを出したわけです。
正規のC++の手順を踏んで、ああいう書き方もあるよ、と。
Cではプロトタイプ宣言が無くても、リンクのときにつじつまを合わせてくれるから、
わざわざ書かなくてもいい気がします。
#inclulde有る無しが重要ではなくて、プリプロセッサが何をやっているのか。
それを考えれば、決して趣旨から外れているわけではないと思いますけどね。
#includeは特別。私にとってそんな考えは(?)なのです。
私が考えるところは、こんなところです。
なんか、自己弁護みたいになっちゃったけど、
#includeを書く方針になるなら、次からそれに従います。
>>544 あ、そうですね。紛らわしくて申し訳ない
>「#includeを含めなくてもいいんじゃない?」 これは非常に違います。このような態度はありえません。#includeなぞは 作品の芸術性の前にはとるに足らない問題だと言っている訳です。 #includeの有無に固執することは、「#!/usr/bin/perlを含めず7行」を認め ないことにつながり、このスレッドの表題を否定することにつながります。 ※誤解のないように言いますが、私自身は自分の作品の#includeに関しては 厳しくとっています。ここに出したのも、一つの作品を除いて#includeが あるし、残りの一つは#includeを入れるとコンパイルできなくなります。 (しかも、後に#include付のもので置き換えている。)私は#includeを含め ない、60さんのような作品のもつ自由な発送にある意味真似の出来なさを 感じた訳です。C++言語にしておいてextern"C"でprotoする辺りは、当然 と言えば当然のことですが、私にしてみればコロンブスの卵です。 これに比べれば、「#includeを含めた上で7行におさめようとする努力と その結果」である、519→526(私の作品ですが)はあまり尊敬の念に値し ないように思いますが。
ま、何かごちゃごちゃ書きましたが、要は、私は皆さんに自由な発送で 作品を投稿して頂いて、それを鑑賞したい訳です。そのためにはルールは 緩いほうが良い訳です。私自身は性格的な問題もあって厳しめのルールで やってしまい、発想力を失ってしまっているので、それを打ち破って欲し いのです。
>>550 投稿する人の勝手でいいじゃん。
どうしてもincludeを入れたくないなら入れなければいいし。
当然俺の評価は下がるけど、「include無しの評価を上げろ」っていわれても
そりゃ絶対無理だよ。屁理屈こねたところで構文エラーなんだし。
つーわけで俺の中でこれ以後504放置決定
ま、ぼくも補足しとこ
#includeを無条件に外すことに対して
「#includeを含めなくてもいいんじゃない?」
と主張することに対する意見であって不要だから外す、
っていうのとは別問題です。
>>537 は#includeをなくすトリッキーだけど正当な(?)手段なわけで、
これは問題にはしてませんので。
てか、これやろうとしてたけど、知識不足でできんかった(笑)
まぁ、ほぼトリッキーの1さんに賛成ってことで。
別に「7行じゃなきゃ投稿しちゃダメなスレ」なわけでもないんだから、
#include 無しだろうが何だろうが、書き込んでみるのは勝手でしょう。
ネタが面白かったり使われてる技が凄ければ、多少
長かったり何だったりしてもそれはそれで眺めてて楽しいし。
ただ、芸術性云々を持ち出して「処理系依存だけど7行」を
完成品として認めてしまうのは寂しい。
>>537 氏のような手を使ってもヨシ、#includeを一つでも減らせないか
考えてみるのもヨシ、他を気合いで短くするのもヨシ。
とにかくまだ改善すべき余地のあるものとして見たいと思う。
>>549 #!/usr/bin/perl は #include とは全然別のレベルっすよ。
それは比較にならない。
554 :
デフォルトの名無しさん :01/09/27 19:18
age
555 :
デフォルトの名無しさん :01/09/30 21:37
みんなネタ切れ?
556 :
デフォルトの名無しさん :01/10/01 01:15
httpdが7行になったら、使いたいな・・・・ 漏れはjavaできんので無理だが。
557 :
デフォルトの名無しさん :01/10/01 04:09
httpd、なんとかCで書けないだろうか
>>556 別に7行にこだわらんでもよいんじゃない?
1画面プログラムって程度で。
ステータスは 200 OK 404 NOT FOUND あと、フォルダのリスティングだけでいいのかな。 だったらやってみます。
#include <stdio.h> #include <winsock2.h> int s,c,z,l,p;char b[9999],*q;sockaddr_in i={2,20480},j;FILE*f;main(){WSADATA w ;WSAStartup(2,&w);s=socket(2,1,0);bind(s,(sockaddr*)(&i),16);listen(s,~(1<<31)) ;for(;;){z=16;p=0;c=accept(s,(sockaddr*)&j,&z);while(l=recv(c,b+p,9998-p,0)){p +=l;if(strstr(b,"\r\n\r\n"))break;}if(*b^71){q=b+5;while(*q!=32&&*q!=13)*q=(*q^ 47)?*q:92,q++;*q=0;if(f=fopen(b+5,"rb")){send(c,"HTTP/1.0 200 OK\r\n\r\n",19,0) ;while(l=fread((void*)b,1,9999,f))send(c,b,l,0);fclose(f);}else send(c,"HTTP/1\ .0 404 Not Found\r\n\r\n",26,0);}else send(c,"HTTP/1.0 400 Bad Request\r\n\r\n" ,30,0);closesocket(c);}} 動作も怪しいし、まだ全然練りこんでません。ベースとして使ってください。 10行なのでsage
Javaでストリームを扱うと、長いクラス名ばっかりなんで縮めづらい・・・
562 :
デフォルトの名無しさん :01/10/01 19:17
563 :
デフォルトの名無しさん :01/10/01 19:43
なんじゃこりゃ(w すごすぎ
シーラカンス
7行スレだから、やっぱり7行で応募か。 何かいいネタないかな
>>563 こういうコードを読む作業って、
自分のプログラミング能力を伸ばすための
良い訓練になるのかな?
>>561 Buffered*Stream使わないだけでも2行位縮まりそうな気がするです...
使わないでも動くんだけど、それはアリなんですかね?
# あ、Socketは最低限のBufferingはされてるか。
>>567 詰将棋を解くと将棋が強くなるか?という疑問に似てるな。
システム設計が上手くなったりはしないが、アルゴリズムの
発案は上手くなると思う。
571 :
トリッキーの1 :01/10/02 21:10
>>560 =60さん
まだよく見ていませんが、直感的に8行までなら何とかなりそうですね。
しかし、毎度ながら感服します(笑)
#もしよければ個人的な連絡を取ってみたいのですが、
#気が向いたら
[email protected] にメール貰えませんか?
前の、バグ持ちでした。
ってことで、修正版。
#include <stdio.h>
#include <winsock2.h>
int s,c,z=16,l,p;char b[9999],*q;FILE*f;main(){WSADATA w;sockaddr_in i={2,20480
};WSAStartup(2,&w);s=socket(2,1,0);bind(s,(sockaddr*)&i,z);listen(s,~(1<<31));
for(;;){p=0;c=accept(s,(sockaddr*)&i,&z);while(l=recv(c,b+p,9998-p,0)){p+=l;if(
strstr(b,"\r\n\r\n"))break;}if(*b^71)send(c,"HTTP/1.0 400 Bad Request\r\n\r\n",
30,0);else {q=b+5;while(*q!=32&&*q!=13)*q=(*q^47)?*q:92,q++;*q=0;if(f=fopen(b+5
,"rb")){send(c,"HTTP/1.0 200 OK\r\n\r\n",19,0);while(l=fread((void*)b,1,9999,f)
)send(c,b,l,0);fclose(f);}elsesend(c,"HTTP/1.0 404 Not Found\r\n\r\n",26,0);}
closesocket(c);}}
>>571 私の方もお話してみたいので、今夜あたりメール送ってみます
やってる事しょぼいけど3行って事で勘弁 #include<iostream.h> int a,b=2;void k(){if(a%b==0 && (a/=b))cout<<b<<",";else return;} void main(){cout<<"数入れろ";cin>>a;k();b--;while(a!=1 &&(b+=2))k();return;}
何やるか書いとこ #include<iostream.h> int a,b=2;void k(){if(a%b==0&&(a/=b))cout<<b<<",";else return;}void main(){cout <<"素因数分解"<<endl<<"数入れろ";cin>>a;k();b--;while(a!=1&&(b+=2))k();return;}
>>574 名前間違えました。573です。
ちなみにさっきのバグありました。
バグ修正ついでに約数も求めるようにしやした。
#include<iostream.h>
int a,b=2,c;k(){while(a%b==0&&(a/=b))cout<<b<<"×";}main(){cout<<"数入れろ";cin
>>a;c=a;k();for(b=3;a!=1;b+=2)k();for(a=1;a<=c;a++)if(c%a==0)cout<<a<<",";}
576 :
デフォルトの名無しさん :01/10/08 00:30
age
>>578 今更・・・(w
自分がどんなにイタイ発言をしているか分かっているの?
過去スレを読んでみな。
正直、579も痛い
俺は痛くないのか
・・・6行。 #include <stdio.h> char *p="char *p=%c%s%c;main(){printf(p,34,p,34);}"; void main(void) { printf(p, 34, p, 34); }
また三行でやってみました。 素数判定です。 それまでの素数を保存しない中ではいいとこいってる・・・・かな? #include<iostream.h> int main(){unsigned __int64 b=1,c=1,d=3,z,i=3;a:for(;i<c;i+=2){for(z=3;z<b;z+=2) if(i%z==0){i+=2;goto a;}cout<<i<<",";}b++;c+=d;d+=2;goto a;return 0;}
586 :
デフォルトの名無しさん :01/10/30 22:09
>>585 遅くてよけりゃ二行。
#include <iostream.h>
int main(){for(int z,i=1;z=++i;){while(i%--z);if(z==1)cout<<i<<",";}return 0;}
587 :
デフォルトの名無しさん :01/11/01 19:41
IDENTIFICATION DIVISION. PROGRAM-ID. AISATU. ENVIRONMENT DIVISION. DATA DIVISION. PROCEDURE DIVISION. DISPLAY "HELLO". STOP RUN. あっ、もう7行だ。
なかなかいいネタがないですね……
589 :
*nix厨 :01/11/02 16:20
それではネタ
>>588 1ソース多言語で"Happy 2ch world!"を出力する
・コンパイルのワーニングは無視してかまわない
・"Happy 2ch world!"以外はなるたけ出さない
・実行可能な言語を示す
(DOS窓とMS系OSのコマンドラインなどは1つとして数える)
例:DOS窓+C言語
rem (){printf("Happy 2ch world!\n");return 0;} main(){ /*
echo Happy 2ch world!
rem */
rem ();return 0;}
元ネタ(f77,c,/bin/shの3つ)
http://www.ioccc.org/1986/applin.c
>>589-590 7行にどれだけ言語を盛り込めるか大会。
…にしてしまえば、そうスレ違いでもないかも?
>>591 それでも面白そうですが、7行の美しさはまた別の所にあるような気がして。
8行で言語を詰め込んだのを、7行にしてもあまり驚きは無いでしょう?
(少なくとも、今までのこのスレのプログラムのような)。
とはいえ、別にここでもいいし、いっそのこと別スレにするという手もありますね(笑)
*nix厨さんの意向に従います。
593 :
トリッキーの1 :01/11/04 09:28
かなり頑張ったわりに反響が全然無かった(涙)
>>540 >後で気が向いたら、もう少し削ってみます。もしかしたら後1行くらいいけるかも。
さっき気が向いて、さぁ後1行削ってみよう!と思ったけれど、時間が経つと駄目だね。
変数名の意味を全然覚えていなくて、展開してみてもわけわからん……
自分で自分のコードを解析しています(笑)。新しく書いた方が楽かも。
594 :
デフォルトの名無しさん :01/11/04 09:36
絶対俺のほうがスゲェ
>>585 #include<iostream.h>
int main(){unsigned int i=1,b=1,c=1,z;a:for(;i+=2;){if(c<i)c+=1+(b++<<1);
for(z=3;z<=b;z+=2)if(i%z==0)goto a;cout<<i<<",";}return 0;}
ちょっとだけ短くしてみた。
age
ekat _ [] = [] ekat n (x:xs) = (map (take n)(take n (iterate tail (cycle x )))) ++ (ekat n xs) mrep 1 = [[1]] mrep n = ekat n (map (n:)(mrep (n-1))) pretty x = sequence_ (map print x) main = do x <- getNum ;pretty (mrep x) where getNum :: IO Int getNum = do{args<-getArgs;readIO (args!!0) } 引数nに対してnPnを出力。
599 :
デフォルトの名無しさん :01/12/20 19:59
600ズザー
601 :
デフォルトの名無しさん :01/12/21 00:16
603 :
デフォルトの名無しさん :01/12/21 00:53
58文字のソート関数 s(int*a,int*b){while(a<b)*a>*b?*a^=*b^=*a^=*b:s(a++,b-1);}
LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/Cpp1.exe : fatal error LNK1120: 外部参照 1 が未解決です。
605 :
デフォルトの名無しさん :01/12/21 18:05
なんて古いスレなんだ、、、、
1> #include <stdio.h> 2> #include <stdlib.h> 3> int main() 4> { 5> printf("ageてごめん。\n"); abort(); 6> } 7>
やべ、、returnし忘れた(鬱
print << 'EOF'; このスレッドは大耳モナーが嫌々管理中です、なんら問題はありません. (\_/) タリー ( ´Д) タリー タリー / つ (\_/) (\_/)ノ⌒ヽ、 (_(__つ⊂(´Д`⊂⌒`つ(´Д` )_人__) )) EOF
/* こんなスレあったんですね。 Win98にはdump.exeがナイので昔作ったモノ。技のないダサいプログラムですが。*/ #include <stdio.h> main(a,v)char**v;{FILE*f;char c,s[80],t[20];long p=0,m=0,n;if(a>1&&(f=fopen (v[1],"rb"))){if(a>2)sscanf(v[2],"%x",&p);if(p>0)fseek(f,p,SEEK_SET);if(a>3 )sscanf(v[3],"%x",&m);if(n=p%16){sprintf(s,"%08X: %*s",p,n*3,"");sprintf(t, "%20s","");}for(;(!m||p<m)&&fread(&c,1,1,f);p++){if(!(n=p%16))sprintf(s,"%" "08X: ",p);sprintf(s+9+n*3," %02X",c&255);t[n]=(((unsigned)c<32||c==127)? '.':c);t[n+1]=0;if(n==15)printf("%s : %""s\n",s,t);}if(p%16)printf("%-58s:" " %s\n",s,t);}else puts("USAGE:dmp filename [start [end]]");}
611 :
デフォルトの名無しさん :01/12/24 11:32
誰か14行でRogue作って
>>609 オーバーフロー発見。鬱死。t[20]->t[24]。
その他小細工。
#include <stdio.h>
p,m,n;main(a,v)char**v;{FILE*f;char c,s[80],t[24];if(a>1&&(f=fopen(v[1],"rb"))){
if(a>2)sscanf(v[2],"%x",&p);fseek(f,p,SEEK_SET);if(a>3)sscanf(v[3],"%x",&m);if(n
=p%16)sprintf(s,"%08X: %*s",p,n*3,""),sprintf(t,"%20s","");for(;(!m||p<m)&&fread
(&c,1,1,f);p++){if(!(n=p%16))sprintf(s,"%08X: ",p);sprintf(s+9+n*3," %02X",c&255
);t[n]=((c&255)<32||c==127)?46:c;t[n+1]=0;if(n==15)printf("%s : %s\n",s,t);}if(p
%16)printf("%-58s: %s\n",s,t);}else puts("USAGE:dmp filename [start [end]]");}
printf("age");
614 :
デフォルトの名無しさん :01/12/29 01:24
#include <iostream> using namespace std; int main(void) { cout<<"ほんとに7行でプロテクトはずせるの?"<<endl; return(0); }
615 :
デフォルトの名無しさん :01/12/29 11:11
保守sage
ををこのスレも生きてる♪懐かしい♪sage
618 :
デフォルトの名無しさん :02/01/24 07:41
C/C++のコメント行を削除できたらいいなとねがう #include <stdio.h> #include <string.h> int f,b;main(v,c)char*c[];{FILE*i,*o;char*p,*q,s[256];sprintf(s,"%s~",c[1]);if( i=fopen(c[1],"rb")){if(o=fopen(s,"wb")){while(fgets(s,255,i)){p=strstr(s,"//"); if(p&&*(p-1)!='"')*p=0;else{if(!f){p=strstr(s,"/*");if(p){f=1;b=1;q=strstr(p, "*/");if(q){q=p+2;f=0;}else*p = b = 0;}}else{q=strstr(s,"*/");if(q){strcpy(s,q+ 2);f=0;}}}if(!b){fputs(s,o);}b=f;}fclose(o);}fclose(i);}}
619 :
デフォルトの名無しさん :02/01/24 16:56
短縮おながいします。VC++用。 #include "stdafx.h" int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { char ch[50],title[]="NOTICE v1.00"; unsigned int gs,gm,gh; for(;;) { gs=GetTickCount()/1000; gm=gs; gm/=60;gs%=60; gh=gm; gh/=60;gm%=60; wsprintf(ch,"起動してから %d 時間 %d 分 %d 秒",gh,gm,gs); if(MessageBox(NULL,ch,title,MB_RETRYCANCEL)==IDCANCEL) break; Sleep(1000); } return 0; }
620 :
>>619 :02/01/24 17:39
かきかわんねーけど、いいんかいな? char ch[50],title[]="NOTICE v1.00"; for(;;) { unsigned int gs=GetTickCount()/1000; wsprintf(ch,"起動してから %d 時間 %d 分 %d 秒",gs/3600,(gs/60)%60,gs%60); if(MessageBox(NULL,ch,title,MB_RETRYCANCEL)==IDCANCEL) return 0; Sleep(1000); }
621 :
デフォルトの名無しさん :02/01/24 17:41
>>619 さん
こんなのはどうでしょう。
終了しないけど、それほど邪魔にもならない……かな?(--;;;)
#include <windows.h>
int WINAPI WinMain(i,p,l,n){HWND h;DWORD d;char c[99];RECT r;HDC q;while(1){h=
GetDesktopWindow();d=GetTickCount()/1000;wsprintf(c,"起動してから %d 時間 %d \
分 %d 秒",d/3600,d/60%60,d%60);GetWindowRect(h,&r);q=GetWindowDC(h);
SetTextColor(q,0xFF0000);DrawText(q,c,-1,&r,DT_RIGHT|DT_TOP|DT_SINGLELINE
);InvalidateRect(h,&r,1);Sleep(1000);}return 0;}
ありゃ。whileの位置が変だ。 #include <windows.h> int WINAPI WinMain(i,p,l,n){HWND h;DWORD d;char c[99];RECT r;HDC q; h=GetDesktopWindow();GetWindowRect(h,&r);q=GetWindowDC(h);SetTextColor(q, 0xFF0000);while(1){d=GetTickCount()/1000;wsprintf(c,"起動してから %d 時間 %d \ 分 %d 秒",d/3600,d/60%60,d%60);DrawText(q,c,-1,&r,DT_RIGHT|DT_TOP|DT_SINGLELINE );InvalidateRect(h,&r,1);Sleep(1000);}return 0;}
>620,623,624 oh!!ここまで化けるとは。非常に感激していますヽ( ´ー`)ノ 調子に乗って、終了を追加してみたり…。 でも1行オーバー(;´Д`) #include <windows.h> int WINAPI WinMain(i,p,l,n){HWND h;DWORD d;char c[128];RECT r;HDC q; h=GetDesktopWindow();GetWindowRect(h,&r);q=GetWindowDC(h);SetTextColor(q, 0xFF0000);int vk=0;while(!vk){d=GetTickCount()/1000; vk=GetAsyncKeyState(VK_SHIFT)&GetAsyncKeyState(VK_CONTROL); wsprintf(c,"起動してから %d 時間 %d 分 %d 秒 SHIFT+CTRLで終了",d/3600,d/60%60,d%60); DrawText(q,c,-1,&r,DT_RIGHT|DT_TOP|DT_SINGLELINE);InvalidateRect(h,&r,1); Sleep(1000);}return 0;} >624に準じて改造しましたが、ウチではVC++がだだこねてエラーを吐き出すので、 WinMain付近を619のに差し替えて動かしました。
インクルードディレクティブで1行喰うのは痛いですなぁ。
>>619 さん
おお、頑張ってますね。
んじゃ、ちょっときわどい手を使いますが、7行にまとめてしまいませう。
#include <windows.h>
int WINAPI WinMain(i,p,l,n){HWND h;DWORD d;char c[99];RECT r;HDC q;int k=0;
h=GetDesktopWindow();GetWindowRect(h,&r);q=GetWindowDC(h);SetTextColor(q,
0xFF0000);while(!k){d=GetTickCount()/1000;k=GetAsyncKeyState(VK_SHIFT)&
GetAsyncKeyState(VK_CONTROL);wsprintf(c,"起動してから %d 時間 %d 分 %d 秒 SHIF\
T+CTRLで終了",d/3600,d/60%60,d%60);DrawText(q,c,-1,&r,34);InvalidateRect(h,&r,
1);Sleep(1000);}return 0;}
同じ手法を使えばもう少し縮みそう。
WinMainは、うちのVC++では警告3つで通してくれました(^^;)
あと、ファイルの拡張子はcppではなく、cで。 cppだとだめなようです。
assume cs:code ds:code code test org 100h start: mov dx,offset mes1 mov ah,09h int 21h mes1 DB 'あせむぶら!',0Dh,0Ah,'$' code ends end start
#include <windows.h> int WINAPI WinMain(i,p,l,n){HWND h;DWORD d;char c[99];RECT r;HDC q;int k=0; h=GetDesktopWindow();GetWindowRect(h,&r);q=GetWindowDC(h);SetTextColor(q, 0xFF0000);while(!k){d=GetTickCount()/1000;k=GetAsyncKeyState(16)& GetAsyncKeyState(17);wsprintf(c,"起動してから %02d 日 %02d 時間 %02d 分 \ %02d 秒 SHIFT+CTRLで終了",d/86400,d/3600%24,d/60%60,d%60);DrawText(q,c, -1,&r,34);InvalidateRect(h,&r,1);Sleep(1000);}return 0;} また、ヤッチャッタ。 欠点は49日までしか測定出来ないところ。
>>619 さん
お疲れ様です。49日多分対応……したと思うのですが。
実際にやってみないとわからないのが辛い(--;)
ついでに、表示されなくなるバグもこれで直ったかと。
#include <windows.h>
int WINAPI WinMain(i,p,l,n){HWND h;DWORD d,y=0;char c[99];RECT r;HDC q;int k=0,
z=0;h=GetDesktopWindow();while(!k){d=GetTickCount()/1000;d=d+z*0x418937;Sleep(
100);GetWindowRect(h,&r);k=GetAsyncKeyState(16)&GetAsyncKeyState(17);wsprintf(c
,"起動してから %02d 日 %02d 時間 %02d 分 %02d 秒 SHIFT+CTRLで終了",d/86400,d/
3600%24,d/60%60,d%60);q=GetWindowDC(h);SetTextColor(q,0xFF0000);DrawText(q,c,-1
,&r,34);if(k==1)k=0;InvalidateRect(h,&r,1);ReleaseDC(h,q);if(y>d)z++;y=d;}}
>>631 おお!スゴイです。早速コンパイルして使用しています。
以前のは、IEを動かすとたま〜に消えましたが、今回は消えない!
さすがに、これ以上は進化できないようです。
新ネタを思いついたら、また書くです(>▽<)。
誰か7行で超軽いOSをつくってください
634 :
デフォルトの名無しさん :02/02/01 04:49
最小の素数判定プログラムを作ってください。
>>634 int isprime(int n){return n == 2;}
636 :
デフォルトの名無しさん :02/02/02 02:29
>>634 int isprime(int n){
int i = 2;
if (n < 2) return 0; else if (n == 2) return 1;
while((n % i != 0) && (i < n)) i++;
return n == i;
}
みすった。 n % n == 0 なのは当たり前だから i < n っていらないや。 int isprime(int n){ int i = 2; if (n < 2) return 0; else if (n == 2) return 1; while(n % i != 0) i++; return n == i; }
>>634 int isprime(int n){
int i=2;if(n<2)return 0;
for(;i<=n/2;i++)if(n/i*i==n)
return 0;return 1;}
よくよく考えたら n==2 っていらんわ。 int isprime(int n){ int i = 2; if (n < 2) return 0; while(n % i != 0) i++; return n == i; }
偶数とnの平方根以上の数で計算する必要は ないのでは。
なんか見た目的に長くなっちゃうので(苦笑) もちろん分ってはいるのですが。
642 :
デフォルトの名無しさん :02/02/03 19:11
7行でCOM書けない?
DOSのCOM?COMコンポーネントならアクティブスクリプティングでなら簡単に書けそうだけど、 詰まんないかも。
int a[3],b=0;printf("<html><body><h1 style=\"background:black;color:white;\">色早見表</h1><pre>"); for(a[0]=0x00;a[0] <= 0xff;a[0]++)for(a[1]=0x00;a[1] <= 0xff;a[1]++) for(a[2]=0x00;a[2] <= 0xff;b++,a[2]++){ printf("<font color=\"#%02X%02X%02X\" size=1>●</font><tt>#%02X%02X%02X</tt>",a[0],a[1],a[2],a[0],a[1],a[2]); if(b == 16)printf(b=0,"\n"); }printf("</body></html>");//HTML1677万色表示
// 24時間以上前の話題でスマソ private static boolean isDividable( int n, int i ) { return ( i != 1 ) && ( n % i != 0 ) && isDividable( n, i-1 ); } public static boolean isPrime(int n) { return isDividable( n, n-1 ); }
>>646 自分にアフォとか言ってるアフォのいるスレはここですか?
648 :
デフォルトの名無しさん :02/02/07 03:40
>>645 再帰とは思いつかなかった。
短くて、素晴らしい。
649 :
デフォルトの名無しさん :02/02/07 04:22
>>645 >private static boolean isDividable( int n, int i ) {
> return ( i != 1 ) && ( n % i != 0 ) && isDividable( n, i-1 );
>}
↑これ不味くないかな?
iが1だと必ずfalseになっちゃう。
後、大きな数を調べようとすると再帰が多すぎてStackOverflowErrorになってしまう。
>>649 return ( i == 1 ) || (i > 0) && ( n % i != 0 ) && isDividable( n, i-1 );
return ( i <= 1 ) || ( n % i != 0 ) && isDividable( n, i-1 );
前者は遅い。後者は1以下を渡されてもtrueを返す…。
あと
return isDividable( n, sqrt(n) );
でちょっとだけ大きな数も調べれるように…。
>645 は、うまく素数判定をしない。 >650 さんのが正解だ... テストしないで書き込んじゃだめでしたね。スマソ。 >646 さんは、漏れに突っ込んだんだよね。たしかにアフォでした。
もはや7行とは何の関わりもないクソスレになりつつあるな。 嗚呼過去の栄光よ…
653 :
◆woDeLPHI :02/02/07 12:04
Delphiでこんなのはどうかな? 新規作成でコンソールアプリ選んで 出たソースを全部消して以下と置き換えてコンパイル&GO uses forms,math;var x,y:integer;x0,y0:double;begin with TForm.Create(nil) do try show; while Visible do begin application.ProcessMessages; x:=random(width); y:=random(Height); x0:=x0-(x0-width div 2 ) / (1000+random(1000))/1000; y0:=y0-(y0-height div 2 ) / (1000+random(1000))/1000; Canvas.Pixels[x,y]:=round(x0*cos(hypot(x-x0,y-y0)/32)*256); end; finally free;end; end.
あ、実行させたら リサイズさせてみて遊んでね
同じ趣向だけど 万華鏡もどき uses forms,math;var x,y,c:Word;a:array[byte]of byte;function f(n:byte):byte; begin Result:=round(cos(hypot((x+a[n*2])mod(c*2)-c,(y+a[n*2+1])mod(c*2)-c)/c) *255)end; begin c:=80;with TForm.Create(nil) do try show; while Visible do begin application.ProcessMessages; x:=random(width); y:=random(Height); case random(10000)of 1: inc(a[random(9)]);2:dec(a[a[8]mod 9]);end; Canvas.Pixels[x,y]:=f(0)+f(1)shl 8+f(2) shl 16; end; finally free;end; end.
656 :
デフォルトの名無しさん :02/02/07 16:50
Delphiものは
>>129 にAPIベースのウネウネがあるけど、VCL使うのは初出かな?
7行で砂時計を作ってみてください
658 :
デフォルトの名無しさん :02/02/07 19:46
むしろage
>657 あなたに指図される筋合いはありません。 何の権限があってそのような事を言うのですか?
じゃ 波紋 とか 雪の結晶は 難しい?
マインスイーパーを作って
マス目をクリックすると、マス目が開く 地雷を掘り出すと、ゲームに負け マス目に番号が表示された場合、その数は周囲の 8 個のマス目に隠れている地雷の数を示す 地雷があると判断したマス目に印をつける
>662
マインスイーパーは、
>>535-540 で出来てるぞ。
当時のレスを読みふけってしまった。
懐かしい面々、今はどうしているのかな?
665 :
波紋アプレット(10行) :02/02/09 22:45
--------W.java import java.awt.*;import java.awt.event.*;import java.awt.image.*;public class W extends java.applet.Applet{ImageProducer s;int w=64,T=4;int[] p=new int[w*w] ,v=new int[w*w];byte[] q=new byte[w*w],r=new byte[256],b=new byte[256];public void update(Graphics g){g.drawImage(createImage(s),0,0,w*T,w*T,0,0,w,w,null);} public boolean mouseDown(Event e,int x,int y){v[x/T+y/T*w]+=128;return true;}{ byte d=(byte)-128;for(int i=0;i<256;i++){r[(d++)&255]=(byte)i;b[i]=(byte)255;} s=new MemoryImageSource(w,w,new IndexColorModel(8,256,r,r,b),q,0,w);new Thread (){public void run(){for(;;){for(int i=w+1;i<w*w-w;i++){v[i]+=(p[i-w]+p[i-1]+p [i+1]+p[i+w])/4-p[i];p[i-w]+=v[i-w];q[i]=(byte)(p[i-w-1]-p[i]);}repaint();try{ sleep(50);}catch(Exception e){return;}}}}.start();}} --------w.html <HTML><BODY> <APPLET CODEBASE="." CODE="W.class" WIDTH="255" HEIGHT="255"></APPLET> </BODY></HTML> --------README なんか汚い パレット生成部分に無駄があるっぽい 挙動がやばい ツッコミは勘弁
>>665 見てみたす。
思わず目を細めてしまったのは、男の悲しいサガでしょうか?
Javaほとんどサパーリなので、コードに手入れできないや。
役に立てずスマソです。勉強しよっと。
667 :
デフォルトの名無しさん :02/02/14 02:48
BASIC感動しました。 ということで、FORTHは作れませんかね? 組み込む機能は小さくても自己拡張できるし。
668 :
デフォルトの名無しさん :02/02/14 23:22
>>667 辞書を別にすればできない気もしないな。
669 :
MASM 6 :02/02/15 00:37
.MODEL TINY .CODE ORG 100H MAIN PROC .exit MAIN ENDP END MAIN
basic実用になりそう
眺めているうちに面白い模様に〜。 簡単な7行demo作れそうな予感・・・
低速静的RangeCoder。7行なんてムリだ・・・
#include <stdio.h>
typedef unsigned long D;typedef unsigned char B;D f[256],tt;struct{D l,r;}t[256];
u(){D i,s=0;for(i=0;i<256;i++){t[i].r=f[i];t[i].l=s;s+=f[i];}tt=s;}wr(B *b,B *w,
D s,FILE *fp){D i,j,k,l,r,p,m;B c;for(i=0;i<256;i++)f[i]=0;for(i=0;i<s;i++)f[b[i
]]++;u();l=j=0;r=1UL<<31;for(i=0;i<s;){c=b[i++];m=r/tt;p=l;l+=m*t[c].l;r=m*t[c].
r;if(p>l){k=j-1;while(w[k]==0xFF)w[k--]++;w[k]++;}while(r<(1UL<<24)){w[j++]=(l>>
24)&0xFF;l<<=8;r<<=8;}}while(l){w[j++]=(l
>>24 )&0xFF;l<<=8;}j++;fwrite(f,4,256,fp
);fwrite(&s,4,1,fp);fwrite(&j,4,1,fp);fwrite(w,1,j,fp);}D lc(D l){D i;for(i=0;i<
255;i++)if(t[i].l<=l&&t[i+1].l>l)return i;return 0xFF;}D rd(B *b,B *w,D s,FILE*
fp){D o,i,j,k,d,l,r,m;for(i=0;i<s;i++)w[i]=0;fread(f,4,256,fp);fread(&o,4,1,fp);
fread(&j,4,1,fp);fread(w,1,j,fp);s=o;u();r=1<<7;l=w[0];k=(i=1)-1;while(s){while(
r<1<<24){l=(l<<8)|w[i++];r<<=8;}r/=tt;m=l/r;d=lc(m);b[k++]=d;l-=r*t[d].l;r*=t[d]
.r;s--;}return o;}main(int a,char *argv[]){FILE *i,*o;D n;B b[8192],w[8250];i=
fopen(argv[2],"rb");o=fopen(argv[3],"wb");while(!feof(i)){if(argv[1][0]=='e'){n=
fread(b,1,8192,i);wr(b,w,n,o);}else{n=rd(b,w,8192,i);fwrite(b,1,n,o);if(n!=8192)
break;}}fclose(o);fclose(i);}
674 :
デフォルトの名無しさん :02/02/16 21:25
age忘れた
--------E.java import java.awt.*;import java.awt.image.*;class E{public static void main( String[]a){new Frame(){int T=4,W=128,n=96,F=255,i;P[]p=new P[n];Image m;byte[] t=new byte[W*W],c=new byte[768];class P{double x,y,u=Math.random()*2-1,v=-Math .random()*1.5-.5;int s(){x+=u;y+=(v+=.01);return(int)x+(int)y*W;}}{for(i=0;i<n ;i++)p[i]=new P();for(i=0;i<F;i+=3){c[i]=c[i+256]=c[i+512]=(byte)i;c[i+F]=c[i+ 510]=c[i+511]=(byte)F;}show();MemoryImageSource s=new MemoryImageSource(W,W, new IndexColorModel(8,256,c,0,false),t,0,W);s.setAnimated(true);m=createImage( s);resize(512,512);repaint();try{for(;;Thread.sleep(15)){for(i=0;i<n;i++){int v=p[i].s();if(v>0&&v<W*W)t[v]+=128;}for(i=1;i<W*(W-1);i++)t[i]=(byte)(((t[i-1]& F)+(t[i+1]&F)+(t[i+W]&F))*F/768);s.newPixels();}}catch(Exception e){}}public boolean mouseDown(Event e,int u,int v){for(int j=0;j<n;j++){p[j]=new P();p[j]. x=u/T;p[j].y=v/T;}return true;}public void update(Graphics g){g.drawImage(m,0, 0,W*T,W*T,0,0,W,W,this);}};}} --------README 実行は > javac E.java > java E で、ウィンドウ上でクリックすれ 7行には遠く及ばなかった・・・ J2SE1.4で動作確認 MS Javaではかなり厳しい動作だたよ すまそ
1行縮んで、12行に。 次はL-Systemでもやってみようかな import java.awt.*;import java.awt.image.*;class E{public static void main( String[]a){new Frame(){class P{double x,y,u=Math.random()*2-1,v=-Math.random() *1.5-.5;int s(){return(int)(x+=u)+(int)(y+=(v+=.01))*W;}}int T=4,W=128,F=255,i ;P[]p=new P[0];Image m;byte[]t=new byte[W*W];public void update(Graphics g){g. drawImage(m,0,0,W*T,W*T,this);}public boolean mouseDown(Event e,int X,int Y){p =new P[96];for(int j=0;j<96;j++){(p[j]=new P()).x=X/T;p[j].y=Y/T;}return 0<1;} {for(i=0;i<F;i+=3){t[i]=t[i+256]=t[i+512]=(byte)i;t[i+F]=t[i+510]=t[i+511]=( byte)F;}MemoryImageSource s=new MemoryImageSource(W,W,new IndexColorModel(8,F+ 1,t,0,0<0),t,0,W);s.setAnimated(true);m=createImage(s);resize(W*T,W*T);show(); try{for(repaint();;Thread.sleep(15)){for(i=0;i<p.length;i++){int z=p[i].s();if (z>0&&z<W*W)t[z]+=128;}for(i=1;i<W*(W-1);i++)t[i]=(byte)(((t[i-1]&F)+(t[i+1]&F )+(t[i+W]&F))*F/768);s.newPixels();}}catch(Exception e){}}};}}
677 :
デフォルトの名無しさん :02/02/18 17:47
age
やはしあまりにも汚かったので修正。1行増えちったよ すまそ import java.awt.*;import java.awt.image.*;class W{public static void main( String[]a){new Frame(){int T=6,W=64,F=255,i,j;float r=1.414f;byte[]q=new byte[ W*W];float[]p=new float[W*W],v=new float[W*W];Image m;{byte d=(byte)-128;while (i<F+1){q[j=((d++)&F)*3]=q[j+1]=(byte)i;q[2+3*i++]=(byte)F;}MemoryImageSource s=new MemoryImageSource(W,W,new IndexColorModel(8,256,q,0,0<0),q,0,W);resize(W *T,W*T);s.setAnimated(true);m=createImage(s);show();try{for(repaint();;Thread. sleep(33)){for(i=W+1;i<W*W-W-1;i++){v[i]+=(p[i-W]+p[i-1]+p[i+1]+p[i+W]+(p[i-1- W]+p[i+1-W]+p[i-1+W]+p[i+1+W])/r-p[i]*2*(2+r))/4;if(v[i]>1/32f)v[i]=1/32f;p[i- W-1]+=v[i-W-1];q[i]=(byte)((p[i-W-1]-p[i])*F);}s.newPixels();}}catch(Exception e){}}public void update(Graphics g){g.drawImage(m,0,0,W*T,W*T,this);}public boolean mouseDown(Event e,int x,int y){v[x/T+y/T*W]-=.5;return 0<1;}};}}
美しさより短さが優先すると思われるが…
コードの美しさではなく画面出力の美しさだよ、念の為 コードの密度は上がってます。 あと、自分的には1024byteが目安。 スレの趣旨とはずれるけど7行はきつすぎっす。
681 :
ウィルスだ! :02/02/23 00:54
#include <stdio.h> //自己複写プログラム int main(int argc,char **argv) {char s[256];int i,c;FILE *fp,*ap = fopen(*argv,"rb");if(ap){ fclose(ap);for(i=0;i<10/* 試しに10個 */;i++){sprintf(s,"%d.exe",i); ap = fopen(*argv,"rb");fp = fopen(s,"wb");if(fp)while((c = fgetc(ap)) != EOF) fputc(c,fp); else printf("\"%s\":開けず\n",s);fclose(fp);fclose(ap);}} else{printf("*argv開けず\n");fclose(ap);return 1;}puts("正常終了");return 0;}
682 :
デフォルトの名無しさん :02/02/23 17:31
まぁ、漏れは1行でテトリス作れるが。
>>683 まちがったインベーダだ。
ちなみに約8000文字
スゲエ!スゲエよ、ここの人たち。 俺なんかまだまだだな〜。 いつか参加したいんで、出直してくるわ!
>684 インベーダごときで100行かい(1行80で割ったとして)。 このスレのオセロでも見て出直してくるんだな。
--------P.java import java.awt.*;import java.awt.event.*;import javax.sound.midi.*;class P{ public static void main(final String[]a)throws Exception{final Synthesizer s= MidiSystem.getSynthesizer();s.open();new Frame(){{show();addKeyListener(new KeyAdapter(){MidiChannel c=s.getChannels()[0];boolean[]f=new boolean[256];int i;public void keyPressed(KeyEvent e){i=a[0].indexOf(e.getKeyChar());if(i>=0&&! f[i]){f[i]=0<1;c.noteOn(i,64);}}public void keyReleased(KeyEvent e){if((i=a[0] .indexOf(e.getKeyChar()))>=0){f[i]=0<0;c.noteOff(i);}}});requestFocus();}};}} > javac P.java > java P ####################################zsxdcvgbhnjmq2w3er5t6y7ui9o0p QWERTYUIOP ドレミファソラシドレミ ZXCVBNM ドレミファソラシ かなり苦しいけど。Java1.3以上必須
#include <stdio.h> #include <string.h> void puttab(FILE *f,int t){while(t-->0)fputc('\t',f);}void i(char *f){FILE *s, *o;char *p,of[256];int c,in=0;strcpy(of, f);p=of;while(*(p++)!='.');strcpy(--p, "_i.c");s=fopen(f,"r");o=fopen(of,"w");if(s==NULL||of==NULL){fprintf(stderr, "Error:File not found.\n");fclose(s);fclose(o);return;}while((c=fgetc(s))!=EOF) {switch(c){case'{':fprintf(o,"{\n");puttab(o,++in);break;case'}':fseek(o,-1, SEEK_CUR);fprintf(o,"}\n");puttab(o,--in);break;case';':fprintf(o,";\n");puttab (o,in);break;case'\n':case'\t':break;default:fprintf(o,"%c",c);break;}}fclose(s) ;fclose(o);}int main(int a,char *v[]){if(a<=1){ fprintf(stderr,"usage :exec <sorcefile.c>\n");return 0;}i(v[1]);return 0;} もう出てたッヶ? 自動インデント。改行。 for(;;)の;まで改行しちゃうけど手動でやるよりマシ・・。(caseもね) 7行には遠いけどまぁ、役立つかもしれないってことで。 (エラー出力とか#include消せばいけるか)
>>688 一応、出来はアレだけど俺が作った126を
>>138 氏が改造してくれた版が。
あと1週間でこのスレ一周年か。懐かしいなぁ。
>>2 はどういう意味ですか?
java.io.BufferedInputStream@2a9835
と出るだけですが
>>690 その場の思いつきで書いてるんだろうから突っ込むな(笑)
7行テトリス希望
692 :
bakache :02/03/07 00:44
#include <winsock2.h> #include <io.h> void main(){WSADATA w;WSAStartup(257,&w);{SOCKADDR_IN a={2,20480};SOCKADDR*q=( SOCKADDR*)&a;SOCKET l=socket(2,1,0),s;bind(l,q,16);listen(l,5);for(;;){char b[ 4096],*p=b,*t="HTTP/1.0 200\r\n\r\n";int n=16;int r=recv((s=accept(l,q,&n)),b, 4096,0),i=0,f;while(i++<r)if(*p++<=' '){char*u=p;while(i++<r)if(*p++<=' '){*--p =0;send(s,t,16,0);*--u=':';*--u='C';f=open(u,32768);while((r=read(f,b,4096))>0) send(s,b,r,0);close(f);}break;}closesocket(s);}closesocket(l);}WSACleanup();} VC+Windows専用超簡易HTTP鯖...後1行けずれないっす。
27行で良ければぷよぷよがあるよ。
>>693 自慢したいなら別スレへ。
ココは7行スレなので、7行へ到達する意思がないならスレ違いです。
>>692 ちょっとだけ短く
f=open(u,32768);while((r=read(f,b,4096))>0)send(s,b,r,0);
↓
for(f=open(u,32768);read(f,b,1)>0;send(s,b,1,0));
Winはよくワカンナイっす
Range Encoder と適応的モデル
g++ 2.95.3 で動作確認。16MB近くのファイルまで圧縮可能。
(Borland C++ ではコンパイル不可)
圧縮データはエンディアンの異なるシステムでは非互換。
符号化: exec E infile outfile 復号: exec D infile outfile
モデル部と符号化部に分かれている上に、8行もあるのが・・・
// main.cpp (モデル部)
#include "range.h"
L u,i;main(int,char **V){L b=256,a[b],l,z=ios::binary;fstream g(V[2],ios::in|z)
,o(V[3],ios::out|z);g.seekg(0,ios::end);C s[l=g.tellg()];g.seekg(0,ios::beg);
g.read(s,l);g.close();R r,x;while(u<b)a[u++]=1;if(*V[1]-68){C t[l*2];r.p=t;
while(i<l){for(x.w=b=0;b<s[i];)x.w+=a[b++];x.r=a[s[i++]]++;x.e=u++;r.T(x);}
r.F();o.write(&l,4);o.write(t,r.o);}else{C t[l=*(L *)s];r.D(s);while(i<l){x.e=
u++;L v=r.V(x),w=b=0;for(;v>=w;w+=a[b++]);t[i++]=--b;x.w=w-(x.r=a[b]++);r.S(x);
}o.write(t,l);}}
// range.h (符号化部)
#include <fstream>
typedef unsigned long L;typedef unsigned char C;class R{public:L w,r,e,i,o;C
*g,*p;R(){r=-1;w=o=0;};L D(C *n){g=n+(i=4);w=g[0]<<24|g[1]<<16|g[2]<<8|g[3];};
L V(R s){while(r<1<<24)w=w<<8|g[i++],r<<=8;return w/(r/=s.e);};L S(R s){w-=r
*s.w;r*=s.r;};L F(){p[o++]=w
>>24 ;p[o++]=w
>>16 ;p[o++]=w
>>8 ;p[o++]=w;};L T(R s){
L t=r/s.e,l=w;w+=s.w*t;r=s.r*t;if(l>w){for(t=o-1;t>0,p[t]==255;p[t--]++);
p[t]++;}while(r<1<<24)p[o++]=w
>>24 ,w<<=8,r<<=8;};};
>>692 どのみち実行されないことを考えると
closesocket(l);とWSACleanup();
は削除してしまっても良いかも。
698 :
デフォルトの名無しさん :02/03/09 12:48
気体上げ
>>696 圧縮と展開にわけると、7行になりそうか?
=696
class を使うのをやめて、一本にしてみた。使い方は同じ。
現在11行。10行にはなりそうだが・・・。
#include <fstream>
typedef unsigned long L;typedef unsigned char C;L W=0,A=-1,E,O=0,u,i,b=256,a[b]
,l=ios::binary,X,Y,T,K;main(int,char **V){fstream g(V[2],ios::in|l),o(V[3],
ios::out|l);g.seekg(0,ios::end);C s[l=g.tellg()];g.seekg(0,ios::beg);g.read(s,l
);g.close();while(u<b)a[u++]=1;if(*V[1]-68){C t[l*2];while(i<l){for(X=b=0;b<s[i
];)X+=a[b++];Y=a[s[i++]]++;T=A/u++;K=W;W+=X*T;A=Y*T;if(K>W){for(T=O-1;T>0,t[O]
==255;t[T--]++);t[T]++;}while(A<1<<24)t[O++]=W
>>24 ,W<<=8,A<<=8;}t[O++]=W
>>24 ;t[
O++]=W
>>16 ;t[O++]=W
>>8 ;t[O++]=W;o.write(&l,4);o.write(t,O);}else{C t[l=*(L *)s]
;O=8;W=s[4]<<24|s[5]<<16|s[6]<<8|s[7];while(i<l){while(A<1<<24)W=W<<8|s[O++],A
<<=8;for(T=W/(A/=u++),K=b=0;T>=K;K+=a[b++]);t[i++]=--b;X=K-(Y=a[b]++);W-=A*X;A
*=Y;}o.write(t,l);}}
700 :
デフォルトの名無しさん :02/03/09 14:57
昔雑誌で「1行プログラミング」ってあったよね。 なんかなつかし
>>698 サンクス。
今の時点なら、符号化と復号ルーチンを分けると、7行以内になる。
でも、ここまで来たからには、両方で7行におさめたい。
符号化が復号の2倍長いのがイタイ・・・。
>>702 使いまくりです。
言語は何でもありってことなので、g++言語仕様でもよいのでは?ということでお願いします。
今、10行になりました。
うわー、失礼! コンパイルエラーのまま上げてました。直してます。 鬱だ。
修正版。
今日はここまでにします。
#include <fstream>
typedef unsigned long L;typedef unsigned char C;L W,A=-1,E,O,u,i,l=ios::binary,
X,Y,T,K;main(int,char **V){fstream g(V[2],ios::in|l),o(V[3],ios::out|l);L b=256
,a[b];g.seekg(0,ios::end);C s[l=g.tellg()];g.seekg(0,ios::beg);for(g.read(s,l);
u<b;)a[u++]=1;if(*V[1]-68){C t[l*2];while(i<l){for(X=b=0;b<s[i];)X+=a[b++];Y=a[
s[i++]]++;T=A/u++;K=W;W+=X*T;if(K>W){for(K=O-1;K,t[K]==255;t[K--]++);t[K]++;}
for(A=Y*T;A<1<<24;A<<=8)t[O++]=W
>>24 ,W<<=8;}t[O++]=W
>>24 ;t[O++]=W
>>16 ;t[O++]=W
>>8 ;t[O++]=W;o.write(&l,4);o.write(t,O);}else{C t[l=*(L *)s];W=s[4]<<24|s[5]<<
16|s[6]<<8|s[7];for(O=8;i<l;A*=Y){for(K=b=0;A<1<<24;A<<=8)W=W<<8|s[O++];for(T=W
/(A/=u++);T>=K;K+=a[b++]);t[i++]=--b;X=K-(Y=a[b]++);W-=A*X;}o.write(t,l);}}
>>692 POSTリクエストには応えられないけど、GETリクエストのみ対応で良いなら
これで動く……はず、です。
#include <winsock2.h>
#include <io.h>
void main(){WSADATA w;WSAStartup(257,&w);{SOCKADDR_IN a={2,20480};SOCKADDR*q=(
SOCKADDR*)&a;SOCKET l=socket(2,1,0),s;bind(l,q,16);listen(l,5);for(;;){char b[
4096],*p=b,*t="HTTP/1.0 200\r\n\r\n",*u;int n=16;int r=recv((s=accept(l,q,&n)),
b,4096,0),i=0,f;u=(p+=5);while(i++<r)if(*p++<=' '){*--p=0;send(s,t,16,0);f=open
(u,32768);while((r=read(f,b,4096))>0)send(s,b,r,0);close(f);}closesocket(s);}}}
ちなみに、HTTPサーバー上のルートディレクトリは、実行ファイルのあるディレクトリになります。
>705 面白そうだがgcc専用じゃコンパイルすら出来ないんだろうな
mingwで簡単にコンパイルできるからそれでいいじゃん
>705 せっかく凄いんだから、標準C++で挑戦すればいいのに。 新しい環境用意してまでコンパイルする奴はあまりいないしね。俺みたいに(笑 まぁでもそこらへんは前に話し尽くされているとおり705さんの自由っすね
>>710 それは7行達成してからでもいいんじゃないか?
アルゴリズムを変えないと、これ以上は難しいです。
それでも、先のバージョンから40文字ほど縮めました。
673 さんに触発されて、自分のコードを書き直して始めたのですが、随分勉強になりました。
#include <fstream>
typedef unsigned long L;typedef unsigned char C;L b=256,a[256],W,A=-1,O,u,i,T,
K,l=ios::binary;main(int,char**V){fstream g(V[2],ios::in|l),o(V[3],ios::out|l)
;g.seekg(0,ios::end);C s[l=g.tellg()],c;g.seekg(0,ios::beg);for(g.read(s,l);u<
b;)a[u++]=1;if(*V[1]-68){C t[l*2];for(o.write(&l,4);i<l;K=W){for(T=b=0;b<s[i];
)T+=a[b++];W+=A/u*T;if(K>W)for(K=O;--K,!++t[K];);for(A=A/u++*a[s[i++]]++;A<1<<
24;A<<=8)t[O++]=W
>>24 ,W<<=8;}o.write(t,O);o<<(c=W
>>24 )<<(c=W
>>16 )<<(c=W
>>8 )<<(
c=W);}else{C t[l=*(L*)s];W=s[4]<<24|s[5]<<16|s[6]<<8|s[7];for(O=8;i<l;A*=a[b]
++){for(K=b=0;A<1<<24;A<<=8)W=W<<8|s[O++];for(T=W/(A/=u++);T>=K;K+=a[b++]);t[i
++]=--b;W-=A*(K-a[b]);}o.write(t,l);}}
713 :
デフォルトの名無しさん :02/03/10 01:03
>>712 unsigned long の long と ios::binary はなくても動いた。
cygwin + gcc 2.95.3_5
>>713 32bit 環境ですから long はいらないようですね。
ios::binary はどうなんでしょうか? とりあえず外してみました。
さらに、無理だと思われたそれ以外の個所も縮みました。
そのため、とうとう9行達成ができました。
そして、それによってさらにもう少し減るかもしれません。
#include <fstream>
typedef unsigned L;typedef unsigned char C;L W,O,u,i,l,T,K;main(int,char**V){L
b=256,a[b],A=-1;fstream g(V[2],ios::in),o(V[3],ios::out);g.seekg(0,ios::end);C
s[l=g.tellg()],t[l*2];g.seekg(0,ios::beg);for(g.read(s,l);u<b;)a[u++]=1;if(*V[
1]-68){for(o.write(&l,4);i<l;K=W){for(b=0;b<s[i];W+=A/u*a[b++]);if(K>W)for(K=O
;--K,!++t[K];);for(A=A/u++*a[s[i++]]++;A<1<<24;A<<=8)t[O++]=W
>>24 ,W<<=8;}o.
write(t,O);o<<C(W
>>24 )<<C(W
>>16 )<<C(W
>>8 )<<C(W);}else{C t[l=*(L*)s];for(W=s[4]
<<24|s[5]<<16|s[6]<<8|s[O=7];i<l;A*=a[b]++){for(K=b=0;A<1<<24;A<<=8)W=W<<8|s[
++O];for(T=W/(A/=u++);T>=K;K+=a[b++]);W-=A*(K-a[t[i++]=--b]);}o.write(t,l);}}
変数Tを消すことができました。 iも消せそうですが、うーん、無理かな。
>>715 まったくです。自分でも理解不能になってきました。
fstream を ifstream と ofstream に分けました。
#include <fstream>
typedef unsigned L;typedef unsigned char C;L W,O,u,i,l,A=-1;main(int,char**V){
L b=256,a[b],K;ifstream g(V[2]);g.seekg(0,ios::end);C s[l=g.tellg()],t[l*2];g.
seekg(0,ios::beg);for(g.read(s,l);u<b;)a[u++]=1;ofstream o(V[3]);if(*V[1]-68){
for(o.write(&l,4);i<l;K=W){for(b=0;b<s[i];W+=A/u*a[b++]);if(K>W)for(K=O;!++t[
--K];);for(A=A/u++*a[s[i++]]++;A<1<<24;A<<=8)t[O++]=W
>>24 ,W<<=8;}o.write(t,O);
o<<C(W
>>24 )<<C(W
>>16 )<<C(W
>>8 )<<C(W);}else{C t[l=*(L*)s];for(W=s[4]<<24|s[5]<<
16|s[6]<<8|s[O=7];i<l;A*=a[b]++){for(K=b=0;A<1<<24;A<<=8)W=W<<8|s[++O];for(A/=
u++;W/A>=K;K+=a[b++]);W-=A*(K-a[t[i++]=--b]);}o.write(t,l);}}
main(int,char**V)のintはLに変えてもOKだな あと、エンディアン変換のところ、デコード側で工夫すれば 変換しないでそのままストアできそうだから、縮むかも
>>718 > intはLに
あ、そうですね。ありがとうございます。
しかし、エンディアン変換とはどこのことでしょうか。
o<<C(W
>>24 )<<C(W
>>16 )<<C(W
>>8 )<<C(W);
でしょうか。
それとも、エンコード時のt[0]からt[3]を整数でストアして、
デコードのW=s[4]<<24... をたとえば W=*(L*)&s[4] にするということですか?
何にしてもそこら辺はやはりネックですね、どうしたもんでしょうか。
#この世にビッグエンディアンしかなければ・・・
あ、今気付いたんですが、 g.seekg(0,ios::beg); の ios::beg はいらないですね。
>o<<C(W
>>24 )<<C(W
>>16 )<<C(W
>>8 )<<C(W);
ここ。んで、デコード側は4バイトごとに読み込んで、
右シフトしながらデコードバッファに入れると。
キャスト連発が無駄にしか見えないんで
正直、このスレ見た後にプログラム組もうとすると、 感覚おかしくなってめちゃコード書きにくくなります(w
なんとなくあげ
>>721 符号語の読み書きをすべて4バイト単位に行うと、・・・可能でしょうかね。
ふむ。そうすると、s の読み込みも、逐次にすることもできそうですね。
そうなると、長さの算出(tellg)もいらなくなりますね。
うーむ。全体の設計、特にファイル入出力を見直してみます。
tellg 近辺を削除できたので、37バイト縮まりました。
本当に、7行いけるかもしれませんねぇ。嘘みたいだ。
4バイト入出力は、しかし、意外と難しそうです。
#include <fstream>
typedef unsigned L;typedef unsigned char C;L W,O,u,i,l,R=-1,K;main(L,char**V){
L b=256,a[b],R=-1,c;C*t=new C[1<<24];ifstream g(V[2]);ofstream o(V[3]);while(u
<b)a[u++]=1;if(*V[1]-68){for(;(c=g.get())<256;K=W,l++){for(b=0;b<c;W+=R/u*a[b
++]);if(K>W)for(K=O;!++t[--K];);for(R=R/u++*a[c]++;R<1<<24;R<<=8)t[O++]=W
>>24 ,
W<<=8;}o.write(&l,4);o.write(t,O);o<<C(W
>>24 )<<C(W
>>16 )<<C(W
>>8 )<<C(W);}else{g
.read(&l,4);g.read(t,4);for(W=*t<<24|t[1]<<16|t[2]<<8|t[3];i<l;R*=a[b]++){for(
K=b=0;R<1<<24;R<<=8,O++)W=W<<8|g.get();for(R/=u++;W/R>=K;K+=a[b++]);W-=R*(K-a[
t[i++]=--b]);}o.write(t,l);}}
8行目の O++ は要りません。 それから、変数 l も消せました。 もう寝ます・・・
>>724 R*=a[b]++
バグ。
1回目でa[256]を参照することになる
#include <fstream>
typedef unsigned char C;unsigned W,O,u=256,i,l,K,b,a[256],R=-1;main(int,char**V
){C*t=new C[1<<24];ifstream g(V[2]);ofstream o(V[3]);if(*V[1]-68){for(;(i=g.get
())<256;K=W,l++){for(b=0;b<i;W+=R/u*(a[b++]+1));if(K>W)for(K=O;!++t[--K];);for(
R=R/u++*(1+a[i]++);R<1<<24;R<<=8)t[O++]=W
>>24 ,W<<=8;}o.write(&l,4);o.write(t,O)
;o<<C(W
>>24 )<<C(W
>>16 )<<C(W
>>8 )<<C(W);}else{g.read(&l,4);g.read(t,4);for(W=*t<<
24|t[1]<<16|t[2]<<8|t[3];i<l;R*=++a[b]){for(K=b=0;R<1<<24;R<<=8,O++)W=W<<8|g.
get();for(R/=u++;W/R>=K;K+=a[b++]+1);W-=R*(K-a[t[i++]=--b]-1);}o.write(t,l);}}
8行まで縮みました
#include <fstream>
typedef unsigned char C;unsigned W,O,u=256,i,l,K,b,a[256],R=-1;main(int,char**V
){C*t=new C[1<<24];ifstream g(V[2]);ofstream o(V[3]);if(*V[1]-68){for(;(i=g.get
())<256;K=W,l++){for(b=0;b<i;W+=R/u*(a[b++]+1));if(K>W)for(K=O;!++t[--K];);for(
R=R/u++*++a[i];R<1<<24;R<<=8)t[O++]=W
>>24 ,W<<=8;}o.write(&l,4);o.write(t,O);o<<
C(W
>>24 )<<C(W
>>16 )<<C(W
>>8 )<<C(W);}else{g.read(&l,4);g.read(t,4);for(W=*t<<24|t
[1]<<16|t[2]<<8|t[3];i<l;R*=++a[b]){for(K=b=0;R<1<<24;R<<=8)W=W<<8|g.get();for(
R/=u++;W/R>=K;K+=a[b++]+1);W-=R*(K-a[t[i++]=--b]-1);}o.write(t,l);}}
あと69キャラクタですね
>>726 エンコード側は初期化していますし、デコード側も問題ないはずですが・・・
>>727 頻度を0で初期化して、計算時に+1するのは考えていたのですが、実装に手間取っていました。
先を越されてしまいましたね。さすがです。
というわけで、仕様を変更して、標準入出力を使うようにしました。
あと22−1文字です。
% exec < infile > outfile
#include <iostream>
typedef unsigned char C;unsigned W,O,u=256,i,l,K,b,a[256],R=~0,y=1<<24,x=u;main
(int,char**V){C*t=new C[y];if(*V[1]-69){cin>>O;cin.read(t,5);for(W=t[1]*y|t[2]
<<16|t[3]*x|t[4];l<O;R*=++a[b]){for(K=b=0;R<y;R*=x)W=W*x|cin.get();for(R/=u++;W
/R>=K;K+=a[b++]+1);W-=R*(K-a[t[l++]=--b]-1);}}else{for(;~(i=cin.get());K=W,l++)
{for(b=0;b<i;W+=R/u*(a[b++]+1));if(K>W)for(K=O;!++t[--K];);for(R=R/u++*++a[i];R
<y;R*=x)t[O++]=W/y,W*=x;}cout<<l<<C(0);t[O++]=W/y;t[O++]=W
>>16 ;t[O++]=W/x;t[O++
]=W;}cout.write(t,O);}
>>726 エンコード側は初期化していますし、デコード側も問題ないはずですが・・・
デコード側で問題がある。
新しい版では修正されてるようですね char a[256]で確保して、a[256]を参照していた
>>731 さっぱりわかりません・・・。
デコード側2個目の for で K=b=0 してありますし、
データが正しければその後、b に 256 が入ることはないと思うのですが・・・。
私は、何か勘違いしているんでしょうか?
>>732 スマソ激しく勘違いしてました。
出直してきます
>>733 気にしないでください。
後21文字、頑張りましょう。
#include <iostream>
typedef char C;unsigned W,O,u=256,i,l,K,b,a[256],R=~0,y=1<<24,x=u;main(int,C**V
){C*t=new C[y];if(*V[1]-69){cin>>O;cin.read(t,5);for(W=t[1]*y|t[2]<<16|t[3]*x|t
[4];l<O;R*=++a[b]){for(K=b=0;R<y;R*=x)W=W*x|cin.get();for(R/=u++;W/R>=K;K+=a[b
++]+1);W-=R*(K-a[t[l++]=--b]-1);}}else{for(;~(i=cin.get());K=W,l++){for(b=0;b<i
;W+=R/u*(a[b++]+1));if(K>W)for(K=O;!++t[--K];);for(R=R/u++*++a[i];R<y;R*=x)t[O
++]=W/y,W*=x;}cout<<l<<C(0);t[O++]=W/y;t[O++]=W
>>16 ;t[O++]=W/x;t[O++]=W;}cout.
write(t,O);}
あと12文字。そろそろ限界近いかも
超スゲエ 褒め称えage
#include <iostream>
unsigned W,O,u=256,i,l,K,b,a[256],R=~0,y=1<<24,x=u;main(int,char**V){char*t=new
char[y];if(*V[1]-69){cin>>O;cin.read(t,5);for(W=t[1]*y|t[2]<<16|t[3]*x|t[4];l<O
;R*=++a[b]){for(K=b=0;R<y;R*=x)W=W*x|cin.get();for(R/=u++;W/R>=K;K+=a[b++]+1);W
-=R*(K-a[t[l++]=--b]-1);}}else{for(;~(i=cin.get());K=W,l++){for(b=0;b<i;W+=R/u*
(a[b++]+1));if(K>W)for(K=O;!++t[--K];);for(R=R/u++*++a[i];R<y;R*=x)t[O++]=W/y,W
*=x;}cout<<l<<' ';t[O++]=W/y;t[O++]=W
>>16 ;t[O++]=W/x;t[O++]=W;}cout.write(t,O);}
7行到達&頭が割れそう
あ、一文字オーバーのカウントかな? 最後は改行無しでスマソ
続いてたんだなここ・・・ httpdも算術符号もすごすぎ。
#include <iostream>
unsigned W,O,u=256,i,l,K,b,a[256],R=~0,y=1<<24,x=u;main(int,char**V){char*t=new
char[y];if(*V[1]-69){cin>>O;cin.read(t,5);for(W=t[1]*y|t[2]<<16|t[3]*x|t[4];l<O
;R*=a[b]){for(K=b=0;R<y;R*=x)W=W*x|cin.get();for(R/=u++;W/R>=K;K+=a[b++]+1);W-=
R*(K-++a[t[l++]=--b]);}}else{for(;~(i=cin.get());K=W,l++){for(b=0;b<i;W+=R/u*(a
[b++]+1));if(K>W)for(K=O;!++t[--K];);for(R=R/u++*++a[i];R<y;R*=x)t[O++]=W/y,W*=
x;}cout<<l<<' ';t[O++]=W/y;t[O++]=W
>>16 ;t[O++]=W/x;t[O++]=W;}cout.write(t,O);}
正真正銘到達age
です
って、ダメだ。テキストしか確認してなかった
742 :
デフォルトの名無しさん :02/03/11 22:50
737さん凄すぎ。縮むもんだねえ。 次のお題は Mersenne Twister でどうでしょ
>>742 ゴメン、737はダメです。
バイナリに適応できません。
現在あと1文字で修正版ができるはずです
鈴木氏の証人喚問をTVで見ていたら、またもや抜かされ・・・。
>>740 セパレータを cout<<l<<' ' から cout<<l<<-1 とすると、
1文字減らせます。
もちろん、デコーダーでは、cin.read(t,6) などとしていきます。
>>744 なるほどぉ出来ました
#include <iostream>
unsigned W,O,u=256,i,l,K,b,a[256],R=~0,y=1<<24,x=u;main(int,char**V){unsigned
char t[y];if(*V[1]-69){cin>>O;cin.read(t,6);for(W=t[2]*y|t[3]<<16|t[4]*x|t[5];l
<O;R*=a[b]){for(K=b=0;R<y;R*=x)W=W*x|cin.get();for(R/=u++;W/R>=K;K+=a[b++]+1);W
-=R*(K-++a[t[l++]=--b]);}}else{for(;~(i=cin.get());K=W,l++){for(b=0;b<i;W+=R/u*
(a[b++]+1));if(K>W)for(K=O;!++t[--K];);for(R=R/u++*++a[i];R<y;R*=x)t[O++]=W/y,W
*=x;}cout<<l<<-1;t[O++]=W/y;t[O++]=W
>>16 ;t[O++]=W/x;t[O++]=W;}cout.write(t,O);}
ってことで7行です。
ロジックを縮めまくったcompさんに拍手
記念上げ!
>>745 とんでもない。最後の大詰めに貴方の大活躍があったならばこそです。
>>742 MTは基幹に関わる定数の数&桁が多いんで、
コード部分でやたらと稼がないとダメ&理論を熟知している人がすくないだろうから、
難易度高いね、ものすごく。
748 :
デフォルトの名無しさん :02/03/12 01:32
難易度高すぎるかな。
749 :
デフォルトの名無しさん :02/03/12 02:25
MTできちゃった
#include<stdio.h>
#define T(u,v) ((((u)&0x8000000|(v)&0x7FFFFFFF)
>>1 )^((v)&1?0x9908b0df:0))
typedef unsigned long L;unsigned long N=623,M=397,K=227,m[624],i;x(L s){m[0]=s;
for(i=1;i<N;i++)m[i]=69069*m[i-1];}ns(){for(i=0;i<K;i++)m[i]=m[i+M]^T(m[i],m[i\
+1]);for(;i<N;i++)m[i]=m[i-K]^T(m[i],m[i+1]);m[N]=m[M-1]^T(m[N],m[0]);i=624;}L
g(){L y;if(!i--)ns();y=m[624-i];y^=y
>>11 ;y^=(y<<7)&0x9d2c5680;y^=(y<<15)&0xefc\
60000;y^=y
>>18 ;return y;}main(){x(4357);while(1){printf("%lx\n",g());}}
750 :
デフォルトの名無しさん :02/03/12 10:12
完成版。1000個吐いたら止まる
#include<stdio.h>
#define T(u,v) ((((u)&0x8000000|(v)&0x7FFFFFFF)
>>1 )^((v)&1?0x9908b0df:0))
typedef unsigned long L;unsigned long N=623,M=397,K=227,m[624],i;x(L s){m[0]=s;
for(i=1;i<N;i++)m[i]=69069*m[i-1];}n(){for(i=0;i<K;i++)m[i]=m[i+M]^T(m[i],m[i+1
]);for(;i<N;i++)m[i]=m[i-K]^T(m[i],m[i+1]);m[N]=m[M-1]^T(m[N],m[0]);i=624;}L g(
){L y;if(!i--)ns();y=m[624-i];y^=y
>>11 ;y^=(y<<7)&0x9d2c5680;y^=(y<<15)&0xefc60\
000;return y^(y
>>18 );}main(){L a=1000;x(4357);while(a--){printf("%lx\n",g());}}
上の方にオセロがあったみたいだから、今度は将棋かチェスよろしく
ごめんバグあった。これで最終版です。
初期化にKnuthのランダムを使うバージョンです。
#include<stdio.h>
#define T(u,v) ((((u)&0x8000000|(v)&0x7FFFFFFF)
>>1 )^((v)&1?0x9908b0df:0))
typedef unsigned long L;L N=623,M=397,K=227,m[624],i;x(L s){m[0]=s;for(i=1;i<N;
i++)m[i]=69069*m[i-1];}n(){for(i=0;i<K;i++)m[i]=m[i+M]^T(m[i],m[i+1]);for(;i<N;
i++)m[i]=m[i-K]^T(m[i],m[i+1]);m[N]=m[M-1]^T(m[N],m[0]);i+=2;}L g(){L y;if(!i--
)n();y=m[624-i];y^=y
>>11 ;y^=(y<<7)&0x9d2c5680;y^=(y<<15)&0xefc60000;return y^(y
>>18 );}main(){L a=1000;x(4357);while(a--){printf("%08lx\n",g());}}
>>751 駒の動かし方パターンを持っておくだけで七行になりそうな気がするぞ(w
756 :
Javaさん :02/03/13 02:05
いまさらながらにHttpd index.htmlしか返せないのが //D.java import java.net.*;import java.io.*;class D extends Thread{OutputStream o;static void main(String[] s)throws Exception{ServerSocket t=new ServerSocket(80);while( true){new D(t.accept());}}D(Socket s)throws Exception{int q=s.getInputStream(). read();o=s.getOutputStream();start();}public void run(){try{BufferedReader f= new BufferedReader(new FileReader("index.html"));o.write(("HTTP/1.1 200 OK\nCon" +"tent-Type: text/html\n\n").getBytes());while(f.ready()){o.write((f.readLine()+ "\n").getBytes());}o.close();}catch(Exception e){}}} こんなかんじ? で、複数ファイル名対応にしようとすると7行の壁が,、、、 //同じくD.javaでスマソ import java.net.*;import java.io.*;class D extends Thread{OutputStream o;String v;static void main(String[] s)throws Exception{ServerSocket t=new ServerSocket (80);while(true){new D(t.accept()).start();}}D(Socket s)throws Exception{o=s. getOutputStream();v=new BufferedReader(new InputStreamReader(s.getInputStream()) ).readLine();v=v.substring(v.indexOf(" ")+2,v.lastIndexOf("H")-1);if(v.endsWith( "/"))v+="index.html";}public void run(){try{BufferedReader f=new BufferedReader( new FileReader(v));while(f.ready()){o.write((f.readLine()+"\n").getBytes());}o. close();}catch(Exception e){}}} "HTTP/1.1 ..."等のレスポンスまで削ってもきつい。 等幅で見ると余裕がないのが見え見え。。。 しかもカレントより上のディレクトリにもアクセスできる、、、、w #Javaは板違い?
上のほうの "HTTP/1.1 200 OK\nCon"+"tent-Type: text/html\n\n" の部分は、ただ行にぎっしり詰めるためだけの"+"です。 無くても7行で収まるけど、まぁ、ユルシテ、、、、
>>756 言語は問わないから Java でも別にかまわないと思われ
むしろ #include で1行使わされる C/C++ より有利かも
759 :
デフォルトの名無しさん :02/03/13 10:09
JAVA作品は多いよ7〜10あるんじゃない? Del坊ガンバレ まだ3作品しかない
>>756 あうー、Threadやめてしまうなりよ
import java.net.*;import java.io.*;class D{OutputStream o;String v;static void
main(String[]a){try{ServerSocket t=new ServerSocket(80);for(;;){Socket s=t.
accept();OutputStream o=s.getOutputStream();String v=new BufferedReader(new
InputStreamReader(s.getInputStream())).readLine();v=v.substring(v.indexOf(" ")+
1,v.lastIndexOf("H")-1);BufferedReader f=new BufferedReader(new FileReader(v));
while(f.ready())o.write((f.readLine()+"\n").getBytes());o.close();}}catch(
Exception e){}}}
どうなりか?7行。
>>760 あうっ! フィールドは使ってなかった...
けずると6行になっちゃうぞ?
塩基配列圧縮記念
http://www.zdnet.co.jp/news/bursts/0203/11/08.html データの遺伝子を調べるソフトです。
標準入力のデータから塩基配列を調べて、標準出力に出します。
何の工夫も無く、7行です。
% acgt < acgt.c
などとして遊んでください。
acgt.c ------------------------------------------
#include <stdio.h>
int main() {
char*s="ACGT",c,i;
while((c=getchar())!=EOF)
for(i=0;i<4;i++,c>>=2)
printf("%c",s[c&3]);
}
763 :
デフォルトの名無しさん :02/03/14 13:19
>>762 う〜ん,気にいった。何の役にも立たないところが良い。
あれ?>762は正しいの? Cなんて忘れたけどさ、intで受けないと変なとこで終わらない?
つーか、永遠に終わらない
シロウト考えではFFを読み込んだときに終わっちゃいそうにオモタ。
767 :
デフォルトの名無しさん :02/03/14 21:39
ctrl+Z でも ctrl+C でも終るだろう?
768 :
デフォルトの名無しさん :02/03/15 10:26
#include<stdio.h> main(){int a[99],c,i,n;for(i=0;i<99;i++)a[i]=0;*a+=1;for(n=256;n>0;n--){for(i=c= 0;i<99;i++){a[i]+=c;c=a[i]%n;a[i]/=n;c*=1000000;}*a+=1;}for(i=0;i<99;i++)printf( i?"%06d":"%d.",a[i]);printf("\n");} 自然対数の底。既出かね
770 :
Javaさん :02/03/15 21:16
>>760 なるほど、スレッドを使わないのも簡易HTTPサーバとしてはありですね.
少しでも重いコンテンツを載せると終了しますが、、.
あと、コピペしてコンパイルしてみましたが、そのソースだと動かないようです.
v.indexOf(" ")+1のところは+2でないとダメですね.
スレッドを使用したものも7行に縮めることに成功しました.
import java.net.*;import java.io.*;class D extends Thread{Socket s;static void
main(String[]z)throws Exception{ServerSocket t=new ServerSocket(80);for(;;)new D
(t.accept()).start();}public void run(){try{BufferedReader f=new BufferedReader(
new InputStreamReader(s.getInputStream()));String v=f.readLine();v=v.substring(
v.indexOf(" ")+2,v.lastIndexOf("H")-1);if(v.endsWith("/"))v+="index.html";f=new
BufferedReader(new FileReader(v));while(f.ready())s.getOutputStream().write((f.
readLine()+"\n").getBytes());s.close();}catch(Exception e){}}D(Socket a){s=a;}}
771 :
デフォルトの名無しさん :02/03/16 22:34
いえーいあげ 次のお題は、RSA暗号でどうよ
このスレすげぇなぁ…。
>>772 同意。
なんか、MSX-FANの一画面プログラムを思い出すなぁ
職人はすごいっすね
perl版の倉庫番は
>>120 で出ているけど、今度は C で倉庫番。
#include <stdio.h>
char*strchr(const char*,int),*d="?@` A",*c=" .+*#@",m[768],*p,*q=m,*r,a,j,l;int
i;t(char*x){return strchr(c,*x)-c;}main(){FILE*e=fopen("map","r");for(;i<768;)j
=getc(e),j==10?i|=31:0,m[i++]=j;for(;q<m+768;)r=c+t(q),!r||!*q?r=c:0,r==c+5?p=q
:0,l+=r==c+2,*q++=*r;for(;;l?0:exit(0),i=getchar()-104,i<0|i>4?0:(j=d[i]-64,q=p
+j,r=q+j,t(q)&4?0:(t(q)&2?t(r)>1?0:(l+=(t(q)&1)-t(r),*q=c[t(q)-2],*r=43-t(r)):1
)?*p=c[a],a=t(q),*q=64,p=q:0))for(q=m,i=0;i<792;)putchar(i++%33?*q++:10);}
・ASCIIコード依存な上sizeof(int)>=sizeof(char *)じゃないと動かない…。
・マップはファイル "map" から読み込む(最大31x24)。
・@が自分、+が荷物、.がマーカー、*がマーカー上の荷物、#は壁。
それ以外は道。
・hjkl + 改行で移動(vi or rogue風)。
サンプルの map ファイル。
x#######
##....x#
###...+###
#xx+#+x+x#
#x++xx#+x#
#xxxx#xxx#
####x@x###
xxx#####
#include <stdio.h> #define P(A,N,B,M) for(i=0;i<N;i++) putc(A, f); for(i=0;i<M;i++) putc(B, f); int x,y,k,i;main(){FILE *f=fopen("t.bmp","wb");P(66,1,77,1)P(54,1,132,1)P(3,1,0 ,5)P(54,1,0,3)P(40,1,0,3)P(64,1,1,1)P(0,2,240,1)P(0,3,1,1)P(0,1,24,1)P(0,6,132, 1)P(3,1,0,1)P(196,1,14,1)P(0,2,196,1)P(14,1,0,10)for(y=0;y++<240;)for(x=0;x++< 320;)for(k=0;k++<3;)putc(x*y*k/128,f);} BMPファイル生成; だれか残りの100文字でおもろいもん描画してみてくれ・・。 ってか、もっとちぢむのかな・・。 再帰の木の描画やろうと思ったんだが7行はムリか・・。
/* ta.cpp -- tar の展開 */ #include <fstream> main(){char*c,*b=new char[1<<24];for(;cin.read(b,512),*b;){cout<<b<<endl;int i, s;ofstream o(b);for(c=b+124,s=i=0;i<11;i++,c++)s=s*8+*c-48;cin.read(c,512*(s/ 512+1));o.write(c,s);}} 誰か、アーカイバを作ってということだったので、試し。 入力は、標準入力より。 ただし展開のみで、しかもファイルのみ。 ディレクトリの作成は対応したい予定。
777 :
デフォルトの名無しさん :02/03/19 01:23
BMPをJPGに7行で変換に挑戦してみるか。
>777 になにかを期待してた。そんな俺が悪いのか!
>>778 そんな778にささげる。
#!/bin/sh
convert $1 $2
2行でBMP2JPGコンバータだ。
sh と ImageMagik がインストールされていれば、な。
780 :
デフォルトの名無しさん :02/03/20 14:54
>779 いや、そういう意味じゃなくてね・・ ほら、ここ「7行プログラミング」でしょ・・
782 :
デフォルトの名無しさん :02/03/25 15:28
すまん・・・ネタのつもりじゃなかったんだが、どうしても7行には収まらん。 つーか無理っぽい気がしてきた。 7行関数 ってことにしても無理っぽいなぁ。
783 :
デフォルトの名無しさん :02/03/25 15:50
784 :
C_sugar :02/03/26 00:21
<html><head><script>var Ky=-1;var SHP,TId;var SL=1;var SRL=0;var SR=[];var D= document;function GBP(){do{var BP=Math.floor(Math.random()*400)}while(GI(BP)!= "□")return BP}function GS(){var F="";for(i=0;i<20;i++){for(j=0;j<20;j++){ var Id="F"+(i*20+j);F+=((i==0)||(i==19)||(j==0)||(j==19))?"<span id="+Id+ ">■</span>":"<span id="+Id+">□</span>"}F+="<br>";}SI("EX",F);SHP=GBP(); SI(SHP,"●");SI(GBP(),"▲");SR[0]=SHP;MS()}function MS(){if(Ky!=-1){SRL++;SHP+= [-1,-20,1,20][Ky];switch(GI(SHP)){case"●":case"■":clearTimeout(TId);alert( "GameOver");return;case"▲":SL++;SI(GBP(),"▲");}SR[SRL]=SHP;SI(SHP,"●");SI(SR[ SRL-SL],"□")}TId=setTimeout("MS()",100)}function SI(P,H){D.all["F"+P ].innerHTML=H}function GI(P){return D.all["F"+P].innerHTML}</script></head> <body onLoad="GS()" onKeyDown="javascript:Ky=event.keyCode-37;" Style=" font-family:monospace"><div id=FEX></div></body></html> Snake Game(JavaScript) 12行が限界でした。 IE5以上、シフトJIS。 カーソルキーで操作します。
785 :
デフォルトの名無しさん :02/03/26 01:49
>>784 すごい! おもしろい! はまってしまった・・・
なので10行まで縮めてみた。変数名勝手にいじってスマソ。
<html><head><script>var K=-1,P,T,M=1,L=0,Z=[],D=document,B,F,A;function R(){do{
B=Math.floor(Math.random()*400)}while(E(B)!="□")return B}function G(){F="";for
(i=0;i<20;i++){for(j=0;j<20;j++){A="F"+(i*20+j);F+=((i==0)||(i==19)||(j==0)||(j
==19))?"<span id="+A+">■</span>":"<span id="+A+">□</span>"}F+="<br>"}I("EX",F
);P=R();I(P,"●");I(R(),"▲");Z[0]=P;Y()}function Y(){if(K!=-1){L++;P+=[-1,-20,
1,20][K];switch(E(P)){case"●":case"■":clearTimeout(T);alert("Over");return;
case"▲":M++;I(R(),"▲")}Z[L]=P;I(P,"●");I(Z[L-M],"□")}T=setTimeout("Y()",100
)}function I(P,H){D.all["F"+P].innerHTML=H}function E(P){return D.all["F"+P].
innerHTML}</script></head><body onLoad="G()" onKeyDown="javascript:K=event.
keyCode-37;" Style="font-family:monospace"><div id=FEX></div></body></html>
題材キタ━━━( ゚∀゚ )━( ゚∀)━( ゚)━( )━(゚ )━(∀゚ )━( ゚∀゚ )━━━!!!! どうせIE5以上限定であるのなら、<html>とか削っちゃうとかw
787 :
デフォルトの名無しさん :02/03/26 02:38
>>786 削ってみた。実質9行になた。
●■などを半角にすると、バランス悪いので、やめた。
<script>var K=-1,P,T,M=1,L=0,Z=[],D=document,F="",C="<span id=F";function R(){
while(E(F=Math.ceil(Math.random()*399))!="□");return F}function G(){for(i=0;i<
400;i++){F+=C+i;F+=(i<20||i>380||i%20==0||i%20==19)?">■</span>":">□</span>";
if(i%20==19){F+="<br>"}}I("EX",F);I(P=Z[0]=R(),"●");I(R(),"▲");Y()}function Y
(){if(K!=-1){L++;P+=[-1,-20,1,20][K];switch(E(P)){case"●":case"■":
clearTimeout(T);alert("Over");return;case"▲":M++;I(R(),"▲")}I(Z[L]=P,"●");I(
Z[L-M],"□")}T=setTimeout("Y()",99)}function I(P,H){D.all["F"+P].innerHTML=H}
function E(P){return D.all["F"+P].innerHTML}</script><body onLoad="G()"
onKeyDown="javascript:K=event.keyCode-37;" Style="font-family:monospace"><div
id=FEX>
よく頑張るなぁ。。。
789 :
785=787 :02/03/26 03:05
>>788 パズルゲームです。はまると怖いです。
眠いです。寝ます。予約語を何とかしてください。お願いします。
<script>var K=-1,M=1,L=0,Z=[],D=document,T="",P="<span id=F";function R(){while
(D.all["F"+(F=Math.ceil(Math.random()*399))].innerHTML!="□");return F}function
G(){for(i=0;i<400;i++){T+=P+i;T+=(i<20||i>380||(i+1)%20<2)?">■</span>":">□"+
"</span>";if(i%20>18){T+="<br>"}}I("EX",T);I(P=Z[0]=R(),"●");I(R(),"▲");Y()}
function Y(){if(K!=-1){L++;P+=[-1,-20,1,20][K];switch(D.all["F"+P].innerHTML){
case"●":case"■":clearTimeout(T);alert("Over");return;case"▲":M++;I(R(),"▲")
}I(Z[L]=P,"●");I(Z[L-M],"□")}T=setTimeout("Y()",99)}function I(P,H){D.all["F"
+P].innerHTML=H}</script><body onLoad="G()" onKeyDown="javascript:K=event.
keyCode-37;" Style="font-family:monospace"><div id=FEX>
<script>var K=-1,M=1,L=0,Z=[],D=document.all,T="",P="<span id=F";function G(){ for(i=0;i<400;i++)T+=P+i+(i<20||i>380||(i+1)%20<2?">■":">□")+"</span>"+(i%20 >18?"<br>":"");I("EX",T);I(P=Z[0]=R(),"●");I(R(),"▲");Y()}function R(){while (D["F"+(F=Math.ceil(Math.random()*399))].innerHTML!="□");return F}function Y( ){if(K!=-1){P+=[-1,-20,1,20][K];X=D["F"+P].innerHTML;if(X!="□")if(X=="▲"){ M++;I(R(),X)}else{clearTimeout(T);alert("Over");return}I(Z[++L]=P,"●");I(Z[L- M],"□")}T=setTimeout("Y()",99)}function I(P,H){D["F"+P].innerHTML=H}</script> <body onLoad="G()" onKeyDown="javascript:K=event.keyCode-37"><tt id=FEX> うりゃ。8行。
<body onKeyDown="javascript:K=event.keyCode-37"><tt id=FEX><script>var K=-1,M=1, L=0,Z=[],D=document.all,T="",C="□",F;function R(H){while(D["F"+(F=Math.ceil(399 *Math.random()))].innerHTML!=C);I(F,H)}function I(P,H){D["F"+P].innerHTML=H}for( i=0;i<400;i++)T+=(i%20?"":"<br>")+"<span id=F"+i+">"+(i>19&&i<379&&(i+1)%20>1?C: "■")+"</span>";I("EX",T);R("●");P=Z[0]=F;R("▲");Y();function Y(){if(K!=-1){P +=[-1,-20,1,20][K];X=D["F"+P].innerHTML;if(X!=C)if(X=="▲"){M++;R(X)}else{alert( "Over");clearTimeout(T);return}I(Z[++L]=P,"●");I(Z[L-M],C)}T=setTimeout("Y()", 99)}</script> 動くかなあ
<body onKeyDown="K=event.keyCode-37"><tt id=FEX><script>var K=-1,M=1,L=0,Z=[],D= document.all,T="",C="□",F;function R(H){while(D["F"+(F=Math.ceil(Math.random()* 399))].innerHTML!=C);I(F,H)}function Y(){if(K+1){P+=[-1,-20,1,20][K];X=D["F"+P]. innerHTML;if(X!=C)if(X!="▲"){clearTimeout(T);alert("Over");return}else{M++;R(X) }I(Z[++L]=P,"●");I(Z[L-M],C)}T=setTimeout("Y()",99)}function I(P,H){D["F"+P]. innerHTML=H}for(i=0;i<400;i++)T+=(i%20?"":"<br>")+"<span id=F"+i+">"+((i+1)%20>1 &&i>19&&i<379?C:"■")+"</span>";I("EX",T);R("●");P=Z[0]=F;R("▲");Y();</script>
>>792 微妙に1列の文字制限オーバーしてない?
スマソ 改行コードを数えなければぴったり制限内だった
エラーで止またw ライン:3 文字:70 エラー:'D[...].innerHTML'はオブジェクトではありません タイミングは「1つ目の▲を取った時」
書き忘れ IEのバージョンは5.01のSP2
>791は動く。
<body onKeyDown="K=event.keyCode-37"><tt id=F><script>function R(H){while(D["F" +(S=Math.ceil(Math.random()*399))].innerHTML!=C);I(S,H)}function I(T,H){D["F"+T ].innerHTML=H}function Y(){if(K+1){P+=[-1,-20,1,20][K];X=D["F"+P].innerHTML;if( X!=C)if(X!="▲"){alert("Over");return}else{M++;R(X)}I(Z[++L]=P,Q);I(Z[L-M],C)} setTimeout(Y,99)}Q="<font color=green>●</font>",D=document.all,K=-1,M=1,L=0,Z= [],C="□",S="";for(i=0;i<400;i++)S+=(i%20?"":"<br>")+"<span id=F"+i+">"+((i+1)% 20>1&&i>19&&i<379?C:"■")+"</span>";I("",S);R(Q);P=Z[0]=S;R("▲");Y();</script> カラー蛇。
24時間と経たずに7行達成されるとは・・・。
800 :
C_sugar :02/03/26 19:43
いやあ、凄い。 結構削れるものですな。
HALWNULL(*USRCTL) FHSTTRN IP E DISK FLOGF O E DISK C IF *NULLIN(SHTNK) = *ON C EVAL LSHTNK_IND = *OFF C EVAL LSHTNK_VAL = 0 C ENDIF
>>801 はコンパイルエラーになる。正しくは
HALWNULL(*USRCTL)
FHSTTRN IP E DISK
FLOGF O E DISK
C IF *NULLIN(SHTNK) = *ON
C EVAL LSHTNK_IND = *OFF
C EVAL LSHTNK_VAL = 0
C ENDIF
C WRITE LOGR
だが8行になるので
HALWNULL(*USRCTL)
FHSTTRN IP E DISK
FLOGF O E DISK
C EVAL *IN01= *NULLIN(SHTNK)
C 01 EVAL LSHTNK_IND = *OFF
C 01 EVAL LSHTNK_VAL = 0
C WRITE LOGR
にする。(無理やりだな)
#include <windows.h> HWND h;HHOOK k;UINT c=0,d=0;EVENTMSG r[500],*y;void u(){UnhookWindowsHookEx(k); k=0;}long WINAPI p(int n,UINT w,long l){(long)y=l;switch(n){case HC_ACTION:if(c >498)u();r[c++]=*y;break;case HC_GETNEXT:*y=r[d];break;case HC_SKIP:if(c<++d){ u();d=0;}}return CallNextHookEx(k,n,w,l);}int WINAPI WinMain(HMODULE q,HMODULE, LPSTR,int){MSG m;if(h=CreateWindow("BUTTON","",WS_VISIBLE,0,0,50,50,0,0,q,0)){k =SetWindowsHookEx(WH_JOURNALRECORD,&p,q,0);while(GetMessage(&m,0,0,0))switch(m. message){case WM_CLOSE:case WM_RBUTTONDOWN:return 0;case WM_LBUTTONDOWN:if(!d)k =SetWindowsHookEx(WH_JOURNALPLAYBACK,&p,q,0);}}} 9行! ずっと記録し続ける(使えない)Windows用マクロ。左クリックで再生、右クリックで終了です。
804 :
デフォルトの名無しさん :02/03/27 18:34
縮んでいく過程が見ていて楽しいね よく7行(しかもカラー!)になるもんだ
>>803 それはもっと縮まりますね。
・ビットサイズによって宣言を統一
・switch:caseは使わない
・HC_ACTIONなどの識別子は数字に置き換える
でどうでしょう?
内容はコンパイルするのがたるいし使い方が解らなさそうなのでパス(^^;
感謝です。>805 ログを参考に少し実用的にしたら10行になってしもた。 Ctrl+Insertでマクロ記録開始、Ctrl+Pauseで記録終了、Ctrl+Deleteで再生です。 #include <windows.h> HWND g;HHOOK h=0;int m[8],a=0,b;EVENTMSG*t,s[999];void u(){UnhookWindowsHookEx( h);PostMessage(g,75,0,0);}long WINAPI p(int n,UINT w,long l){(long)t=l;if(!n)if (a>998||LOBYTE(t->paramL)==3)u();else s[a++]=*t;if(n==1)*t=s[b];if(n==2)if(++b >=a)u();return CallNextHookEx(0,n,w,l);}void r(int k){RegisterHotKey(g,k,2,k+45 );}int WINAPI WinMain(HMODULE i,HMODULE,LPSTR,int){WNDCLASS w={0,DefWindowProc, 0,0,i,0,0,0,0,"1"};RegisterClass(&w);g=CreateWindow("1",0,268959744,0,0,0,0,0,0 ,i,0);r(0);r(1);while(GetMessage((MSG*)m,g,0,0)!=-1){if(m[1]==786&&!h){a*=m[2]; b=0;h=SetWindowsHookEx(m[2],p,i,0);SetWindowText(g,"Active");}else if(m[1]==75) {h=0;SetWindowText(g,"--");}else DispatchMessage((MSG*)m);}return 0;}
>>806 各ボタンに機能を持たせるのではなくて、あるボタンを選び、一律に
例えば、Insertボタンを押すたびに
マクロ記録開始→記録終了→再生→マクロ記録開始→記録終了→・・・
というようなものにすればもっと削れるのではないですか?
あっ、すんません最低2つはボタンが必要ですね f^^) 記録開始、記録終了:Insert 再生:Delete みたいに。
>807,808 どうもありがとうございます。ただCtrl+Pauseは特殊なシーケンスらしく、helpで 推奨されてたのと、ちょっと処理する場所が違うので難しいです。
トリッキーの1の砂嵐プログラムとか、昔のWindows7行を参考にしてみそ。 先人達の偉大な知恵が振り絞られているぞ。 確かDefWindowsProcをプロシージャに割り当てて、 メッセージループの中でコマンドを処理していたはず。 もう少し発想をかえると7行いきそうだな。がんばれ。 7行いったらコンパイルしてみる(笑)
JavaScriptのカラー蛇すげえええ。参りました。
感動したのでライフゲーム作ってみますた <body><tt id=F><script>function I(T,H){D["F"+T].innerHTML=H}function J(T){ return(T+1)%10>1&&T>9&&T<89&&Z[W+T]==E}function Y(){for(i=0;i<100;i++){X=Z[W+i]; I(i,Z[W+i]);T=J(i-11)+J(i-10)+J(i-9)+J(i-1)+J(i+1)+J(i+9)+J(i+10)+J(i+11);if(X== E){if(T<=1||4<=T)X=C}else{if(T==3)X=E}Z[500-W+i]=X}W=500-W;setTimeout(Y, 200)}D= document.all,Z=[],W=0,C="□",E="■",S ="";for(i=0;i<100;i++){S+=(i%10?"":"<br>") +"<span id=F"+i+">□</span>";Z[i]=Z[500+i]=C}Z[53]=Z[54]=Z[55]=Z[64]=Z[74]=Z[84] =E;I("",S);Y();</script>
カラー蛇いいね。 暇つぶしのつもりがのめり込んじゃうよ! マインスイーパより中毒性ある
814 :
デフォルトの名無しさん :02/03/29 11:28
がんばってパート2まで維持するぞ!
815 :
デフォルトの名無しさん :02/03/29 18:09
ネタがないので、ライフゲームを縮めてみた。
蛇もそうだが、見た目は <b> の方が良いと自分では思われ。1文字縮むしw
<body><b id=F><script>D=document.all,Z=[],C="□",E="■",S="",W=0;for(i=0;i<100;
i++){S+=(i%10?"":"<br>")+"<span id=F"+i+">□</span>";Z[i]=Z[500+i]=C}Z[53]=Z[54
]=Z[55]=Z[64]=Z[74]=Z[84]=E;I("",S);Y();function J(T){return(T+1)%10>1&&T>9&&T<
89&&Z[W+T]==E}function I(T,H){D["F"+T].innerHTML=H}function Y(){for(i=0;i<100;)
{I(i,X=Z[W+i]);for(j=T=0;j<8;j++)T+=J(i-(j%2?-1:1)*[11,10,9,1][j
>>1 ]);Z[500+i++
-W]=X==E?T<2||T>3?C:X:T==3?E:X}W=500-W;setTimeout(Y,200)}</script>
<span>を使わなくてもいいね。
もっと縮められました。もうすぐ5行。
<body><b id=F><script>function Y(){for(i=0;i<100;){D["F"+i].innerHTML=X=Z[W+i]
for(j=T=0;j<8;j++){A=i-(j%2?-1:1)*[11,10,9,1][j
>>1 ];T+=(A+1)%10>1&&A>9&&A<89&&Z
[W+A]==E}Z[500-W+i++]=X==E?T<2||T>3?C:X:T-3?X:E}W=500-W;setTimeout(Y,99)}C="□"
S="",Z=[],D=document.all,W=0;for(i=0;i<100;Z[i++]=Z[500+i]=C)S+=(i%10?"":"<br>"
)+"<b id=F"+i+">□</b>";D["F"].innerHTML=S;Z[53]=Z[54]=Z[55]=Z[64]=Z[74]=Z[84]=
E="■";Y()</script>
<script>function Y(){for(i=0;i<100;){document.all["F"+i].innerHTML=X=Z[W+i];for (j=T=0;j<8;j++){A=i-[11,10,9,1,-1,-9,-10,-11][j];T+=(A+1)%10>1&&A>9&&A<89&&Z[W+ A]==E}Z[500-W+i++]=X==E?T<2||T>3?"□":X:T-3?X:E}W=500-W;setTimeout(Y,99)}Z=[]; for(W=i=0;i<100;Z[i++]=Z[500+i]="□")document.write((i%10?"":"<br>")+"<b id=F"+ i+">□</b>");Z[53]=Z[54]=Z[55]=Z[64]=Z[74]=Z[84]=E="■";Y()</script>
(´-`).。oO(ライフゲームって何なんだろう・・・)
820 :
デフォルトの名無しさん :02/03/29 19:51
初期パターンをエディットできるといいね 2行以上あるから、できるかな
エディット付きライフゲーム カーソル●を上下左右で移動、スペースで配置のトグル、リターンで実行です 場の大きさも14×14に広げました(端っこは異常地帯のままですが) <body onKeyDown=K=event.keyCode><script>function Y(){if(G){for(i=0;i<196;Z[500- W+i++]=X==E?T<2||T>3?"□":X:T-3?X:E)for(V(i,X=Z[W+i]),j=T=0;j<8;T+=(A+1)%14>1&& A>13&&A<181&&Z[W+A]==E)A=i-[15,14,13,1,-1,-13,-14,-15][j++];W=500-W;}else{if(K ==13){G=1;}else{if(K==32){Z[P]==E?Z[P]="□":Z[P]=E;}else if(K+1){V(P,Z[P]);P+=[ -1,-14,1,14][K-37];V(P,C);}}K=-1;}setTimeout(Y,199)}function V(L,H){D.all["F"+L ].innerHTML=H}D=document,Z=[];for(G=W=i=0;i<196;Z[i++]=Z[500+i]="□")D.write(i% 14?"":"<br>","<b id=F"+i+">□</b>");E="■";K=-1;V(P=91,C="●");Y()</script>
823 :
デフォルトの名無しさん :02/03/31 18:30
ネタ募集上げ
7行GUIあぷりトカ
>>824 GUIだけなら、今までそれなりにあった。
もうちょっと具体的になると、作品を作りやすいかも。
JavaScript でもぐら叩き、ってどですか?(ネタ)
作り始めてみたんですが、難航中。
テトリス。言語を問わず7行で作れるかな? Vzのマクロだと可能だけど(笑)
>>829 Vz買ったらテトリスマクロついてくるよ
マスターユーザーならみんな持ってるはず
>>830 Vz持ってないから、しらなかたよ。
調べたらテトリス以外にもいくつかマクロゲームがあたみたいね。
てっきり、
>>828 さんが作ったかとおもた。
作成にチャレンジしてみるか・・・
普通に作って10行くらいになれば、きっと縮められる。
掲示板を作成して下さい。 仕様はお任せします。
833 :
デフォルトの名無しさん :02/04/02 21:26
>>832 掲示板作るだけなら、7行で余裕だよね。その辺がネタ?
834 :
デフォルトの名無しさん :02/04/03 00:03
面白そうなので,参戦. import java.net.*;import java.io.*;class P extends Thread{public void run(){try{ int d;while((d=i.read())!=-1)o.write(d);}catch(Exception e){}}P(InputStream I, OutputStream O){i=I;o=O;}OutputStream o;InputStream i;public static void main( final String[]a)throws Exception{new Thread(){public void run(){try{ServerSocket s=new ServerSocket(8080);for(;;){Socket n=s.accept(),o=new Socket(a[0],Integer. parseInt(a[1]));new P(o.getInputStream(),n.getOutputStream()).start();new P(n. getInputStream(),o.getOutputStream()).start();}}catch(Exception e){}}}.start();}} うがぁ.あと1文字. プロキシ. java P host port
import java.net.*;import java.io.*;class P extends Thread{public void run(){try{ int d;while((d=i.read())!=-1)o.write(d);i.close();o.close();}catch(Exception e){ }}public static void main(final String[]a)throws Exception{ServerSocket s=new ServerSocket(8080);for(;;){Socket n=s.accept(),o=new Socket(a[0],Integer. parseInt(a[1]));new P(o.getInputStream(),n.getOutputStream()).start();new P(n. getInputStream(),o.getOutputStream()).start();}}P(InputStream I,OutputStream O) {i=I;o=O;}OutputStream o;InputStream i;} 激しく勘違い. でけた.どないや.
大体見ればわかるんですが、 言語を書いてくれるとうれしい。
春だねぇ。。
あげてみる
>>836 Java なり.
import java.net.*;import java.io.*;class P extends Thread{public void run(){try{
for(int d;(d=i.read())!=-1;)o.write(d);i.close();o.close();}catch(Exception e){}
}P(InputStream I,OutputStream O){i=I;o=O;}public static void main(final String[]
a)throws Exception{ServerSocket s=new ServerSocket(a.length>2?Integer.parseInt(a
[2]):8080);for(;;){Socket n=s.accept(),o=new Socket(a[0],Integer.parseInt(a[1]))
;new P(o.getInputStream(),n.getOutputStream()).start();new P(n.getInputStream(),
o.getOutputStream()).start();}}OutputStream o;InputStream i;}
改良版.
> java P host port [local port]
なり.
perl BBS, データファイル d 必要。date 付き。
FreeBSD 4.3 + Apache 1.3.24 で動作確認。
>>832 こんなもんでいいの?
--- a.cgi ---
#!/usr/bin/perl
print"content-type: text/html\n\n<html><form method='GET' action='a.cgi'>\
<input name=t><br>\n";$s=$ENV{"QUERY_STRING"};open(D,"d");@d=<D>;unless($s
eq""){($x,$a)=split("=",$s);
$a=~s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c",hex($1))/ge;
chomp($a);unless($a eq""){open(X,"date|");$x=<X>;open(D,">data");$x.=$a.
"<br>\n";print D "$x@d";}}print"$x@d";
841 :
デフォルトの名無しさん :02/04/04 08:42
>>832 >>840 漏れもちょっとやってみた。データファイルはa。
#!/usr/bin/perl
$_=$ENV{QUERY_STRING};y/&=/\0\0/;s/%(..)/pack H2,$1/eg;s/\n/<br>/g;y/+/ /;s/</
</g;s/>/>/;s/&//g;print"Content-type:text/html\n\n<html><body>";open
O,'>>a';%h=split/\0/;print O"$h{a}\t$h{b}\n"if$_;close O;open I,a;while(<I>){s
/\t|$/<br>/g;s/^/$. 名前:/;print}print"<form>名前<input value='名無しさん'name=
a><br><textarea name=b></textarea><input type=submit></form><br></body></html>"
7行BBS その昔、WebProg板で開発された物。 #!/usr/bin/perl %f=map{tr/+/ /;s/%(..)/pack"H2",$1/eg;s/</</g;s/>/>/g;s/"/"/g;$_} split/[&=]/,$ENV{QUERY_STRING};$f{n}||='名無し';open F,"+<bbs.dat";flock F,2; @e=<F>;if($f{m}){seek F,0,0;print F @e=("$f{n}:$f{m}<br>\n",@e)[0..99]} print qq{content-type:text/html\n\n<title>BBS</title><h1>BBS</h1><form action="bbs.cgi"><p>名前<input name=n value="$f{n}"><br>記事<input name=m size=50><br><input type=submit></p></form><hr><p>@e</p><hr>};
パックマン。 7行なんてとても無理です。というわけで16行。 16行なんて邪道だと思いますが、短くできるところがあったら教えてください。 敵の動きの深いループ文を何とかしたいけど・・・ あとルーチン化できると思うけど、できたとしても5行くらいしか短くならないなぁ・・・ #--- packman.pl ---# $w="#";$d=".";$s=" ";$p="P";$e="E";$o=$w x10;$m=$d x8;$b="$o\n";for($c=1;$c<=8 ;$c++){$b="$b$w$m$w\n";}$b="$b$o\n";$y=0;$c=0;$l=12;$lc=19;P:while($b=~ /[$d]+/og){substr($b,$l,1,$p);substr($b,$lc,1,$e);print$b;print"YOU:$y\n"; print"COM:$c\n";substr($b,$l,1,$s);substr($b,$lc,1,$s);$m=<>;chop($m);if($m eq "1"){$l=$l-1;$i=substr($b,$l,1);if($i eq$w){$l=$l+1;}}elsif($m eq"2"){if($l<= 86){$l=$l+11;}}elsif($m eq"3"){if($l>=20){$l=$l-11;}}elsif($m eq"4"){$l=$l+1; $i=substr($b,$l,1);if($i eq$w){$l=$l-1;}}elsif($m eq"e"){last P;}$i=substr($b, $l,1);if($i eq$d){$y=$y+1;}elsif($i eq$e){last P;}$r=int(rand(4));if($r<=2){$v =$lc-1;$i=substr($b,$v,1);if($i eq$d){$lc=$v;}else{$v=$lc+1;$i=substr($b,$v,1) ;if($i eq$d){$lc=$v;}else{$v=$lc-11;$i=substr($b,$v,1);if($i eq$d){$lc=$v;} else{$lc=$lc+11;$i=substr($b,$lc,1);if($i ne$d){$lc=$lc-11;$r=3;}}}}}if($r==3) {$m=int(rand(6));if($m>=4){$lc=$lc-1;$i=substr($b,$lc,1);if($i eq$w){$lc=$lc+2 ;}}elsif($m<=3&&$m>=2){if($lc>=86){$lc=$lc-11;}else{$lc=$lc+11;}}elsif($m==1){ if($lc<=19){$lc=$lc+11;}else{$lc=$lc-11;}}elsif($m==0){$lc=$lc+1;$i=substr($b, $lc,1);if($i eq$w){$lc=$lc-2;}}}$i=substr($b,$lc,1);if($i eq$d){$c=$c+1;}elsif ($i eq$p){last P;}} ######################################## 操作方法 1:左、2:下、3:上、4:右、e:終わる で、敵に当たったら終わり。 ########################################
13行(詰めて書いただけ) $w="#";$d=".";$s=" ";$o=$w x10;$m=$d x8;$b="$o\n";for($c=0;$c<8;$c++){$b.="$w". "$m$w\n";}$b.="$o\n";$y=$c=0;P:while($b=~/[$d]+/og){substr($b,$l=12,1,"P"); substr($b,$k=19,1,"E");print$b;print"YOU:$y\n";print"COM:$c\n";substr($b,$l,1, $s);substr($b,$k,1,$s);$m=<>;chop$m;if($m==1){$i=substr($b,--$l,1);$l++if($i eq $w);}if($m==2){$l+=11if($l<87);}if($m==3){$l-=11if($l>19);}if($m==4){$i=substr( $b,++$l,1);$l--if($i eq$w);}last P if($m eq"e");$i=substr($b,$l,1);$y++if($i eq $d);last P if($i eq"E");$r=int(rand(4));if($r<3){if(substr($b,$v=$k-1,1)eq$d){ $k=$v;}else{if(substr($b,$v=$k+1,1)eq$d){$k=$v;}else{if(substr($b,$v=$k-11,1)eq $d){$k=$v;}else{if(substr($b,$k+=11,1)ne$d){$k-=11;$r=3;}}}}}if($r==3){$m=int( rand(6));if($m>=4){$i=substr($b,--$k,1);$k+=2if($i eq$w);}elsif($m<=3&&$m>=2){ if($k>=86){$k-=11;}else{$k+=11;}}elsif($m==1){if($k<=19){$k+=11;}else{$k-=11;}} elsif($m==0){$i=substr($b,++$k,1);$k-=2if($i eq$w);}}$i=substr($b,$k,1);$c++if( $i eq$d);last P if($i eq"P");}
↑最後の最後で間違った、鬱だ・・・ $w="#";$d=".";$s=" ";$o=$w x10;$m=$d x8;$b="$o\n";for($c=0;$c<8;$c++){$b.="$w". "$m$w\n";}$b.="$o\n";$y=$c=0;$l=12;$k=19;P:while($b=~/[$d]+/og){substr($b,$l,1, "P");substr($b,$k,1,"E");print$b;print"YOU:$y\n";print"COM:$c\n";substr($b,$l,1 ,$s);substr($b,$k,1,$s);$m=<>;chop$m;if($m==1){$i=substr($b,--$l,1);$l++if($i eq$w);}if($m==2){$l+=11if($l<87);}if($m==3){$l-=11if($l>19);}if($m==4){$i= substr($b,++$l,1);$l--if($i eq$w);}last P if($m eq"e");$i=substr($b,$l,1);$y++ if($i eq$d);last P if($i eq"E");$r=int(rand(4));if($r<3){if(substr($b,$v=$k-1,1 )eq$d){$k=$v;}else{if(substr($b,$v=$k+1,1)eq$d){$k=$v;}else{if(substr($b,$v=$k- 11,1)eq$d){$k=$v;}else{if(substr($b,$k+=11,1)ne$d){$k-=11;$r=3;}}}}}if($r==3){ $m=int(rand(6));if($m>=4){$i=substr($b,--$k,1);$k+=2if($i eq$w);}elsif($m<=3&& $m>=2){if($k>=86){$k-=11;}else{$k+=11;}}elsif($m==1){if($k<=19){$k+=11;}else{$k -=11;}}elsif($m==0){$i=substr($b,++$k,1);$k-=2if($i eq$w);}}$i=substr($b,$k,1); $c++if($i eq$d);last P if($i eq"P");}
846 :
現在10行 :02/04/06 02:30
ヽ(`Д´)ノ 今日のところはこのくらいで勘弁しておいてやる sub v{substr$b,$_[0],1}sub u{substr$b,$_[0],1,$_[1]}@f=(sub{exit},sub{$i=v--$l; $l++if"#"eq$i},sub{$l+=11if$l<87},sub{$l-=11if$l>19},sub{$i=v++$l;$l--if"#"eq$i });$o="#"x10;$m="."x8;$b="$o\n".("#$m#\n"x8)."$o\n";$y=$c=0;$l=12;$k=19;while( $b=~/[.]+/g){u$l,"P";u$k,"E";print"${b}YOU:$y\nCOM:$c\n";u$l," ";u$k," ";$f[<>% 5]();$i=v$l;$y++if"."eq$i;exit if"E"eq$i;$r=int rand 4;if($r<3){if("."eq v$v=$k -1){$k=$v}else{if("."eq v$v=$k+1){$k=$v}else{if("."eq v$v=$k-11){$k=$v}else{if( "."eq v$k+=11){$k-=11;$r=3}}}}}if($r==3){$m=int rand 6;if($m>3){$i=v--$k;$k+=2 if("#"eq$i)}elsif($m>1){if($k>85){$k-=11}else{$k+=11}}elsif($m==1){if($k<20){$k +=11}else{$k-=11}}elsif($m==0){$i=v++$k;$k-=2if"#"eq$i}}$i=v$k;$c++if"."eq $i; exit if"P"eq$i}
9行、おやすみなさい $w='#';$d='.';$s=' ';$p='P';$e='E';$o=$w x10;$m=$d x8;$b="$o\n".("$w$m$w\n" x8) ."$o\n";$y=$c=0;$l=12;$k=19;while($b=~/[$d]+/){t($l,$p);t($k,$e);print$b."YOU:". "$y\nCOM:$c\n";t($l,$s);t($k,$s);chop($m=<>);$l+=u(--$l)eq$w if$m==1;$l+=$l<87? 11:0if$m==2;$l-=$l>19?11:0if$m==3;$l-=u(++$l)eq$w if$m==4;exit if$m eq'e';$i=u( $l);$y++if$i eq$d;exit if$i eq$e;if(int rand 4!=3){if(u($k-1)eq$d){$k--;}elsif(u ($k+1)eq$d){$k++;}elsif(u($k-11)eq$d){$k-=11;}elsif(u($k+11)eq$d){$k+=11;}}else{ $m=int rand 6;$k-=u(++$k)eq$w?2:0if$m==0;$k+=$k<20?11:-11if$m==1;$k+=$k>85?-11: 11if$m==2||$m==3;$k+=u(--$k)eq$w?2:0if$m>=4;}$i=u($k);$c++if$i eq$d;exit if$i eq $p;}sub u{substr$b,$_[0],1;}sub t{substr$b,$_[0],1,$_[1]}
でも、9行です $w='#';$d='.';$s=' ';$p='P';$e='E';$o=$w x10;$m=$d x8;$b="$o\n".("$w$m$w\n" x8) ."$o\n";$y=$c=0;$l=12;$k=19;while($b=~/[$d]+/){t($l,$p);t($k,$e);print$b."YOU:" ."$y\nCOM:$c\n";t($l,$s);t($k,$s);chop($m=<>);$l+=u(--$l)eq$w if$m==1;$l+=$l<87 ?11:0if$m==2;$l-=$l>19?11:0if$m==3;$l-=u(++$l)eq$w if$m==4;exit if$m eq'e';$i=u ($l);$y++if$i eq$d;exit if$i eq$e;if(int rand 4!=3){if(u($k-1)eq$d){$k--;}elsif (u($k+1)eq$d){$k++;}elsif(u($k-11)eq$d){$k-=11;}elsif(u($k+11)eq$d){$k+=11;}} else{$m=int rand 6;$k-=u(++$k)eq$w?2:0if$m==0;$k+=$k<20?11:-11if$m==1;$k+=$k>85 ?-11:11if$m==2||$m==3;$k+=u(--$k)eq$w?2:0if$m>=4;}$i=u($k);$c++if$i eq$d;exit if$i eq$p;}sub u{substr$b,$_[0],1;}sub t{substr$b,$_[0],1,$_[1]}
後半の敵アルゴリズムを整理したら簡単に達成できちゃったよ ヽ(`Д´)ノ ウワァァン
あと
>>846 でしちゃったエンバグも潰した
sub v{substr$b,$_[0],1}sub u{substr$b,$_[0],1,$_[1]}$o="#"x10;$m="."x8;$y=$c=0;
@f=map{eval"sub{$_}"}qw/exit $i=v--$l;$l++if"#"eq$i $l+=11if$l<87 $l-=11if$l>19
$i=v++$l;$l--if"#"eq$i/;$b="$o\n".("#$m#\n"x8)."$o\n";$l=12;$k=19;while($b=~/\.
/x){u$l,"P";u$k,"E";print"${b}YOU:$y\nCOM:$c\n";u$l," ";u$k," ";$f[<>%5]();$i=v
$l;$y++if"."eq$i;exit if"E"eq$i;if((int rand 4)<3and("."eq v$v=$k-1or"."eq v$v=
$k+1or"."eq v$v=$k-11or"."eq v$v=$k+11)){$k=$v;}else{$d=(1,-11,11,11,-1,-1)[int
rand 6];$k+=v($k+$d)eq"#"?-$d:$d;}$i=v$k;$c++if"."eq $i;exit if"P"eq$i}
このスレの人達ってすごい。尊敬。
851 :
デフォルトの名無しさん :02/04/06 10:24
すごい!age です。 私も JS にて参加しようかな。
6行。粘着でゴメン ヽ(`Д´)ノ ウワァァン でも表示と終了判定のタイミングを変えたので遊びやすくなった。 sub v{substr$b,$v=$_[0],1}sub u{substr$b,$_[0],1,$_[1]}$y=$c=0;$l=12;$k=19;@n=( -1,11,-11,1,1,-11);$o="#"x10;$m="."x8;$b="$o\n".("#$m#\n"x8)."$o\n";while(){u$l ,"P";u$k,"E";print"${b}YOU:$y\nCOM:$c\n";exit if$l==$k or$b!~/\./;u$l," ";$m=<> %5;exit if!$m;$l=$v if"#"ne v$l+$n[$m-1];$y++if"."eq v$l;u$k," ";next if$l==$k; if((int rand 4)<3and("."eq v$k-1or"."eq v$k+1or"."eq v$k-11or"."eq v$k+11)){$k= $v;}else{$d=$n[int rand 6];$k+=v($k+$d)eq"#"?-$d:$d;}$c++if"."eq v$k;}
>>852 ヘタレなので20byte縮めるのがやっとです。
sub v{substr$b,$v=$_[0],1}sub u{substr$b,$_[0],1,$_[1]}$y=$c=0;$l=12;$k=19;@n=(
-1,11,-11,1,1,-11);$o='#'x10 ."\n";$m='.'x8;$b=$o.("#$m#\n"x8).$o;while(){u$l,
'P';u$k,'E';print"${b}YOU:$y\nCOM:$c\n";exit if$l==$k||$b!~/\./;u$l,' ';$m=<>%5
||exit;$l=$v if'#'ne v$l+$n[$m-1];$y++if'.'eq v$l;u$k,' ';$l==$k&&next;$c++if v
((int rand 4)<3&&('.'eq v$k-1or'.'eq v$k+1or'.'eq v$k-11or'.'eq v$k+11)?($k=$v)
:($k+=v($k+($d=$n[int rand 6]))eq'#'?-$d:$d))eq'.'}
2行目勿体ない。
7行プログラミング 端から見てるとすごそうだけど、実は全然すごくない罠 by過去参加者
>>854 参加者なのに?
わちきは、もう感激だらけですよ。
「もうだめだ縮まらない」ってときにその解法が見える瞬間や、
「ほら」と解を出されたときなんか。
>>853 からさらに-12bytes
sub v{substr$b,$v=$_[0],1}sub u{substr$b,$_[0],1,$_[1]}sub f{'.'eq v$_[0]}$y=$c
=0;$l=12;$k=19;@n=(-1,11,-11,1,1,-11);$o='#'x10;$m='.'x8;$b="$o\n".("#$m#\n"x8)
."$o\n";while(){u$l,'P';u$k,'E';print"${b}YOU:$y\nCOM:$c\n";exit if$l==$k||$b!
~/\./;u$l,' ';exit if!($m=<>%5);$l=$v if'#'ne v$l+$n[$m-1];$y++if f$l;u$k,' ';
next if$l==$k;$c++if f($k=int rand 4<3&&(f$k-1||f$k+1||f$k-11||f$k+11)?$v:$k+(v
($k+($d=$n[int rand 6]))eq'#'?-$d:$d));}
あとちょっとで5行に入れそうなんだけど もうやめようっと… ヽ(`Д´)ノ sub u{@b[$l,$k]=@_}sub v{$b[$v=$_[0]]}sub w{'.'eq&v}$y=$c=0;$l=12;$k=19;@n=(-1, 11,-11,1,1,-11);$o="#"x10 ."\n";$m="."x8;@b=split"",$o.("#$m#\n"x8).$o;while(){ u"P","E";print($b=join("",@b)."YOU:$y\nCOM:$c\n");exit if$l==$k||$b!~/\./;u" ", " ";$m=<>%5||exit;$y++if'#'ne v($l+$n[$m-1])&&w$l=$v;w($k=int rand 4<3&&(w$k-1 or w$k+1or w$k-11or w$k+11)?$v:$k+(v($k+($d=$n[int rand 6]))eq'#'?-$d:$d))&&$c ++if$l!=$k}
858 :
デフォルトの名無しさん :02/04/06 23:50
Cはきついな。 #includeでどうしても改行しないといけないから。 あ、そうだ。プログラムを他のファイルに書いて、それをインクルードするってのはどうだ?1行で済むぞ(ワラ .cファイルをインクルードするのはよくないけど。
>>858 インクルードしなくてもいい例は過去に出てるだろ
>>859 標準ライブラリを使えないじゃん・・・・
861 :
デフォルトの名無しさん :02/04/06 23:56
>>858 #include 含めると6行以下になってきますが、
その制限によって多言語よりもすごいプログラムが出現するのだと思われ
正直ハフマン符号や、range encoder を6行+1で作る人がいるとは思わなんだ
>>862 なるほど。
なんちゅう荒技だ。
荒技を使わないとできないことだろうけど。
すいません、あと少し。
>>844 さんが詰めて書いただけでも、
3行縮まってる時点で僕はまだ甘いです。
>>857 やっぱりマップを配列にしたのね。同じ事考えてた。
sub u{@b[$l,$k]=@_}sub v{$b[$v=$_[0]]}sub w{'.'eq&v}$y=$c=0;$l=12;$k=19;$o='#'x
10 ."\n";$m='.'x8;@b=split'',$o.("#$m#\n"x8).$o;while(@n=(-1,11,-11,1,1,-11)){u
'P','E';print@b,"YOU:$y\nCOM:$c\n";exit if$l==$k||$y+$c>61;u' ',' ';$m=<>%5||
exit;$y++if'#'ne v($l+$n[$m-1])&&w$l=$v;w($k=int rand 4<3&&(w$k-1or w$k+1or w$k
-11or w$k+11)?$v:$k+(v($k+($d=$n[int rand 6]))eq'#'?-$d:$d))&&$c++if$l!=$k}
5 行できたよー。
867 :
デフォルトの名無しさん :02/04/07 05:19
がいしゅつ?
http://www.geocrawler.com/archives/3/2311/2002/2/200/7793896/ から
/*****************************************************************************
Decode DVD's in a few lines of C .....
******************************************************************************/
/* efdtt.c Author: Charles M. Hannum <<EMAIL: PROTECTED>> */
/* */
/* Usage is: cat title-key scrambled.vob | efdtt >clear.vob */
#define K(i)(x[i]^s[i+84])<
unsigned char x[5],y,z,s[2048];main(n){for(read(0,x,5);read(0,s,n=2048);write(1
,s,n))if(s[y=s[13]%8+20]/16%4==1){int i=K(1)17^256+K(0)8,k=K(2)0,j=K(4)17^K(3)9
^k*2-k%8^8,a=0,b=0,c=26;for(s[y]-=16;--c;i/=2,j/=2)a=a*2^i&1,b=b*2^j&1;for(j=
127;++j<n;c=z+c>y)a^=a>14,a=a>8^(y=a^a*8^a<6)<9,b=b>8^(z=b^b/8^b>4^b>12)
<17,i=s[j],i="7Wo~'G_\216"[i&7]+2^"cr3sfw6v;*k+>/n."[i>4]*2^i*257/8,s[j]=i^(i
&i*2&34)*6^z+c+~y;}}
暇つぶしに上のソースを眺めてみたんだが、得体の知れないとこを見つけてしまった。
知ってる奴がいたら教えてくれ。
上のソースで「i>4」となっている所って、16バイトの配列の添字に1ビット分しか
使用していないみたいなんだけど、どーして? i
>>4 の typo ?
>>866 試したんだけど自分のPerl 5.6だとこう修正しないと動かなかったYO ヽ(`Д´)ノ
でも5行は変わらず。後半3行はもったいないけど、まぁ4行は流石に無理だよね
sub u{@b[$l,$k]=@_}sub v{$b[$v=$_[0]]}sub w{'.'eq&v}$y=$c=0;$l=12;$k=19;$o='#'x
10 ."\n";$m='.'x8;@b=split'',$o.("#$m#\n"x8).$o;while(@n=(-1,11,-11,1,1,-11)){u
"P","E";print@b,"YOU:$y\nCOM:$c\n";exit if$l==$k||$y+$c>61;u" "," ";$m=<>%5||
exit;$y++if'#'ne v($l+$n[$m-1])&&w$l=$v;w($k=int rand 4<3&&(w$k-1or w$k+1or w
$k-11or w$k+11)?$v:$k+(v($k+($d=$n[int rand 6]))eq'#'?-$d:$d))&&$c++if$l!=$k}
全行きっちり使い果たして
>>869 から-5bytes
sub u{@b[$l,$k]=@_}sub v{$b[$v=$_[0]]}sub w{'.'eq&v}$y=$c=0;$l=12;$k=19;$o='#'x
10 ."\n";$m='.'x8;@b=split'',$o.("#$m#\n"x8).$o;while(@n=(-1,11,-11,1,1,-11)){u
"P","E";print@b,"YOU:$y\nCOM:$c\n";exit if$l==$k||$y+$c>61;u" "," ";$y++if'#'ne
v($l+$n[($m=<>%5||exit)-1])&&w$l=$v;w($k=int rand 4<3&&(w$k-1||w$k+1||w$k-11||w
$k+11)?$v:$k+(v($k+($d=$n[int rand 6]))eq'#'?-$d:$d))&&$c++if$l!=$k}
素朴な疑問なんですが、 $a=$b?$c:-$c; # $bが真のとき $a=$c, $bが偽のとき $a=-$c こういうロジック部分を1byteでも縮めて書けないですかね?
>>870 それだとオリジナルプログラムの意味が違ってきちゃう ヽ(`Д´)ノ
> rand 4<3&&(w$k-1||w$k+1||w$k-11||w$k+11)
の部分が正しく動かない。rand 4<3となってる3を4にして、敵の挙動を比較してみて
よ。気持ちはわかるけど最低限次のように書く必要が(今のところ)ある。
> rand 4<3&&(w$k-1or w$k+1or w$k-11or w$k+11)
>>872 スマソ。実をいうと全くのPerl初心者です。
or と || は同値だと思ってました。
>>871 そういう局所的な短縮ができる例はあまり無いだろ
875 :
デフォルトの名無しさん :02/04/07 21:15
Private Declare Function GetAsyncKeyState% Lib "user32" (ByVal k&) Private Declare Function GetTickCount& Lib "kernel32" () Private Declare Function BitBlt& Lib "gdi32" (ByVal a&,ByVal x&,ByVal y&,ByVal w&,ByVal h&,ByVal b&,ByVal c&,ByVal d&,ByVal r&) Private Sub Form_Paint() g=32768:Me.Cls:Me.ScaleMode=3:Me.Scale (0,0)-(320,280):Me.Line (0,0)-(320,30),_ g,BF:Me.Line (0,250)-(320,280),g,BF:Randomize a: y=140:Do:DoEvents:If GetTickCount()-t<15 Then GoTo a: i=i+1:If i <= 50 Then y=140:b=0:c=0:d=30:e=d r=r+1:j=j+1:f=f+1:h=h+1:t=GetTickCount() BitBlt Me.hDC,0,0,319,280,Me.hDC,1,0,vbSrcCopy If GetAsyncKeyState(vbKeyEscape) Then End If GetAsyncKeyState(vbKeySpace) Then c=c+2:k=c/40*1.5:b=b+k Else c=c-2:_ k=c/40*1.5:b=b+k y=y-b:If f=100 Then e=d:d=Int(Rnd()*40)+20:f=0 l=(d-e)/100*f+e:Me.Line (319,0)-(320,l),g,BF Me.Line (319,220+l)-(320,280),g,BF:p=150-Int(i/80):If p<30 Then p=30 If h=p Then s=Int(Rnd()*130)+l If h>p Then Me.Line (319,s)-(320,s+90),g,BF If h>p+8 Then h=0 If Point(160,y)=g Then MsgBox r:Form_Paint If Point(161,y)=g Then MsgBox r:Form_Paint If Point(162,y)=g Then MsgBox r:Form_Paint Me.Line (160,y)-(162,y+2),vbWhite,BF:If j=2 Then j=0:Me.Caption="Score :" & r _ & " pts." Loop End Sub VBだと全然縮まんない。1236バイト。よくあるゲームです。 鬱だ死のう
876 :
デフォルトの名無しさん :02/04/07 21:28
↑:Spaceキーで上に上がります。Escで終了です。
877 :
デフォルトの名無しさん :02/04/07 21:39
#!/usr/bin/perl open(A,"+<a.log");$a=<A>;++$a;seek(A,0,0);print A $a; print"Content-type: text/html\n\n";print $a;exit; もとが短いから
878 :
デフォルトの名無しさん :02/04/07 21:40
そういえばa.log用意しておいて下さい
しつこいがパックマンを一から作り直してみた。 操作方法は上のと一緒。 Usage: perl pacman map.txt sub u{$m[$_[0]]=$_[1]}sub w{$_[0]+=$c if$_[1]==1&&$_[0]%$c==1;$_[0]-=$c if$_[1] ==4&&$_[0]%$c==0;$m[$_[0]+$n[$_[1]]]eq'#'or$_[0]+=$n[$_[1]]}@e=(25,45,439,459); $p=357;@g=('.')x4;@m=('',map{chomp;split//}<>);$c=23;$l=21;sub e{exit}while(@n= (0,-1,$c,-$c,1)){u$p,'P';u$e[$_],'E'for 0..3;$e=grep/\./,@m;print$m[$_],($_%$c? '':"\n")for 1..@m;print"REST:$e\n> ";e if!$e;$p==$_&&e for @e;u$p,' ';u$e[$_], $g[$_]for 0..3;$g=<>%5||e;w($p,$g);for(0..3){$p==$e[$_]&&next;w($e[$_],1+int rand 4);$g[$_]=$m[$e[$_]]}} ---map.txt---- ####################### #..........#..........# #.###.####.#.####.###.# #.....................# #.###.#.#######.#.###.# #.....#....#....#.....# #####.#### # ####.##### #.# #.# #####.# ####### #.##### . # # . #####.# ####### #.##### #.# #.# #####.# ####### #.##### #..........#..........# #.###.####.#.####.###.# #...#.............#...# ###.#.#.#######.#.#.### #.....#....#....#.....# #.########.#.########.# #.....................# #######################
7行を遥かにオーバー(13行)しているSHA1です。誰か最適化して〜。言語はVC++。
#include <string>
typedef size_t D;typedef char C;C z,y,i,b,n=0,c[8];D l=0,h=0,*p,B[16],W[80],I[5
]={0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0},H[85];E(C*d,C*s){z=4
;while(z--)*d++=*(s--+3);}D R(D a,D s){return(a<<s)|(a
>>32 -s);}X(D k){*p+=R(p[1
],5)+p[5]+W[i]+k;p[2]=R(p[2],30);p--;}Y(D k){*p=p[2]^p[3]^p[4];X(k);}G(){for(i=
0;i<16;i++)E((C*)&W[i],(C*)&B[i]);for(i=16;i<80;i++)W[i]=R(W[i-3]^W[i-8]^W[i-14
]^W[i-16],1);for(i=0;i<5;i++)H[80+i]=I[i];p=&H[79];for(i=0;i<20;i++)*p=(p[2]&(p
[3]^p[4]))^p[4],X(0x5a827999);for(i=20;i<40;i++)Y(0x6ed9eba1);for(i=40;i<60;i++
)*p=(p[2]&(p[3]|p[4]))|(p[3]&p[4]),X(0x8f1bbcdc);for(i=60;i<80;i++)Y(0xca62c1d6
);for(i=0;i<5;i++)I[i]+=p[i+1];}L(C c){l+=8;if(!l)h++;*((C*)B+n)=c;n++;if(!(n&=
63))G();}main(C a,C**v){FILE*f=fopen(v[1],"rb");while(fread(&b,1,1,f))L(b);E(c,
(C*)&h);E(c+4,(C*)&l);L(128);while(n!=56)L(0);y=8;while(y--)L(c[7-y]);z=5;while
(z--)printf("%08x",I[4-z]);}
>>881 小手先の技で70字ちょい削減…っつーか改悪しまくっちゃった。スマソ。
#include <stdio.h>
typedef size_t D;typedef char C;C z,i=0,n=0,c[8];D*p,l=0,h=0,B[16],W[80],H[85],
I[]={0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0};E(C*d,C*s){for(z=4
;z--;)*d++=*(s--+3);}D R(D a,D s){return a<<s|a>>32-s;}L(C c){(*((C*)B+n++)=c,l
+=8)?h:h++;if(!(n&=63)){for(;i<16;i++)E((C*)&W[i],(C*)&B[i]);for(;i<80;i++)W[i]
=R(W[i-3]^W[i-8]^W[i-14]^W[i-16],1);for(i=6;--i;)H[79+i]=I[i-1];for(p=H+79;i<20
;X(0x5a827999))*p=p[2]&(p[3]^p[4])^p[4];for(;i<40;)Y(0x6ed9eba1);for(;i<60;)*p=
p[2]&(p[3]|p[4])|p[3]&p[4],X(0x8f1bbcdc);for(;i<80;)Y(0xca62c1d6);for(i=6;--i;)
I[i-1]+=p[i];}}X(D k){*p+=R(p[1],5)+p[5]+W[i++]+k;p[2]=R(p[2],30);p--;}Y(D k){*
p=p[2]^p[3]^p[4];X(k);}main(D a,C**v){FILE*f=fopen(v[1],"rb");for(;(a=getc(f))+
1;)L(a);E(c,(C*)&h);E(c+4,(C*)&l);for(L(128);n-56;)L(0);for(a=8;a--;)L(c[7-a]);
for(a=5;a--;)printf("%08x",I[4-a]);}
>>881 おいおい、本当に縮めるつもりがあるのか?
7行になったところを見たいだけちゃうんかと・・・
僕が言うのもなんですが、
>>883 さんに激しく同意。
前に作ったパックマンですが、
皆さんからヒントを得て、現在11行(W
>>880 パワーエサ(つうかただの無敵)と上下通り抜け付けて 7 行。
http://boobar.hoops.ne.jp/pacmaso.tar.gz ($d,$p,@e)=split/,/,<>;chomp($_=<>);$c=@m=split//;@m=(0,@m,map{chomp;split//}<>
);sub u{@m[@e,$p]=@_}sub w{($g,*z)=@_;$z+=$g==1&&$z%$c==1?$c:$g==2&&$z+$c>$#m?-
$#m:$g==3&&$z-$c<1?$#m:$g==4&&$z%$c==0?-$c:0;$m[$z+$n[$g]]eq'#'or$z+=$n[$g]}@g=
('.')x@e;$t=0;while(@n=(0,-1,$c,-$c,1)){u(('E')x@e,'P');print$m[$_],($_%$c?'':"
")for 1..@m;$e=grep/[.o]/,@m;print"R:$e P:$t >";$e&&($t||$p!=$_)or exit for@e;u
@g,' ';$t--if$t;$g=<>%5||exit;w $g,*p;for(0..$#e){$p==($b=$e[$_])&&next;w 1+int
rand 4,*b while$b==$e[$_];$g[$_]=$m[$e[$_]=$b]}$t+=$d if$m[$p]eq'o'}
改行位置注意な。(w
886 :
デフォルトの名無しさん :02/04/12 19:41
間違ってたらスマソ
#include <stdio.h>
char c[8];size_t I[]={0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0,z,
i,n,h,l,*p,B[16],W[80],H[85]};X(int k){*p+=p[5]+W[i++]+k+(p[1]<<5|p[1]
>>27 );2[p
--]=p[2]<<30|p[2]/4;}Y(){*p=p[2]^p[3]^p[4];}L(int x){l+=8;*((char*)B+n++)=x;if(
n&=63)return;for(i=0;i<16;i++)for(h=B[i],x=4;x--;h>>=8)W[i]=W[i]<<8|h&255;for(;
i<80;W[i++]=h)h=W[i-3]^W[i-8]^W[i-14]^W[i-16],h=h*2|h
>>31 ;for(i=5;i--;H[80+i]=I
[i])p=H+79;for(i=0;i<20;X(0x5a827999))*p=(p[2]&(p[3]^p[4]))^p[4];for(;i<40;X(
0x6ed9eba1))Y();for(;i<60;X(0x8f1bbcdc))*p=(p[2]&(p[3]|p[4]))|(p[3]&p[4]);for(;
i<80;X(0xca62c1d6))Y();for(i=5;i--;I[i]+=p[i+1]);}main(){while(~(h=getchar()))L
(h);for(h=l,z=4;z--;h>>=8)c[4+z]=h;for(L(128);n<56;L(0));for(z=8;z--;L(c[7-z]))
;for(z=5;z--;printf("%08x",I[4-z]));}
>>883 プログラムのネタであれば何でもいい
とにかく縮められるものを come on !
888 :
デフォルトの名無しさん :02/04/13 00:52
SHA1触ってみたんだけど、 全然ちぢまねえよマジで
889 :
デフォルトの名無しさん :02/04/13 07:54
ああ
いい
うう
ええっ!?
おお〜☆
JavaScript スロットゲーム
現在9行ちょい。7行は容易?
<body onKeyDown=K=event.keyCode><form name=a><input name=b></form><script>R=7;P
=45;C=[];D=document;S="7□=○∴|¥$";A=[0x3EE2E4CC,0x1DCC2C65,0x385CD9A0];T
=[100,5,10,15,20,30,45,60];function Y(){D.a.b.value=P;if(K==13){R>>=1;if(!R){o=
A[0]
>>3 &7;if(o==(A[1]
>>3 &7)&&o==(A[2]
>>3 &7)){alert("賞金 "+T[o]);P+=T[o]}else{
alert("残念");if(P<5){alert("OVER");return}}P-=5;R=7}K=0}for(i=0;i<3;C[i]=A[i++
])if(R&(4>>i))A[i]=A[i]
>>27 |(A[i]&0x7FFFFFF)<<3;for(i=0;i<3;i++)for(j=0;j<3;C[j
]=B<<27|C[j++]
>>3 )D.all["F"+(i*3+j)].innerHTML=S.charAt(B=C[j]&7);setTimeout(Y,
99);}for(K=i=0;i<9;)D.write(i%3?"":"<br>","<tt id=F"+i+">",i++," </tt>");for(i=
0;i<8;)D.write("<br><tt> ",S.charAt(i)," : ",T[i++]);D.a.b.value=P;Y()
</script>
<<894
<<894 遊び方: リターンキーで1カラムずつ停止、中央を揃えてください
ドラムの配置がダメダメでした。反省。
ついでにちょっと縮めました。
<body onKeyDown=K=event.keyCode><form name=a><input name=b><script>T=[100,5,10,
15,20,30,P=45,60];A=[0x16E29519,0x1DCC2E65,0x384CD988];S="7□=○∴|¥$";R=7
C=[];D=document;function Y(){D.a.b.value=P;if(K==13){R>>=1;if(!R){o=A[0]
>>3 &7;
if(o==(A[1]
>>3 &7)&&o==(A[2]
>>3 &7))alert("賞金 "+T[o]),P+=T[o];else{alert("残念"
);if(P<5){alert("OVER");return}}P-=5;R=7}K=0}for(i=0;i<3;C[i]=A[i++])if(R&4>>i)
A[i]=0x3FFFFFF8&A[i]<<3|A[i]
>>27 ;for(i=0;i<3;i++)for(j=3;j--;C[j]>>=3)D.all["F"
+(i*3+j)].innerHTML=S.charAt(B=C[j]&7);setTimeout(Y,99);}for(K=i=0;i<9;)
D.write(i%3?"":"<br>","<tt id=F",i++,"> </tt>");for(i=8;i--;)
D.write("<br><tt> ",S.charAt(i)," : ",T[i]);Y()</script>
>>897 一列目が揃ったけど、結果は「残念」でした。報告。
899 :
S ◆Q14CxNhI :02/04/14 00:35
>>898 現在判定しているのは、真ん中の列だけです。
全列を対象とした方が良いですかね?
「列」ではなくて「行」ですね。鬱だ・・・。 テストプレイのときは、setTimeout(Y,99) を 300 くらいにしてみてください。
<body onKeyDown=K=event.keyCode><form name=a><input name=b><script>T=[100,5,10,
15,20,30,P=45,60];A=[0x16E29519,0x1DCC2E65,0x384CD988];S="7□=○∴|¥$";R=7
function Y(){D.a.b.value=P;if(K==13){R>>=1;if(!R){o=A[0]&56;if(o-(A[1]&56)||o-(
A[2]&56)){alert("残念");if(P<5){alert("終了");return}}else alert("賞金 "+T[o>>=
3]),P+=T[o];P-=5;R=7}K=0}for(i=0;i<3;C[i]=A[i++])if(R&4>>i)A[i]=A[i]%(1<<27)<<3
|A[i]
>>27 ;for(i=0;i<9;C[i%3]>>=3,i++)D.all["F"+i].innerHTML=S.charAt(C[i%3]&7);
setTimeout(Y,99)}D=document;for(K=i=0;i<9;)D.write(i%3?"":"<br>","<tt id=F",i++
,"> </tt>");for(i=8;i--;)D.write("<br><tt> ",S.charAt(i)," : ",T[i]);C=[]
Y()</script>
初参加。カレンダ生成プログラムです。多分もっと縮められると思います。 使い方:a.exe 月 年(4桁) #include <stdio.h> #include <stdlib.h> int i=0,d,y,m;void c(int s,int a){while(i<s)printf(" "),i++;for(i=1;i<=a;i++) printf("%3d%s",i,((s+i)%7)?"":"\n");puts("");}int l(){return((y%400==0)?1:(0==y %100)?0:(y%4==0));}int w(){return y-=m<3,(y+y/4-y/100+y/400+".#&%(#&($')%'"[m]- 34)%7;}int main(int h,char *v[]) {y=atoi(v[2]);m=atoi(v[1]);d=".&%&%&&%&%&"[m ]-7+((m-2)?0:l()&1);printf("%11d %4d\n Su Mo Tu We Th Fr Sa\n",m,y);c(w(),d);}
同じ軸上に居たら敵が追いかけてくるよう改良。
http://boobar.hoops.ne.jp/pacmaso.tar.gz ($n,$p,@e)=split/,/,<>;$c=@m=split//,<>;push@m,map{split//}<>;sub w{(*z,$g)=@_;
$z+=(0,!($z%$c)?$c-1:0,$z+$c>$#m?-$#m-1:0,$z-$c<1?$#m+1:0,$z%$c==$c-2?-$c+1:0)[
$g];$m[$z+$n[$g]]eq'#'or$z+=$n[$g]}sub u{@m[@e,$p]=@_}@n=($t=0,-1,$c,-$c,1);@g=
('.')x@e;while($m[$p]ne'o'or$t+=$n){u(('m')x@e,$d?'D':'C');$e=grep/[.o]/,@m,@g;
print@m,"R:$e P:$t >";$e&&($t||!$d)||exit;u @g,' ';w *p,<>%5||exit;for(@e){($w=
$_)==$p&&next;int$w/$c==int$p/$c&&w *w,$w<$p?4:1;$w%$c==$p%$c&&w *w,$w<$p?2:3;w
*w,1+int rand 4while grep$w==$_,@e;$_=$w}@g=@m[@e];$d=grep $p==$_,@e;$t--if$t}
この辺が限界かな?
906 :
デフォルトの名無しさん :02/04/14 08:54
>903 をを、お疲れ。懐かしいね。 マインスイーパや砂嵐が無いんじゃない?
候補にもれがあれば、追加よろしくです あるいは、投票と考えればよいかな?
バグ取り、圧縮して、月を英語名表示にしました。使い方は
>>904 と同じです。
※ASCIIコードに激しく依存。入力値チェック無しです。
<calender.c>-------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int i=0,y,m,s,d;main(int h,char **v){m=atoi(v[1]);y=atoi(v[2]);printf("%11s %4"
"d\n Su Mo Tu We Th Fr Sa\n","Jan\0Feb\0Mar\0Apr\0May\0Jun\0Jul\0Aug\0Sep\0Oct"
"\0Nov\0Dec"+m*4-4,y);d=".&%&%&&%&%&"[m]-7+((m-2)?0:((y%400)?((y%100)?((y%4)?
0:1):0):1));s=(y-=m<3,(y+y/4-y/100+y/400+".#&%(#&($')%'"[m]-34)%7);while(i++<s)
printf(" ");for(i=1;i<=d;i++)printf("%3d%s",i,((s+i)%7)?"":"\n");puts("");}
-------------------------------------------------------------------------------
909 :
デフォルトの名無しさん :02/04/15 00:03
<<910 910は新スレ立てるそうです
913 :
デフォルトの名無しさん :02/04/15 01:39
910はまとめてくれたから、スレ立ては
>>920 にお願いしようか。
それまでに誰かテンプレートまとめて。
914 :
デフォルトの名無しさん :02/04/15 01:43
>>909 を見ていて、
>>776 は tar -xvzfじゃなくて tar -xv だなあと思ったので…
#include <stdio.h> /* tar.gzアーカイブ内のファイルとディレクトリだけ展開する */
#include <zlib.h> /* zlib が必要。gcc -Wall -ansi -lz -o tar-xvzf tar-xvzf.c */
char c[512];int a=512,s,t,mkdir(const char*,int),strtol(const char*,char**,int)
,fileno(FILE*);void*p,*q,*r;void x(){fclose(p),p=NULL;}int main(int n,char**b){
r=stdin,q=n>1?gzopen(b[1],"rb"):gzdopen(fileno(r),"rb");while(q&&gzread(q,c,a)>
0)p?t-=s=t>a?a:t,fwrite(c,1,s,p),t?0:x():*c?puts(c),c[156]!=53?p=fopen(c,"wb"),
t=strtol(c+124,NULL,8),(p&&!t)?x():0:mkdir(c,511):0;return!q;}
tar-xvzf hoge.tar.gz か tar-xvzf < hoge.tar.gzで展開。
外部ライブラリに頼る時点でちょっと弱いかな。
そろそろpart2突入ですか。次スレも良スレになることを願ってやみません。
漏れの環境C++入ってないから、 始めのほうのC++のやつが見れん。 だれかコンパイルしたやつくれ〜。 つーかC++なのかも分からん。 とにかく実行してみたい。 お願いします。 _ ┌─┴┴─┐ │ 良 ス レ │ └─┬┬─┘ ││ ゛゛'゛'゛
bccいれろや。
>>918 そんなのがあるなんて知らなかった。
マジ、サンクス。
920 :
デフォルトの名無しさん :02/04/15 12:12
お疲れ。いいスレだった
922 :
デフォルトの名無しさん :02/04/20 16:20
>>372 恐れ多く、申し訳ないけど、指摘させてください。。
オセロって先手●では???
>922 画面を白黒反転すれば解決!w
927 :
デフォルトの名無しさん :02/04/21 00:20
プラパズルNo5とかどうでしょうか。 全組み合わせを探し出し、できれば表示する。 ルール 正方形が5つ集まってできたコマが 12種類(5つの正方形を組み合わせて出きる全通りです)あります。 これを6*10マスに収まるように並べる並べ方をしらべます。 ちなみに組み合わせは全部で2339通りあります。 もちろんコードが短ければ短いほど、前途売りの検出が速ければ速いほど イイ! ってかんじで。
終わってるのかよ!
930 :
デフォルトの名無しさん :02/05/18 01:27
age
sage
932 :
デフォルトの名無しさん :02/06/30 11:40
もうそろそろ1000取り合戦だな。
何だかパート2が荒れ出し模様
七行プログラムはpart2で終わりにしよう。 part1が良スレ過ぎたので、part2が糞スレに見える。 と、愚痴ってみるテスト。
>>934 板全体から見ると、part2も悪くないんだけどね。
part3を作りたいと思わないのは、
激しく同意
>>935 トリッキーすれも part2 無くして終わったし、さびしいね
7行part3 も作るだけ作ってみれば、ネタはあとから来るんじゃないかな、
と期待してみる
>>936 そだね。最近はDCTとかで復活の兆しが。
ただ、単体では動かない七行プログラミングモジュールを集めて・・・、
という方向には賛同しかねるとか、言ってみるテスト
>>937 同じく。モジュールを集めるのには、必ずしも賛成できません。
DCT や CRC のような単品でも十分実用(あるいは縮めが面白そう)ならばいいけど、
JPEG の全工程をモジュール化しても、それって意味あるのだろうかと。
お前単に長いプログラムを分割して持ってきただけじゃないかと、小一時間・・・
939 :
デフォルトの名無しさん :02/07/13 21:35
まだ生きてたんだ!!このスレッド。 去年の夏頃読んでたんだけど、無くなったのかと思ってた。
942 :
デフォルトの名無しさん :02/07/17 00:38
芸術だ
爆発だ
顔があってもいいじゃないか
(~~~ ゚ ∀~)~~~ ゚ メダマ ボーン これは、芸術ですか? 爆発して、顔がありますが?
part2 が激しいね〜 こっちはまたーりと dat 落ちかな
1000取りには少し遠いしなぁ
うっとり。
951 :
デフォルトの名無しさん :02/08/13 14:29
あ
dat落ちしないために1000取りしてないのですよ 良スレが読めなくなっても1000取りしたいかい?
圧縮前に落とすように調整すること。
954 :
デフォルトの名無しさん :02/08/13 23:35
webarchive使えばいんでないの?
すみません・・・ バイオとかNECとかのキーボードの上についてるボタンはキーコードを吐き出しますか? どうも読み取れません。
┌───────┐ ┏━━━━━━━━━━━┓ │WinMXツアー. │ ┃ ┃ │(株)プディング. │ ┣━━━━━━━━━━━┫ └───────┤ ┃ ┃ │ ∧ ∧ .┃┏━┓ ┏━┓┃= │(・∀・) ’ ┗┛●┗━━━━━┛●┗┛ ⊂ ∪ ___/\__ / \ | では参りませう! | \_______/
957 :
デフォルトの名無しさん :02/08/21 09:27
こっちにこっそりすごい7行プログラムをうpしたりしてみる といってみただけ
10 cls 20 print "Baka"; 30 goto 20
Part3誕生したけど、激しく荒れ模様
保守しておくか。一応。
Part2が先に1000到達しました
964 :
デフォルトの名無しさん :02/10/03 23:14
ホシュ
保守はさげでも可です。
>>961 > Part3誕生したけど、激しく荒れ模様
さっき見たら、まともになってきた模様。ソースが出てくると、厨房は口はさめなくなるから...。
sage
ほしゅ
ほす
>>966 同意。
if ( ソースの出が悪い && 休日祭日週末 )
{
printf("厨房を生産します。\n");
make_CHUBO(300); //無駄に使うレス数
}
↑shine
972 :
デフォルトの名無しさん :02/11/22 22:34
という事で、こっちはとっとと埋めちまうかな。
埋め
うめ
梅
うめうめ〜!
ume