七行プログラミング
- 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> }
- 4 :デフォルトの名無しさん :2001/03/10(土) 12:22
- 横幅はいったい何行あるんだ?
- 5 :デフォルトの名無しさん :2001/03/10(土) 15:36
- 横幅は80桁でしょう、そりゃ。
1>cli
2>hlt
3>nop
4>nop
5>nop
6>nop
7>nop
- 6 :デフォルトの名無しさん :2001/03/10(土) 16:46
- セミコロンで区切ればいくらでも書けるんじゃないのか。
- 7 :デフォルトの名無しさん :2001/03/10(土) 16:52
- スレタイトル、なぜか「エロプログラミング」に見えた。
卯津だ・・
- 8 :デフォルトの名無しさん :2001/03/10(土) 17:24
- 9 :デフォルトの名無しさん :2001/03/10(土) 17:27
- >海外のプログラマーが、たったの七行足らずで
>DVDのプロテクトを解除するプログラムを作成!
このコードが気になる。だれかあぷして。
- 10 :アンノウン名無しさん :2001/03/10(土) 17:47
- ↓にアプしてる人がいたよ
http://piza.2ch.net/test/read.cgi?bbs=tech&key=983191866&ls=50
- 11 :デフォルトの名無しさん :2001/03/10(土) 17:48
- >>9http://cocoa.2ch.net/test/read.cgi?bbs=linux&key=981301272&st=32&to=32&nofirst=true
- 12 :トリッキーの1 :2001/03/10(土) 17:51
- 面白くなりそうなスレですね。
7行で意味のある複雑なことをやりたいですね〜
>>6
世界標準と言うことで、1行79文字以下で行きましょう。
- 13 :デフォルトの名無しさん :2001/03/10(土) 19:07
- 転載あげ
#!/usr/bin/perl -w
# 526-byte qrpff, Keith Winstein and Marc Horowitz <sipb-iap-dvd@mit.edu>
# 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
- 14 :デフォルトの名無しさん :2001/03/10(土) 21:38
- >>13
誰かインデントしてみてくれ。
- 15 :perl初心者 :2001/03/10(土) 21:55
- まずxをpack+に置き換えてから、$_の内容を実行するんですよね。
それでSTDINから$_に2048バイトずつ読み込んで、$a=29,$c=142、
ifのなかで、@aに$_の内容をunsigned charの配列にして読み込み、
その21番目と48と論理積とって偽ならそのまま出力、真なら$h=5,
$_と@aの80番目のXORをとってその下8ビット・・・むきーーーー
- 16 :デフォルトの名無しさん :2001/03/10(土) 22:24
- 向こうの高校生よりも劣るのか、日本のプログラマって。
さいてー、プププ
- 17 :デフォルトの名無しさん :2001/03/10(土) 22:48
- 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)
}
- 18 :デフォルトの名無しさん :2001/03/10(土) 23:34
- あ、間違えてる、、、
- 19 :デフォルトの名無しさん :2001/03/11(日) 00:35
- これ、どうやって使うの?
- 20 :デフォルトの名無しさん :2001/03/11(日) 00:46
- なんだ。7行に収まったってだけじゃん・・・
- 21 :デフォルトの名無しさん :2001/03/11(日) 00:50
- >向こうの高校生よりも劣るのか、日本のプログラマって。
>さいてー、プププ
否定はしないよ。あっちのメガデモ関係とか見てると鬱になるよな。
- 22 :デフォルトの名無しさん :2001/03/11(日) 00:56
- >>21
技術云々って言うか、暇な奴が多いってことだろうけど。
日本のプログラマは搾取対象なので、趣味でなんか作る暇も無い。
(そういう風にプログラマを使ってる糞会社のせい。)
- 23 :デフォルトの名無しさん :2001/03/11(日) 00:58
- っていうか、おれ高校生の時プログラムなんてしなかったし。
- 24 :デフォルトの名無しさん :2001/03/11(日) 01:34
- >>20
凄いことだろ
- 25 :デフォルトの名無しさん :2001/03/11(日) 03:30
- 日本にも1画面プログラムや1行プログラムがたくさんあったじゃん。
- 26 :デフォルトの名無しさん :2001/03/11(日) 03:39
- void main() while(1) printf("逝って良し!\n");
- 27 :いつでもどこでも名無しさん :2001/03/11(日) 04:04
- >>25
テクノポリス別冊 プログラム・ポシェット
に投稿してました。
- 28 :五郎 :2001/03/11(日) 04:35
- これはその高校生もすごいが、それよりperlがすごいんだよ。
- 29 :デフォルトの名無しさん :2001/03/11(日) 04:39
- てゆーか高校生じゃないじゃん、(>>13)どーでもいーけど。
- 30 :デフォルトの名無しさん :2001/03/11(日) 05:45
- 妙にデモスレと似た雰囲気だなここは(藁
- 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
- >>31
気にしない気にしない。一休み一休み。
- 35 :16進数スレより :2001/03/11(日) 06:52
- #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 );}
- 36 :デフォルトの名無しさん :2001/03/11(日) 07:01
- >>32
まじで凄くねぇ?これ・・・
- 37 :デフォルトの名無しさん :2001/03/11(日) 10:25
- >>32
必要最低限のものが詰まってる感じだな
- 38 :SAGE :2001/03/11(日) 10:32
- >>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しかあるまいか。
- 41 :トリッキーの1 :2001/03/11(日) 12:13
- >>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
プ。ちょうどその期間だけポッカリとブランクがあるんですけれど。
- 45 :名無しさんi486 :2001/03/11(日) 12:55
- あのさ、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();}}
- 47 :デフォルトの名無しさん :2001/03/11(日) 13:07
- >>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;}
- 50 :デフォルトの名無しさん :2001/03/11(日) 13:31
- えらい圧迫感のあるスレだな(藁
- 51 :トリッキーの1 :2001/03/11(日) 13:32
- >>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は未確認。
ほっとけば いつか終了(藁。 我慢できなくなったらタスク終了しとけ。
- 54 :デフォルトの名無しさん :2001/03/11(日) 13:59
- >>53
見るからに動かしてみたくないぞ(藁
- 55 :デフォルトの名無しさん :2001/03/11(日) 16:08
- つかライブラリの量と質によるだろ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行が見えてきましたね(笑)
- 68 :トリッキーの1 :2001/03/11(日) 20:53
- まるでPGP鍵のようだ。
>>62
美しい言語である上、比較的簡単にグラフィックをさわれますからね。
>>63
これは悪い例です。というか、パズルみたいな物です。参考にしてはいけません。
確かに私は大学生ですが、普段こんな狂ったコードを書いているわけではありません。
>>64
他に適した言語がなかなか見つからないんですが、心当たりありますか?
使ったこと無いけれど、HSPとかだと簡単なのかな?
- 69 :デフォルトの名無しさん :2001/03/11(日) 20:58
- 馬鹿スレから名スレへ
- 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, ...
かな
- 72 :トリッキーの1 :2001/03/11(日) 21:04
- >>71=60さん
なるほど、名案!素晴らしい。
ちなみに>>67は、WM_PAINTが外から投げられると画面の更新を止めます。
その可能性は結構大きいので、バグプログラムだと言えるでしょう。悲しい。
>>70
すみません、スレ違いなので別の場所で会えれば……
- 73 :60 :2001/03/11(日) 21:07
- 関係ないけど、ちょっと気になってMSDN見てみた。
>警告 GetMessage 関数は、0 以外の値、0、-1 のいずれかを返します。したがって、次のようなコードは避けてください。
>while (GetMessage(lpMsg, hWnd, 0, 0)) ...
おぃ、どういうことだよ。
今までのサンプルってなんなんだ?
- 74 :トリッキーの1 :2001/03/11(日) 21:13
- >>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でしょう。
……そろそろ次のネタの時期ですね。
フルスクリーンのラスタースクロールとか(笑)
- 80 :トリッキーの1 :2001/03/11(日) 22:27
- >>51
自己レス
>最終的に10行になりました。後1行なら何とかなるでしょうが、
>速度を維持したまま7行は絶対無理だと確信しました(笑)。
今日の昼の発言。なんといい加減な確信だ(鬱)
- 81 :デフォルトの名無しさん :2001/03/11(日) 22:28
- ついでに多重スクロールもきぼん
- 82 :トリッキーの1 :2001/03/11(日) 22:37
- 7行で?(藁
- 83 :81>82 :2001/03/11(日) 22:39
- いやべつに
- 84 :38 :2001/03/11(日) 22:39
- >>76 , >>78
うぉ、あんたらすげぇ!
>>64
長くなりそうな言語で短く書くのが面白いのサ。
- 85 :名無しの轍 :2001/03/11(日) 22:41
- 俺は>>51のコードが非常に素晴らしいと思う。
もちろん7行達成も凄いことだが。
- 86 :トリッキーの1 :2001/03/11(日) 22:44
- >>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行超えてるし(鬱
- 92 :トリッキーの1 :2001/03/12(月) 02:40
- >>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;}
- 95 :デフォルトの名無しさん :2001/03/12(月) 07:09
- トリッキーの1さん、すっかりここの主になっちゃったね(藁
- 96 :デフォルトの名無しさん :2001/03/12(月) 13:52
- >94
なんでこの行数でこんな事が出来るんだ・・
- 97 : :2001/03/12(月) 14:44
- 優良スレだな。
- 98 :デフォルトの名無しさん :2001/03/12(月) 14:55
- 月面着陸ゲームを50 or 25行で。
- 99 :デフォルトの名無しさん :2001/03/12(月) 15:07
- ぬ、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
この調子でスライド辞書+ハフマンお願い。
- 104 :デフォルトの名無しさん :2001/03/12(月) 18:17
- 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;}
- 106 :デフォルトの名無しさん :2001/03/12(月) 21:35
- >>103-104
ムリ(藁
- 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の範囲でなんか題材ないかにゃー?
- 113 :トリッキーの1 :2001/03/13(火) 00:12
- 標準Cだと、ヘッダファイルが行数を圧迫してつらいっす。
stdio、stdlibだけで2行だし、そのうえ特殊な物をつかうと……
致し方ないですけどね(笑)
- 114 :デフォルトの名無しさん :2001/03/13(火) 00:14
- やっぱ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;}
よし、修正(汗)。
- 121 :デフォルトの名無しさん :2001/03/13(火) 04:26
- やはりperlだとあまり面白くないと思うのは俺だけ?
- 122 :デフォルトの名無しさん :2001/03/13(火) 04:45
- >>121
じゃあどうすれバインダー
- 123 :デフォルトの名無しさん :2001/03/13(火) 07:08
- 1画面って事で 25x80文字位のショートプログラムスレ欲しいねぇ
- 124 :デフォルトの名無しさん :2001/03/13(火) 09:30
- くくくれー。題材くれー。
- 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行で行けるんでは?
- 127 :デフォルトの名無しさん :2001/03/13(火) 14:00
- >>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行でレイトレーシングしてクレヨ
- 131 :デフォルトの名無しさん :2001/03/13(火) 16:30
- >>130
むしろ、7行レイトレーシングを引っ提げて
そっちから殴り込みかけてくれヨ。(^^)
- 132 :デフォルトの名無しさん :2001/03/13(火) 17:50
- 見てみたいぜ!月面着陸ゲーム!
- 133 :トリッキーの1 :2001/03/13(火) 18:10
- >>127
Dos時代から環境を引きずっているのだよ…許してください。
- 134 :デフォルトの名無しさん :2001/03/13(火) 19:10
- WindowsならActivePerlでもいれときましょー
http://www.activestate.com/Products/ActivePerl/
- 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行。
コード化は課題とさせてください。
動作はテキストファイルを放りこめば見れます。
- 136 :デフォルトの名無しさん :2001/03/13(火) 19:42
- おぉぉぉ。まじで?
- 137 :*nix厨 :2001/03/13(火) 19:43
- 古いの送っちまった。鬱
ま、7行で動くからいいか・・・
- 138 :>126 :2001/03/13(火) 19:58
- コンパイル通らぬ…。
#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;}
こうじゃないか?
- 139 :デフォルトの名無しさん :2001/03/13(火) 20:03
- >むしろ、7行レイトレーシングを引っ提げて
>そっちから殴り込みかけてくれヨ。(^^)
うむ。我々は誰の挑戦でも受ける!
- 140 :トリッキーの1 :2001/03/13(火) 22:20
- >>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が一致するバイト数。
これで復号も可能なデータになったはずだけど、バグがあるかも。
- 147 :*nix厨 :2001/03/14(水) 01:57
- 案の定、終了時の処理がバグってる。
ついでにターミナルの設定を間違ったみたいで、横が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;}
- 149 :高橋はゑみ :2001/03/14(水) 02:14
- 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;}
- 151 :むぎ茶 :2001/03/14(水) 05:16
- <script
language="JavaScript">
&lt;!--
alert(" Λ_Λ \n ( ´∀`)\n ( )\n | | | \n (__)_) ");
//--&gt;
</script>
- 152 :デフォルトの名無しさん :2001/03/14(水) 08:28
- >>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
次はやっぱしハフマンかArithへの挑戦?
http://www.ioccc.org/
ここに応募してみるのも一興。
- 156 :デフォルトの名無しさん :2001/03/14(水) 21:57
- >>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
- なんかすごいぞ。がんばれ。
>>155 さんもいってるけど
http://www.ioccc.org/
に応募するのどう?
- 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ヘッダなどはそのまま出てしまいます。
- 162 :*nix厨 :2001/03/15(木) 09:41
- >>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でも作るかな。
- 166 :デフォルトの名無しさん :2001/03/15(木) 22:53
- じゃあ誰かとりあえず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");
}
}
}
}
- 168 :*nix厨 :2001/03/16(金) 01:46
- 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;}}
- 171 :デフォルトの名無しさん :2001/03/16(金) 09:43
- >>164
トリッキーの1氏、サンクス。
スレ的に終わったっぽい話題なのにすんまそん。
- 172 :163 :2001/03/16(金) 09:43
- >>164
トリッキーの1氏、サンクス。
スレ的に終わったっぽい話題なのにすんまそん。
- 173 :フォルトの名無しさん :2001/03/16(金) 10:02
- >>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;}}
- 175 :デフォルトの名無しさん :2001/03/16(金) 23:00
- >>174
いや、十分すげーじゃん。その調子で頼むぜ!
- 176 :60 :2001/03/17(土) 01:35
- >>167に触発されてRangecorderを製作中。
つか、ちぢまらね〜
- 177 :デフォルトの名無しさん :2001/03/17(土) 17:20
- >>176
これだけ圧縮物が集まると、後はブロックソートと外面のファイル管理さえあれば
立派に実用ツールですね
- 178 :デフォルトの名無しさん :2001/03/17(土) 18:38
- >>178
MTForMTSも欲しいぞ
- 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;}
- 181 :*nix厨 :2001/03/18(日) 01:28
- >>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ディスクを読みに行くコードがあるわけ?
サンプルになってるの?
- 186 :デフォルトの名無しさん :2001/03/18(日) 15:00
- >>185
バカかお前。コード読めや。
- 187 :デフォルトの名無しさん :2001/03/18(日) 15:17
- >>186
まあまあ、コードが理解できないようなかわいそうな奴なんだから、
そんなにきつい事言うなよ。
- 188 :デフォルトの名無しさん :2001/03/18(日) 15:18
- >>186
同意
コメントで用が足りてる
- 189 :デフォルトの名無しさん :2001/03/18(日) 15:31
- 185=186=187=188
ネタ?
- 190 :デフォルトの名無しさん :2001/03/18(日) 15:49
- 185=186=187=188=189=190
ネタ!
- 191 :デフォルトの名無しさん :2001/03/18(日) 15:56
- 7行じゃDVDも再生できないしぃ
コメントもついてないしぃ
オンラインヘルプもついてないしぃ
だっめっじゃっあぁぁぁぁん
- 192 :デフォルトの名無しさん :2001/03/18(日) 16:17
- 7行でOSを書いてくれ。
- 193 :デフォルトの名無しさん :2001/03/18(日) 16:30
- >>191
とりあえず君がコードを読めない人間であることはよくわかった。
>オンラインヘルプもついてないしぃ
もはや意味不明。
- 194 :*nix厨 :2001/03/18(日) 16:43
- まあまあ、またーりと行こうよ。
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行内にテキストで収めること。
アイコラは不可。
- 196 :デフォルトの名無しさん :2001/03/18(日) 17:19
- >>195
顔文字板のAAを使えばできそうな気も…
- 197 :ネタレス :2001/03/18(日) 19:44
- >>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行で音まで出るぞ。
- 198 :デフォルトの名無しさん :2001/03/18(日) 21:44
- >>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
- http://www.gaztek.org/osdev/boot/gbootsect.txt をまねただけだけど。
- 201 :デフォルトの名無しさん :2001/03/18(日) 23:33
- >200
つながりませんでした
- 202 :デフォルトの名無しさん :2001/03/18(日) 23:34
- あ、つながりました。
- 203 :名無しさん :2001/03/19(月) 06:57
- そーいえば昔、アスキーでプログラムコンテストしてなかったか?
1行部門、256バイト部門と1024バイト部門があって
ほとんどが BASIC と機械語だったよーな
- 204 :デフォルトの名無しさん :2001/03/19(月) 12:43
- >>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;}}
どっかの掲示板からのコピペっす.
- 206 :デフォルトの名無しさん :2001/03/21(水) 01:04
- つーか、#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割が思っているはず
- 211 :デフォルトの名無しさん :2001/03/21(水) 21:22
- >>210
じゃぁ、あんたここにいる8割はアホだと思ってんの?
自分がアホだからって他人もアホだと思うのは大間違い
- 212 :デフォルトの名無しさん :2001/03/21(水) 23:01
- >>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;}
- 215 :デフォルトの名無しさん :2001/03/22(木) 11:13
- >>210
ちょっとボク、VOBってしってる?
>>211-212
210はわざわざageてくれたんだよ。
でもちょっと英語が苦手なんだよ。
- 216 :デフォルトの名無しさん :2001/03/22(木) 11:42
- たぶんスクリプトの実行方法からして分からないんじゃない?(w
- 217 :デフォルトの名無しさん :2001/03/22(木) 11:53
- アーカイバーは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
- >218
http://www.dab.hi-ho.ne.jp/kankyo/gamekan/dvd/rip.htm
をみればわかると思う
- 220 :デフォルトの名無しさん :2001/03/22(木) 23:03
- オレはコードよめるぜって知ったかぶりしかいないが
だれも7行プログラムの使用方法を知らないのであった。
- 221 :デフォルトの名無しさん :2001/03/22(木) 23:03
- DVDのプロテクトを解除できたらどうなるんだろう
- 222 :デフォルトの名無しさん :2001/03/22(木) 23:28
- 7行にプロテクト(つーか暗号化だな)の解除方法が
書ききれるんだね凄いねってのが面白さなわけで。
http://www.cs.cmu.edu/~dst/DeCSS/Gallery/ 参照のこと。
実用性を求めてはいけないのです。
- 223 :デフォルトの名無しさん :2001/03/22(木) 23:50
- まあ、217に使い方かいてあるし・・・
- 224 :デフォルトの名無しさん :2001/03/23(金) 03:01
- http://www.hotwired.co.jp/news/news/technology/story/20010308302.html
ここ読んだ限りちがうんじゃないのか?
- 225 :デフォルトの名無しさん :2001/03/23(金) 03:06
- おいおいおいっ
有志がサイト提供してくれちゃいました。
http://2occc.nothing.sh/
転送量とかが増えちゃ悪いので、sageで書きます。
- 226 :デフォルトの名無しさん :2001/03/23(金) 07:31
- >>217
無駄無駄。たぶんDVDコピーしたいぜ教えてクンのPCにはPerlすら入ってないぜ。
- 227 :デフォルトの名無しさん :2001/03/23(金) 09:54
- 要するに7行でリッパーを書けという話?
- 228 :デフォルトの名無しさん :2001/03/23(金) 15:23
- なあ、最近気づいたんだが218のような奴はMS−DOSすら使ったこと無いんでは?
dir > abc.txt なんてコマンドも知らないんじゃ?
- 229 :デフォルトの名無しさん :2001/03/23(金) 17:03
- 「シニス メテ」とかよくやったなぁ。
「ハシ」も比較的よくあったかも。
あぁ、時代が違うのか・・・
- 230 :デフォルトの名無しさん :2001/03/23(金) 17:04
- 下げ忘れ
鬱逝
- 231 :basic09が使いたかった。 :2001/03/23(金) 19:17
- スナミ
Syntax Error
Ready
?.
0
Ready
- 232 :デフォルトの名無しさん :2001/03/23(金) 21:17
- 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))
- 233 :デフォルトの名無しさん :2001/03/23(金) 23:32
- >>232
vbsってevalあるの?
- 234 :デフォルトの名無しさん :2001/04/03(火) 22:56
- age
- 235 :>234 :2001/04/03(火) 23:20
- なんか書け
- 236 :デフォルトの名無しさん :2001/04/04(水) 04:21
- 10 PRINT "あげ";
20 GOTO 10
- 237 :デフォルトの名無しさん :2001/04/05(木) 23:08
- /* efdtt.c Author: Charles M. Hannum <root@ihack.net> */
/* */
/* Thanks to Phil Carmody <fatphil@asdf.org> 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
- うーむ。大きく化けるなぁ。オリジナルは
http://www.cs.cmu.edu/~dst/DeCSS/Gallery/hannum-efdtt-source.txt
です。知っている人は知っていると思うが。
- 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
- 243 :デフォルトの名無しさん :2001/06/02(土) 06:04
- 3ヶ月前に終ってるね
- 244 :デフォルトの名無しさん :2001/06/02(土) 08:30
- DVD のrippingしたいなら、DTV板見た方が良いよ。
http://cheese.2ch.net/test/read.cgi?bbs=avi&key=978772988
- 245 :デフォルトの名無しさん :2001/06/02(土) 14:48
- なんかこのスレみてたら昔MacPOWERでやってた
HyperCard10行勝負!思い出したよ。
懐かしさと感動をあたえてくれたよ、このスレ…続きを見たいもんだ
- 246 :デフォルトの名無しさん :2001/06/02(土) 16:04
- >>245
見たいなら、なんか新たなネタを振るとよいと思われ。
- 247 :無責任な名無しさん :2001/06/02(土) 16:27
- >>246
JPEGとかMP3とか…
…ネタもまともにふれなくてごめん。
- 248 :デフォルトの名無しさん :2001/06/04(月) 23:20
- http://backno.mag2.com/reader/Back?id=0000015670
from slashdot日本語
256バイト以下限定、perlコンテスト。
俳句ジェネレータ、いいよ。
- 249 :デフォルトの名無しさん :2001/06/05(火) 00:10
- あ、結城さんだ。
- 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にしか見えない・・・
- 254 :デフォルトの名無しさん :2001/06/06(水) 02:15
- 本当に"画面表示"するbatかよくみてみなよ
- 255 :デフォルトの名無しさん :2001/06/06(水) 02:45
- >>250
1つ目のパラメーターには何が入るのだろうか…?
- 256 :デフォルトの名無しさん :2001/06/06(水) 17:21
- ちなみに作者さんはこの人。
どちらも同じ人でしょ
http://hayabusa.ics.nara-wu.ac.jp/~nide/
- 257 :デフォルトの名無しさん :2001/06/06(水) 19:27
- >>250
アドレス違反となっちゃいましたが…
- 258 :デフォルトの名無しさん :2001/06/06(水) 20:44
- 昔懐かし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で記号処理。
- 262 :デフォルトの名無しさん :2001/06/22(金) 09:43
- http://www.geocities.co.jp/SiliconValley-PaloAlto/8642/
http://www.geocities.co.jp/SiliconValley-PaloAlto/8642/turedure/cprog_01.htm#010605
- 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)));
- 267 :デフォルトの名無しさん :2001/07/14(土) 18:29
- このスレの栄光と挫折
ネタスレ(スタート)
↓
Windows7行時代(最盛期)
↓
標準C7行時代(衰退)
↓
ネタスレ
- 268 :デフォルトの名無しさん :2001/07/14(土) 18:46
- >>266
お、凄い。
- 269 :デフォルトの名無しさん :2001/07/14(土) 19:40
- >>268
どこら辺が?それほどトリッキーには見えないけど
- 270 :267 :2001/07/14(土) 20:42
- 28+($m-2?3-$m*.86%2:!($y%4)) のあたりとか、縮めるのチョト苦労したのよ。
この無駄な努力をかってください。
- 271 :デフォルトの名無しさん :2001/07/14(土) 22:28
- >>270
すばらしい
- 272 :デフォルトの名無しさん :2001/07/17(火) 01:33
- 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
- インデントが、なくなっちまった。。。
- 274 :デフォルトの名無しさん :2001/07/18(水) 02:24
- >>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;}
実行例
/////\\\\/\/\\//
\//\/\\////\/\\\
/\\\\\\\//\\\\\/
/\/\\\/\/\\\\\//
////\\/\\//\\/\\
/\/\\\\\\\/////\
\//\//\\////\/\\
\/\/\\\\//\/\/\\
/\\/\\//\\/\//\\
//\//\/\//\\/\\/
\////\\/\///\//\
- 283 :デフォルトの名無しさん :2001/08/10(金) 12:52
- >>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
- >>278
Vine Linux 2.1
- 287 :デフォルトの名無しさん :2001/08/10(金) 21:21
- 渦巻きも作れるよ
s[x]='/'+(((2+((x-20+((y-9)>>9))>>8)+((y-9)>>9) )%2)<<8);
//////\\\\\
//////\\\\\
//////\\\\\
//////\\\\\
//////\\\\\
\\\\\//////
\\\\\//////
\\\\\//////
\\\\\//////
- 288 :デフォルトの名無しさん :2001/08/10(金) 21:57
- こんなの出来た・・・・・パラメーターは・・・
\/\/\/\/\/\/\/\/\/\//\/\/\/\/\/\/\
\/\/\//\/\/\//\/\/\//\/\/\/\\/\/\/\
/\//\//\/\\/\\/\//\//\/\\/\//\//\/\
\//\\//\//\\//\//\\//\//\\/\\//\\/\
//\\///\\//\\\//\\///\\//\\///\\//\
\\\////\\\////\\\////\\\///\\\\///\
///////\\\\\\\///////\\\\\\///////\
\\\\\\\\\\\\\\\\\\\\///////////////
\\\\\\\///////\\\\\\///////\\\\\\\/
///\\\\///\\\\///\\\////\\\////\\\/
\\//\\\//\\///\\//\\///\\//\\\//\\/
/\\//\\/\\//\\/\\//\//\\//\//\\//\/
\/\\/\\/\//\//\/\\/\//\//\/\\/\\/\/
/\/\/\\/\/\/\\/\/\/\//\/\/\//\/\/\/
\/\/\/\/\/\/\/\/\/\//\/\/\/\/\/\/\/
\/\/\/\\/\/\/\\/\/\//\/\/\//\/\/\/
- 289 :トリッキーの1 :2001/08/11(土) 00:03
- コードは特筆すべきではないけれど、実行結果は美しい……
コードにずいぶん余裕があるし、ここは一つグラフィック対応で作って下さい(笑
- 290 :デフォルトの名無しさん :2001/08/11(土) 07:46
- 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;}
- 291 :デフォルトの名無しさん :2001/08/11(土) 09:40
- たぶん289氏のリクエストは違うと思われ
- 292 :デフォルトの名無しさん :2001/08/11(土) 18:23
- アニメーションさせてみたい
- 293 :290 :2001/08/11(土) 21:05
- >>291 ? 普通にLINE文とかビットマップで書くって事?
だとしたら、マンデルブロみたいな絵の方が楽しいかもな
といってマンデルブロ書いてもオリジナライティ無いし・・・
テキストでって所がある意味面白いと思ったんだけど(貼り付けられるし)
- 294 :デフォルトの名無しさん :2001/08/11(土) 21:22
- たしかにオリジナラ? は大事かな・・・
じゃ ─│┌┐┘└├┬┤┴┼ これで考えてみよう 7行じゃ無理かな?
- 295 :トリッキーの1 :2001/08/11(土) 23:18
- ああ、ただグラフィカルに美しい、かつ迷路、っていうのがいいなぁ……って。
でも何でもいいですよ、面白ければ(笑
- 296 :デフォルトの名無しさん :2001/08/12(日) 00:15
- その調子でテキスト版ディアブロ作ってくれ
(つまりローグ)
- 297 :デフォルトの名無しさん :2001/08/17(金) 12:38
- http://cheese.2ch.net/test/read.cgi?bbs=math&key=970737952&st=628&to=628&nofirst=true
こんなのは7行プログラム課題にどうだ?
- 298 :デフォルトの名無しさん :2001/08/17(金) 12:38
- おっとアゲよう 数学板でみかけた >>297
- 299 :デフォルトの名無しさん :2001/08/17(金) 16:33
- #include<stdio.h>
main(){
printf("age");
main()
}
- 300 :デフォルトの名無しさん :2001/08/17(金) 19:12
- >>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;}
- 301 :300 :2001/08/17(金) 19:13
- あ、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);}}
実際にコンパイルする際は、行末の\で行を繋いでからやってね
- 303 :300 :2001/08/17(金) 20:27
- 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;}
これが僕の限界・・・・ほとんど縮んでない。
- 304 :デフォルトの名無しさん :2001/08/17(金) 20:46
- >>303 いや結構頑張ってるよ
絵的に面白いのは出来ない?
- 305 :300 :2001/08/17(金) 20:54
- ルールは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
この経線使うと接続判定必要だよね(^^;
出来るかのなぁ・・・
- 306 :デフォルトの名無しさん :2001/08/17(金) 21:06
- 適当にやってもこんな調子になっちゃんだよね。
─┐─└└│───│└└┌┌─
┐┘┌┐││───││└│┘┐
┘┌┌└┘─────│─┌┌┘
┌└└└│┌────┐└└└┌
└│││││┌──┐││││└
│││││││┌┐││││││
└│││││└─┘│││││└
┌└└└│└───┘│└└└┌
┘┌┌└┌─────┐└┌┌┘
┐┘┌┘││───││─┌┘┐
─┐┐└└│───│└└│┐─
- 307 :300 :2001/08/17(金) 21:10
- だって、" ┌┘┐─│└"この配置自体にも意味があるからね(^^;
- 308 :デフォルトの名無しさん :2001/08/17(金) 21:12
- フォントに "_"を90度倒したものって無いのかな? あれば "/"と
同じ方式が使えるのに
- 309 :デフォルトの名無しさん :2001/08/17(金) 21:14
- >>308
それじゃあまったく意味がないっす。
何の為に斜め以外を使うんだか・・・
- 310 :デフォルトの名無しさん :2001/08/17(金) 22:16
- >>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"); }
}
- 311 :デフォルトの名無しさん :2001/08/17(金) 22:26
- ┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐
┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼
┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└
┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌
└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘
┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐
┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼
┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└
┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌
└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘
┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐
┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼
┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└
┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌
└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘
┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐
┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼
┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└
┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌
└┐┌┼┘└┐┌┼┘└┐┌┼┘└┐┌┼┘
- 312 :デフォルトの名無しさん :2001/08/17(金) 22:33
- >>310 おお面白い。 イイよ
- 313 :デフォルトの名無しさん :2001/08/17(金) 22:33
- なるほど、パターンを最初っから作ってしまうのか(^^;
コロンブスの卵的・・・
- 314 :デフォルトの名無しさん :2001/08/18(土) 10:21
- ぉぉ!!キレイだ!! >>310
良いね!
- 315 :デフォルトの名無しさん :2001/08/18(土) 23:15
- >>311
この模様ってなんていうんだっけ。
- 316 :デフォルトの名無しさん :2001/08/19(日) 03:51
- なんかレスついたのでもう個だけ。
パターン見つければいくらでもできるけど
このスレの趣旨から外れそうなのでこのシリーズこれで最後。
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(); } } }
- 317 :実行結果 :2001/08/19(日) 03:53
- │┌┐││┌┘││└┘│└─┘└──┼──┐┌─┐
││└┘│└─┘└──┼──┐┌─┐│┌┐││┌┘
┘└──┼──┐┌─┐│┌┐││┌┘││└┘│└─
┐┌─┐│┌┐││┌┘││└┘│└─┘└──┼──
││┌┘││└┘│└─┘└──┼──┐┌─┐│┌┐
┘│└─┘└──┼──┐┌─┐│┌┐││┌┘││└
─┼──┐┌─┐│┌┐││┌┘││└┘│└─┘└─
┐│┌┐││┌┘││└┘│└─┘└──┼──┐┌─
┘││└┘│└─┘└──┼──┐┌─┐│┌┐││┌
─┘└──┼──┐┌─┐│┌┐││┌┘││└┘│└
─┐┌─┐│┌┐││┌┘││└┘│└─┘└──┼─
┐││┌┘││└┘│└─┘└──┼──┐┌─┐│┌
└┘│└─┘└──┼──┐┌─┐│┌┐││┌┘││
──┼──┐┌─┐│┌┐││┌┘││└┘│└─┘└
─┐│┌┐││┌┘││└┘│└─┘└──┼──┐┌
┌┘││└┘│└─┘└──┼──┐┌─┐│┌┐││
└─┘└──┼──┐┌─┐│┌┐││┌┘││└┘│
──┐┌─┐│┌┐││┌┘││└┘│└─┘└──┼
┌┐││┌┘││└┘│└─┘└──┼──┐┌─┐│
│└┘│└─┘└──┼──┐┌─┐│┌┐││┌┘│
└──┼──┐┌─┐│┌┐││┌┘││└┘│└─┘
┌─┐│┌┐││┌┘││└┘│└─┘└──┼──┐
│┌┘││└┘│└─┘└──┼──┐┌─┐│┌┐│
│└─┘└──┼──┐┌─┐│┌┐││┌┘││└┘
┼──┐┌─┐│┌┐││┌┘││└┘│└─┘└──
- 318 :デフォルトの名無しさん :2001/08/19(日) 13:03
- 作品募集中
- 319 :デフォルトの名無しさん :2001/08/19(日) 17:31
- クリップボードの半角スペースを に、タブを 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() とか使ってるけど,普通はどうやるんスかー?(´Д`)
- 321 :デフォルトの名無しさん :2001/08/19(日) 18:04
- 7行って、ただむやみに横長にして7行に縮めるのアリですか?
本当の意味でスッキリ7行だと素晴らしいと思うが…
- 322 :デフォルトの名無しさん :2001/08/19(日) 18:11
- んー
でもほら,もともと 1 さんが感動したDVDプロテクト解除のコードも
無理やり 7 行に押し込めたものだし〜・・・。
- 323 :322 :2001/08/19(日) 18:15
- あ,さっきのナシ。
>>12 さんがルール決めてますね。1行は79文字以内。
- 324 :321 :2001/08/19(日) 18:17
- なるほど。余計なこと言ってごめんなさい。
…だって会社で短縮したプログラム書いてたら
「君のは行数短いけど横に長いね。」って
言われちゃったんだYO!(泣)
- 325 :デフォルトの名無しさん :2001/08/19(日) 21:06
- >>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()));
- 326 :デフォルトの名無しさん :2001/08/19(日) 21:08
- >>325
随分冗長なスクリプトだね(w
- 327 :デフォルトの名無しさん :2001/08/19(日) 21:31
- ちぇっ、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
- >>327
すげー!素直に感動した。
- 329 :デフォルトの名無しさん :2001/08/19(日) 23:27
- n[]って打ち筋なんだね。
どうせだからAIも積んでもらい隊Na!
- 330 :デフォルトの名無しさん :2001/08/21(火) 02:59
- ≫329
いやー、無理でしょう(藁
しかし、すごいなー、このページの人たちは。
僕も参戦してイイですかね?
- 331 :デフォルトの名無しさん :2001/08/21(火) 03:42
- >>330
そりゃもちろん(・∀・)イイ!! でしょ!!
参加者が増えてスレのびたほうがいいにきまってるし。
- 332 :デフォルトの名無しさん :2001/08/21(火) 09:20
- 3目並べなら行けるかな?
- 333 :300 :2001/08/21(火) 12:48
- 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;}
- 334 :デフォルトの名無しさん :2001/08/21(火) 15:05
- >>333
小さくすれば、トリッキーに見えます。
つーか、それってトリッキーじゃないんですか>3目並べ、対戦式
- 335 :300 :2001/08/21(火) 20:28
- やべ、バグだらけやった・・・・
- 336 :300 :2001/08/21(火) 23:16
- これでいいかな?
誰か思考ルーチン組んで〜(笑)
#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
・・・・・・・・
・・・・・・・・
・・○・・・・・
・・○○●・・・
・・○○○・・・
・・・・・・・・
・・・・・・・・
・・・・・・・・
・・・・・・・・
・・・・・・・・
・・○・・・・・
・●●●●・・・
・・○○○・・・
・・・・・・・・
・・・・・・・・
・・・・・・・・
- 339 :デフォルトの名無しさん :2001/08/22(水) 00:06
- すごひ
- 340 :300 :2001/08/22(水) 00:21
- むむむ・・・・変なことするより配列素直に使った方が良いのかな??
ちょっと悔しい・・・・
さすがです。
- 341 :デフォルトの名無しさん :2001/08/22(水) 00:23
- >>337
うわ、マジでオセロですか?コンピュータと対戦ですか?
信じられない・・
- 342 :デフォルトの名無しさん :2001/08/22(水) 00:25
- つーかinclude含めて7行だし。
- 343 :327 :2001/08/22(水) 00:28
- >>337
うぁ、凄いー!!
今コード展開してるんですが、、、あまりに凄すぎて笑えてくる
見るべきところの多いコードで、参考になりまくりだ、ありがとう。
- 344 :トリッキーの1 :2001/08/22(水) 00:42
- >>340=300
このスレの初期の頃の砂嵐プログラムで、効率的な削り方を覚えました。
あれ、今年の3月だったんだなぁ。懐かしいというか(笑)。
>>343
ありがとうです。番兵を駆使してとにかくif文から逃げました。
後はもう小手先のテクニックでひたすら1文字ずつ……。
途中の三項演算子のトリックに気付いて、やっと7行が見えましたね。
- 345 :デフォルトの名無しさん :2001/08/22(水) 01:17
- >>337
等幅で見てたらなんか芸術を感じた
コードに圧倒された気分だ。とにかくすげぇ
- 346 :デフォルトの名無しさん :2001/08/22(水) 02:34
- 感動age
- 347 :デフォルトの名無しさん :2001/08/22(水) 03:15
- 本当にどうでもいいがグローバル h は消去できるね
しかし文字数を減らすと綺麗に7行にならない。
すごい
感動した
- 348 :デフォルトの名無しさん :2001/08/22(水) 03:33
- sageさせるかぁぁぁぁぁ!!!!!!!!!
- 349 :デフォルトの名無しさん :2001/08/22(水) 04:44
- >>337
まともヴァージョンアプきぼん!
- 350 :デフォルトの名無しさん :2001/08/22(水) 06:59
- >>337
コメント付きバージョンUPきぼん!!
- 351 :デフォルトの名無しさん :2001/08/22(水) 09:56
- >>337
すげぇ…アンタハッカーだよ!
- 352 :300 :2001/08/22(水) 10:46
- 今までちょっといんちきだったけど、正真証明、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で載せておきます。参考になれば幸いです。
- 354 :トリッキーの1 :2001/08/22(水) 11:26
- 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;
}
- 355 :デフォルトの名無しさん :2001/08/22(水) 11:29
- >>352
>>6 >>12 >>2 >>4にワラタ
- 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行っていうネタの方がよろしい。
で、じゃあネタ出せといわれるとやっぱり困るんだけどね。
何かパズルネタとかかなぁ……
- 363 :デフォルトの名無しさん :2001/08/22(水) 21:40
- >>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 に
しておくこと。関連付けのないファイルアイコンになるが
ダブルクリックすればブラウザは起動するはずだ。
- 365 :364 :2001/08/22(水) 22:04
- >>362-363
じゃなくて、
>>363
の間違い。。
- 366 :デフォルトの名無しさん :2001/08/22(水) 22:14
- 7行で「まともな」迷路ってまだだれもやってない?
- 367 :デフォルトの名無しさん :2001/08/22(水) 23:29
- 7行シェル!
- 368 :デフォルトの名無しさん :2001/08/22(水) 23:30
- ごめんまちごうた
s/シェル!/シェルスクリプト/
っていうかスクリプト言語作って。7行で。
ネイティブコンパイルできればなおヨシ。
- 369 :デフォルトの名無しさん :2001/08/22(水) 23:42
- >>368
lisp系だったらできるかもしれないが。
よくわかってないで発言してる?
あるいはネタかな。
- 370 :367 :2001/08/22(水) 23:46
- いや。本当はさ、command.com代替品作って欲しかったんだよ。
でもスクリプトの方が面白そうかなぁ・・・なんて思ってさ。
ごめんな。日本語ヘタで。
- 371 :デフォルトの名無しさん :2001/08/23(木) 00:03
- >>370
どうよ。
ReactOS の cmd.exe
http://www.neuro.gatech.edu/users/cwilson/cygutils/unversioned/cmd-reactos/
JavaShell
http://www01.u-page.so-net.ne.jp/db3/midori/JMichelle.ja.html
- 372 :トリッキーの1 :2001/08/23(木) 01:15
- ネタ欲しいですね〜。オセロネタは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言語だとは思えないんですけど。
- 374 :デフォルトの名無しさん :2001/08/23(木) 02:01
- >>372
タグ?タブ?
- 375 :デフォルトの名無しさん :2001/08/23(木) 02:07
- print "Hello"
print "Hello"
print "Hello"
print "Hello"
print "Hello"
print "Hello"
print "Hello"
- 376 :デフォルトの名無しさん :2001/08/23(木) 04:14
- レイトレはどうなったのさぁ。
- 377 :デフォルトの名無しさん :2001/08/23(木) 08:11
- さりげなく>>174に素敵なのがある気がするぞ。7行になってないけど。>レイトレ
- 378 :デフォルトの名無しさん :2001/08/23(木) 21:54
- BASICのインタプリタ作ってください。
七行で。
- 379 :デフォルトの名無しさん :2001/08/23(木) 21:56
- 7行ってことは、80*7=560文字
BASICの予約語だけで何文字かな?(笑
- 380 :デフォルトの名無しさん :2001/08/23(木) 22:01
- >>378
できるよ。
一行2048文字なら
- 381 :デフォルトの名無しさん :2001/08/23(木) 23:47
- >>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
- 383 :デフォルトの名無しさん :2001/08/24(金) 00:47
- >>381
演算子はどうさ
- 384 :381 :2001/08/24(金) 01:15
- >>382+ 狙ってなかったんだけどね。
>>383
MODを%に割り当てよう。aa = bb % 5
もちろん即値は使えないとダメだよん。
それ以外はBASIC準拠でいいんじゃない?
- 385 :デフォルトの名無しさん :2001/08/24(金) 02:06
- 対戦オセロに刺激されたので参戦。
マインスイーパです。でも、ここまでしか出来なかった。無念。
起動後、「横 縦 爆弾の数」の順で入力し、「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さんの参戦を期待したい
- 387 :385 :2001/08/24(金) 03:27
- >>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検索したけど見つからない
- 391 :ベタすぎるので下げ :2001/08/24(金) 21:09
- #include <stdio.h>
#include <stdlib.h>
main(){printf("int fourStrToInt(char *str)");return EXIT_SUCCESS;}
- 392 :デフォルトの名無しさん :2001/08/25(土) 01:16
- >>389
str に数式を書いておいて、計算をして返す関数ってこと?
>>385
マインスイーパか、なかなか面白そうなネタですね。
確かにサイズ、爆弾の密度固定にすれば7行に収まるかもですね…
- 393 :デフォルトの名無しさん :2001/08/25(土) 03:05
- 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言語による最新アルゴリズム事典 / 奥村晴彦 著
- 395 :394 :2001/08/25(土) 11:13
- あれれ?
char i=0, a[128];
while(a[i]="-3 + 12/ (( - 3) - 1)"[i])++i;
じゃなくて
char a[] = "-3 + 12/ (( - 3) - 1)";
でいいのに・・・
- 396 :縮め君 :2001/08/25(土) 14:19
- >>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型にするだけで,小数も扱えるんですよね。
これは挑戦あるのみっすね。笑い
- 399 :デフォルトの名無しさん :2001/08/25(土) 15:57
- 相変わらずすげぇや(゜д゜)
- 400 :デフォルトの名無しさん :2001/08/25(土) 17:33
- 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,など、ソースレベルおよびバイナリレベルの外部ルーチン
は禁止する。
ソースコードは、すべてカウントする。(コメント、ヘッダなど)
プログラムは、コンソールアプリケーションとする。
入出力は、ストリーム入出力を使用する。
誰かたすけて〜。小町算中毒に・・・
- 404 :デフォルトの名無しさん :01/08/26 16:06
- >>403
imiga wakarimasen.
- 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の値が壊れてるぞと騒いでる新人がいたな。。。
- 412 :デフォルトの名無しさん :01/08/26 23:20 ID:svFMyf0E
- ウォーニングと叫ぶ新人さん萌え
- 413 :デフォルトの名無しさん :01/08/26 23:54 ID:Uj3iWCOo
- 間違っちゃいないけどな。
- 414 :デフォルトの名無しさん :01/08/27 00:15 ID:xedpPvGc
- 関数は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
- 結果を左詰めで維持し,右側に空白を埋込む
- 416 :デフォルトの名無しさん :01/08/27 12:29 ID:SZV9w40w
- ライセンスが理解不能何だけど、
シェアウェア作っていいの?
- 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)になっちまってるみたいですね。
んー、これまずいですよね。私もちょっと考えてみます。
- 420 :デフォルトの名無しさん :01/08/27 13:36 ID:q21zzpHo
- >>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
- 補足。
%の仕様が不明なので、%%で%を表示
- 424 :ツール・怒・名無しさん :01/08/28 00:44 ID:skAV8joQ
- /*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;}
整理、ってことで仕事に行きます。
- 429 :デフォルトの名無しさん :01/08/28 08:05 ID:DwbZUWmA
- >>427
いたちがい
- 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
むむ・・・・
僕は出来るだけ区切りでしか改行してないつもり・・・(^^;;
- 433 :デフォルトの名無しさん :01/08/29 14:28 ID:lTYEA056
- 本当のってなんじゃ?>>431
- 434 :431 :01/08/29 14:38 ID:7WZsAq3s
- >>433
基本的に1文1行じゃないの?
このスレにあるのはただ横に並べただけのような気がするんだけど。
- 435 :60 :01/08/29 14:41 ID:7sMIEKnc
- >>434
>>12 を見ろ
- 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行プログラミングはやっぱり無理ですかね?
- 438 :デフォルトの名無しさん :01/08/29 15:13 ID:iIYcB4L.
- 文の概念がない言語を使えば何とか。
- 439 :60 :01/08/29 15:54 ID:f5AD.QBU
- 禿げしく勘違い。
書いてたのはvsprintfじゃ無くて、sprintfでした
勘違い下げ。
- 440 :デフォルトの名無しさん :01/08/29 17:59 ID:GnfmfSsI
- >>437
ケンカ売ってるの?
- 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
おお、ナイスですね。
順序が逆ってのも全くそのとおりです。
すんません。
- 446 :デフォルトの名無しさん :01/08/30 21:09 ID:kWM.DNtE
- さっき、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
- >>444
----
テ
----
1バイト。
- 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.
- 誰か、七行で円周率を一億行くらい計算するプログラムって作れます?
- 457 :デフォルトの名無しさん :01/08/31 22:05 ID:PdYiCt8o
- >>456 100M のメモリあるパソコンで?
- 458 :456 :01/08/31 22:11 ID:p07F3Eh6
- >>457
どういう意味ですか?
- 459 : :01/08/31 22:13 ID:0gfyHouU
- pribate Const 廃棄物 = -1
private sub プログラマ (眠い as string,残り時間 as long)
on error goto さよなら
プログラマ = 眠い * 残り時間
さよなら:
プログラマ = 廃棄物
end sub
- 460 :デフォルトの名無しさん :01/08/31 22:20 ID:PdYiCt8o
- いや、 double a[100000000/10] てな配列取ってもいいのかなあって意味
だったら100桁計算するのも1億もそんなに変わらんから
- 461 :デフォルトの名無しさん :01/08/31 22:22 ID:SQ0g2tCg
- 何?このスレ。
7行といっても詰め込んで7行?意味ないじゃん。
Cでセミコロン使ったらその場で1行でわ?
カンマ演算子を多用すれば結構縮まりそうだが(W
- 462 :デフォルトの名無しさん :01/08/31 22:29 ID:nTJ9noQE
- またか
- 463 :デフォルトの名無しさん :01/08/31 22:36 ID:PIOyNsYQ
- >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がわからん・・・
- 466 :デフォルトの名無しさん :01/09/01 00:07 ID:8UdnvL3A
- >>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てみる
- 470 :デフォルトの名無しさん :01/09/01 15:18 ID:q8kyDf0k
- >>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
;
}
だめだ・・・・おさまらなかった・・・・
- 472 :デフォルトの名無しさん :01/09/02 14:33 ID:7fBLjvHQ
- >>471
まじワラタよ・・・
- 473 :デフォルトの名無しさん :01/09/02 15:40 ID:G96xcqig
- あおりにレスはカワルイデスヨ
- 474 :デフォルトの名無しさん :01/09/02 21:52 ID:.hT4oV56
- あまり注目されてないけどさ、
>>448さんは実は凄くないかい?
- 475 :デフォルトの名無しさん :01/09/03 06:04 ID:hl5nRbHk
- >>474=448
- 476 :474 (!=448) :01/09/04 00:42 ID:UPHiRqCk
- >>475 fuck you.
- 477 :名無しさん@揚げ足 :01/09/04 10:19 ID:W2p5ufEw
- >>448
試してみたけど縮まねー
今んとこ15行
- 478 :デフォルトの名無しさん :01/09/07 23:13
- 元448です。
>475
ちゃいます(kw
誉めてもらえるのはうれしいっすが、誰か治してくれたらもと嬉しいです。。
>477
んー、RUNとかの代わりに"R"1文字って言う風にケチな仕様にしてますが、
GOTO を G とかにしたらそれこそ、BASICでなくなるんだろうなぁとか
思いながら作ってたらああなりました。
やっぱBASICよか、ほかのネタ考えたほうが面白いでしょうね。(ちと苦しいから…
- 479 :デフォルトの名無しさん :01/09/08 00:04
- 追伸
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
- 480 :デフォルトの名無しさん :01/09/08 00:25
- http://piza2.2ch.net/test/read.cgi?bbs=tech&key=997931422
HSPスレの302がHSPで七行プログラミングスレを誰か立ててくれって言ってるんで、
HSPで7行プログラミングをお願いします>HSPスクリプターさん(藁
- 481 :480 :01/09/08 00:36
- 自作自演臭いけど気にしないで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行に収まるけど、まぁいいか
- 482 :デフォルトの名無しさん :01/09/08 01:34
- >481 自作自演っぽい
479の者です。別人だと証明します。。
っていうか、ID無いんですね、ここ。(kw
確かに":"で繋いで何行も書けますからねぇ>フルBASIC
僕は結構気に入ってた言語なんですが、やっぱ教育用言語の域は
脱せなかったのかな。
その反面、HSPは、けっこう単品で色々できるように工夫できてて
面白いですよね。
時間あれば、HSPも色々やってみたいんですがねぇ。。
- 483 :デフォルトの名無しさん :01/09/08 01:50
- しかしまぁ、同じ教育用言語といえばpascalの方が
よほどためになるわなあ
- 484 :デフォルトの名無しさん :01/09/08 03:13
- HSP薦めてる奴は無視しましょう>483
- 485 :480 :01/09/08 23:13
- いろいろ出来るように工夫されてる分、
自由度は一定以上は無い。
飼い殺しのようなもので、それ以上ほしかったらDLL依存しかないから、
あんまりお勧めできるもんじゃない
まぁ、上記のような素数を求めたりとかの簡易なのはCで作るよりは効率いいけど
(小数を扱うものは覗く)
>>482
- 486 :デフォルトの名無しさん :01/09/10 21:20
- 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
- オラァ!!
- 488 :| - -) :01/09/11 17:39
- 即興で作った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){}}}
- 490 :デフォルトの名無しさん :01/09/11 19:03
- sugoi!
- 491 :base64.c :01/09/12 15:47
- #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;}
- 492 :base64.c :01/09/12 15:58
- 失礼、一行目 include の eが抜けている。
- 493 :base64.c :01/09/12 16:06
- なんか違ってる。
#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;}
- 494 :base64_decode.c :01/09/12 16:59
- #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;}
- 495 :491-494 :01/09/12 17:01
- という訳でbase64は5行の世界みたい。
- 496 :デフォルトの名無しさん :01/09/12 17:30
- 7行で不謹慎ゲーム
- 497 :basic.c :01/09/13 16:12
- 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);}
- 498 :477 :01/09/13 18:28
- 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
- スゴイゴイスゴイー
- 500 :デフォルトの名無しさん :01/09/14 00:58
- 熱い…熱いぜこのスレ!
- 501 :名無しさん :01/09/14 01:42
- >>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
- >>502
indent使えばイージャン
- 504 :basic.c :01/09/14 11:00
- >>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] ?
- 506 :505 :01/09/14 11:04
- 続きです。
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);
}
- 507 :デフォルトの名無しさん :01/09/14 11:12
- >>504
>u(char*s,char*r){for(;*r&&*s!=*r;++r);return!*r;}
++sが抜けてるよ
- 508 :504 :01/09/14 12:56
- ありがとう、ミスってました。
(新バージョンのバグの一因だった)
さらに関数uは巧く引数をグローバル変数化したほうが全体として短くなります。
- 509 :504 :01/09/14 13:09
- それに!=じゃなくて==だ。
- 510 :504 :01/09/14 15:28
- 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);}
- 511 :504 :01/09/14 15:46
- ただし、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);}
- 512 :チャット :01/09/15 00:08
- #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);}}}
途中でめげたため匿名&終了処理してないチャットです。
- 513 :age :01/09/15 11:24
- age
- 514 :縮め君 :01/09/15 13:19
- >>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文字縮小…できたかも。自信ない。
- 515 :デフォルトの名無しさん :01/09/16 13:26
- sugoi
- 516 :504 :01/09/17 09:55
- >>541さん
18字縮小とはやられました。
5行目は!*q?l[i-1] じゃなくて!*q?l[i] ですね。
下から2行目の 9は 23じゃないでしょうか?よって引き算の値を
43から42に変えても文字数は減らないと思います。
この2つの修正を加えると19字縮小になりますね。
- 517 :504 :01/09/17 10:00
- 間違えた。541じゃなくて514。
- 518 :504 :01/09/17 12:13
- >>514さん
駄目です。
atoiを無駄に呼ばない圧縮はOKですが、
!*q?で始まる巨大条件節がp+3を返して次のループに入る場合、変数iの
値が元と異なってしまいます。処理で言うなら、(BASICの)IFの条件が
成立した場合の動作がおかしくなります。
514さんの中で使用可能なのは
*c=0, の省略(5)
atoi() を不要にする(4)
他には
最後の x?で始まる条件節は順序を入れ替えて+=を使用(1)
I()?で始まる条件節の()が不要(2)
で実際は12字縮小ですね。
- 519 :504 :01/09/17 17:10
- ○×ならぬ○△。ただし双方とも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;}
- 520 :504 :01/09/17 17:13
- 課題
・あまり短くないので短くする。
・思考ルーチンを入れて1人対戦にする。
- 521 :デフォルトの名無しさん :01/09/17 23:58
- #include行が無い・・・
- 522 :300 :01/09/18 00:32
- >>519
>>336で僕も作ってる(笑)
よかったら参考にどうぞ
- 523 :514 :01/09/18 00:37
- >>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 じゃないですか?
- 524 :504 :01/09/18 10:33
- >>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つ使ってもいいかも。
- 525 :300 :01/09/18 12:11
- >>524
なるほど、あれですか(^^;
今は7行に手をつけてる余裕がないので、
7行以下目指してがんばってくださいね
- 526 :504 :01/09/19 12:28
- ビット演算版。不正入力は聞きなおし。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
- 528 :java httpd :01/09/21 03:07
- 今日初めてこのスレ見て、かなり萌えてしまって
>>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;}
- 531 : :01/09/22 16:23
- 530>>
わかりやすくて(・∀・)イイ!
- 532 :ななし :01/09/23 03:09
- >>530
イイ(・∀・)!ただその一言。
- 533 :デフォルトの名無しさん :01/09/23 04:11
- >>530
作者はANSI-Cを知らないようだし、それはいいんだけれど、
問題の作品自体も他の作品に比べて密度が低いですね。
530さんの参戦はうれしいことだけれど、
>>531-532さん、これをほめちゃ、他の作品(未完だけれど>>528みたいな)が可哀想だよ
- 534 :デフォルトの名無しさん :01/09/23 11:01
- >>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行はすぐですね(まず無理だろうけど)
また暇が出来たら続きをやることにします。
- 536 :60 :01/09/23 19:14
- >>535
小手先で7*80、ぴったり580文字。
文法から逸脱はしてないけど、反則?
ちなみに、ソースは見てないんで、中身はいじってません
- 537 :デフォルトの名無しさん :01/09/23 19:17
- ソース張り忘れた
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;}
- 538 :デフォルトの名無しさん :01/09/23 19:18
- ホントはdeleteも削ろうと思ったけど、収まったのでそのまま
- 539 :トリッキーの1 :01/09/23 19:26
- >>537
さすが60さん(お久しぶりです♪)
素晴らしい!全く思いつかなかった!
誰か、これが反則か否か教えて下さい……
- 540 :トリッキーの1 :01/09/23 21:26
- ああ、しまった、デバッグバージョンっすねコレ
正しくはこちら。
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行くらいいけるかも。
- 541 :504 :01/09/25 10:59
- >>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ナシに反対。
創作の幅がうんぬんっていうのはなんだかおかしいんじゃないか。
厳しいルールのなかでスマートでイカす作品を生み出すのが本来の目的じゃないの?
- 543 :デフォルトの名無しさん :01/09/25 11:34
- プロトタイプをまったく省略するのは反則だとは思うけど、、、
自分で書くのは、どうなんだろうねぇ。
- 544 :デフォルトの名無しさん :01/09/25 11:47
- >>541
>>537は7*79だ
- 545 :504 :01/09/25 13:04
- >>創作の幅がうんぬんっていうのはなんだかおかしいんじゃないか。
なんだかとは?
>>厳しいルールのなかでスマートでイカす作品を生み出すのが本来の目的じゃないの?
違うと思うな。作品の芸術性が失われる。本来の目的言い出したら1番さん
どうなの?#!/usr/bin/perl含めて8行の作品を7行と言っている訳だしね。
あの長方形に文字が詰め込まれた形を良しとするならば#includeは忌み嫌う
べきでさえあるし。この辺りは感性の問題と思うからより多くの人がここを
楽しむためにはルールは緩くしておいて、各人が自分の気に入ったものを
評価すれば良いと思う。(それが私が作品の幅云々と言った意味)コンテスト
の場合はルールを厳しくするべきであり、それをフォーマルとするならば、
ここはカジュアルであると私は捕らえている。
>>544さん 数えていませんでした。>>536を鵜呑みにしていました。
79なら◎ですよ。
- 546 :300 :01/09/25 13:13
- 最近参加してないし、コンパイラ依存のコード結構書いてますが・・・(^^;
僕的には、には「#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のプログラム構文ではないです、念のため
- 548 :60 :01/09/25 14:09
- ども。
#includeが有る無しじゃなくて、プログラムとして完結しているか、
が重要だと思うだけど。#includeを取り除くのを目的としたのではなくて、
1行でも短くするtipsとしてあのコードを出したわけです。
正規のC++の手順を踏んで、ああいう書き方もあるよ、と。
Cではプロトタイプ宣言が無くても、リンクのときにつじつまを合わせてくれるから、
わざわざ書かなくてもいい気がします。
#inclulde有る無しが重要ではなくて、プリプロセッサが何をやっているのか。
それを考えれば、決して趣旨から外れているわけではないと思いますけどね。
#includeは特別。私にとってそんな考えは(?)なのです。
私が考えるところは、こんなところです。
なんか、自己弁護みたいになっちゃったけど、
#includeを書く方針になるなら、次からそれに従います。
>>544
あ、そうですね。紛らわしくて申し訳ない
- 549 :504 :01/09/25 14:12
- >「#includeを含めなくてもいいんじゃない?」
これは非常に違います。このような態度はありえません。#includeなぞは
作品の芸術性の前にはとるに足らない問題だと言っている訳です。
#includeの有無に固執することは、「#!/usr/bin/perlを含めず7行」を認め
ないことにつながり、このスレッドの表題を否定することにつながります。
※誤解のないように言いますが、私自身は自分の作品の#includeに関しては
厳しくとっています。ここに出したのも、一つの作品を除いて#includeが
あるし、残りの一つは#includeを入れるとコンパイルできなくなります。
(しかも、後に#include付のもので置き換えている。)私は#includeを含め
ない、60さんのような作品のもつ自由な発送にある意味真似の出来なさを
感じた訳です。C++言語にしておいてextern"C"でprotoする辺りは、当然
と言えば当然のことですが、私にしてみればコロンブスの卵です。
これに比べれば、「#includeを含めた上で7行におさめようとする努力と
その結果」である、519→526(私の作品ですが)はあまり尊敬の念に値し
ないように思いますが。
- 550 :504 :01/09/25 14:17
- ま、何かごちゃごちゃ書きましたが、要は、私は皆さんに自由な発送で
作品を投稿して頂いて、それを鑑賞したい訳です。そのためにはルールは
緩いほうが良い訳です。私自身は性格的な問題もあって厳しめのルールで
やってしまい、発想力を失ってしまっているので、それを打ち破って欲し
いのです。
- 551 :デフォルトの名無しさん :01/09/25 14:27
- >>550
投稿する人の勝手でいいじゃん。
どうしてもincludeを入れたくないなら入れなければいいし。
当然俺の評価は下がるけど、「include無しの評価を上げろ」っていわれても
そりゃ絶対無理だよ。屁理屈こねたところで構文エラーなんだし。
つーわけで俺の中でこれ以後504放置決定
- 552 :300 :01/09/25 15:08
- ま、ぼくも補足しとこ
#includeを無条件に外すことに対して
「#includeを含めなくてもいいんじゃない?」
と主張することに対する意見であって不要だから外す、
っていうのとは別問題です。
>>537は#includeをなくすトリッキーだけど正当な(?)手段なわけで、
これは問題にはしてませんので。
てか、これやろうとしてたけど、知識不足でできんかった(笑)
まぁ、ほぼトリッキーの1さんに賛成ってことで。
- 553 :縮め君 :01/09/25 16:00
- 別に「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で書けないだろうか
- 558 :デフォルトの名無しさん :01/10/01 04:22
- >>556
別に7行にこだわらんでもよいんじゃない?
1画面プログラムって程度で。
- 559 :デフォルトの名無しさん :01/10/01 08:16
- ステータスは
200 OK
404 NOT FOUND
あと、フォルダのリスティングだけでいいのかな。
だったらやってみます。
- 560 :60 :01/10/01 10:35
- #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
- 561 :489 :01/10/01 11:45
- Javaでストリームを扱うと、長いクラス名ばっかりなんで縮めづらい・・・
- 562 :デフォルトの名無しさん :01/10/01 19:17
- IOCCC 16th が始まったぞ。
http://www.ioccc.org/
Larry Wall も参加していた、歴史あるプログラミングコンテストだ。
お前らの実力見せてみろ。
- 563 :デフォルトの名無しさん :01/10/01 19:43
- 上で BASIC インタープリタの話が出てたが、1990 年の
IOCCC では
http://www.ioccc.org/1990/dds.c
というかなりよくできたインタープリタが、1991 年には
http://www.ioccc.org/1991/dds.c
という BASIC コンパイラ(!)が入賞していた。
- 564 :デフォルトの名無しさん :01/10/01 19:48
- なんじゃこりゃ(w
すごすぎ
- 565 :デフォルトの名無しさん :01/10/01 19:52
- シーラカンス
- 566 :デフォルトの名無しさん :01/10/01 20:46
- 7行スレだから、やっぱり7行で応募か。
何かいいネタないかな
- 567 :デフォルトの名無しさん :01/10/01 21:42
- >>563
こういうコードを読む作業って、
自分のプログラミング能力を伸ばすための
良い訓練になるのかな?
- 568 :528 :01/10/02 11:33
- >>561
Buffered*Stream使わないだけでも2行位縮まりそうな気がするです...
使わないでも動くんだけど、それはアリなんですかね?
# あ、Socketは最低限のBufferingはされてるか。
- 569 :561 :01/10/02 15:29
- >>568
そういやそうだ( ̄□ ̄;)!!
- 570 :デフォルトの名無しさん :01/10/02 16:24
- >>567
詰将棋を解くと将棋が強くなるか?という疑問に似てるな。
システム設計が上手くなったりはしないが、アルゴリズムの
発案は上手くなると思う。
- 571 :トリッキーの1 :01/10/02 21:10
- >>560=60さん
まだよく見ていませんが、直感的に8行までなら何とかなりそうですね。
しかし、毎度ながら感服します(笑)
#もしよければ個人的な連絡を取ってみたいのですが、
#気が向いたらtricky_no1@hotmail.comにメール貰えませんか?
- 572 :60 :01/10/02 21:54
- 前の、バグ持ちでした。
ってことで、修正版。
#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
私の方もお話してみたいので、今夜あたりメール送ってみます
- 573 :デフォルトの名無しさん :01/10/04 18:52
- やってる事しょぼいけど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;}
- 574 :572 :01/10/04 19:06
- 何やるか書いとこ
#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;}
- 575 :573 :01/10/04 19:56
- >>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
- >>573
おお。GCDだ。
- 577 :デフォルトの名無しさん :01/10/21 07:55
- age
- 578 :デフォルトの名無しさん :01/10/21 09:11
- >>1
改行いれなきゃいいだろ
- 579 :デフォルトの名無しさん :01/10/21 09:43
- >>578
今更・・・(w
自分がどんなにイタイ発言をしているか分かっているの?
過去スレを読んでみな。
- 580 :デフォルトの名無しさん :01/10/22 01:20
- 正直、579も痛い
- 581 :デフォルトの名無しさん :01/10/23 14:47
- >>1-581 お前ら全員痛い
- 582 :デフォルトの名無しさん :01/10/23 14:54
- 俺は痛くないのか
- 583 :デフォルトの名無しさん :01/10/23 17:03
- ・・・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);
}
- 584 :デフォルトの名無しさん :01/10/24 17:01
- >>583
includeが無いよ
- 585 :573 :01/10/30 21:00
- また三行でやってみました。
素数判定です。
それまでの素数を保存しない中ではいいとこいってる・・・・かな?
#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行だ。
- 588 :トリッキーの1 :01/11/02 10:49
- なかなかいいネタがないですね……
- 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
- 590 :トリッキーの1 :01/11/02 21:01
- >>589
ネタありがとう♪面白そう。
……しかし、これはスレ違いかな?
トリッキースレの方に転載して貰って、そちらで盛り上がりません?
http://pc.2ch.net/test/read.cgi/tech/983191866/
- 591 :デフォルトの名無しさん :01/11/02 21:09
- >>589-590
7行にどれだけ言語を盛り込めるか大会。
…にしてしまえば、そうスレ違いでもないかも?
- 592 :トリッキーの1 :01/11/02 21:45
- >>591
それでも面白そうですが、7行の美しさはまた別の所にあるような気がして。
8行で言語を詰め込んだのを、7行にしてもあまり驚きは無いでしょう?
(少なくとも、今までのこのスレのプログラムのような)。
とはいえ、別にここでもいいし、いっそのこと別スレにするという手もありますね(笑)
*nix厨さんの意向に従います。
- 593 :トリッキーの1 :01/11/04 09:28
- かなり頑張ったわりに反響が全然無かった(涙)>>540
>後で気が向いたら、もう少し削ってみます。もしかしたら後1行くらいいけるかも。
さっき気が向いて、さぁ後1行削ってみよう!と思ったけれど、時間が経つと駄目だね。
変数名の意味を全然覚えていなくて、展開してみてもわけわからん……
自分で自分のコードを解析しています(笑)。新しく書いた方が楽かも。
- 594 :デフォルトの名無しさん :01/11/04 09:36
- 絶対俺のほうがスゲェ
- 595 :*nix厨 :01/11/04 15:55
- >>590-592
実は仕事中の逃避モードです
確かにプログラムの技術というよりトリッキーモノですね
では移動しましょう
http://pc.2ch.net/test/read.cgi/tech/983191866/642
- 596 :デフォルトの名無しさん :01/11/22 21:22
- >>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;}
ちょっとだけ短くしてみた。
- 597 :デフォルトの名無しさん :01/12/15 07:28
- age
- 598 :デフォルトの名無しさん :01/12/18 00:03
- 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
- >>598
言語がわからん…(^^;
- 600 :デフォルトの名無しさん :01/12/20 21:41
- 600ズザー
- 601 :デフォルトの名無しさん :01/12/21 00:16
- >>599
多分 Haskell かと
- 602 :599 :01/12/21 00:46
- >>601
なるほど、ありがと。調べてみまっす。
- 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);}
- 604 :なんで? :01/12/21 17:32
- LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
Debug/Cpp1.exe : fatal error LNK1120: 外部参照 1 が未解決です。
- 605 :デフォルトの名無しさん :01/12/21 18:05
- なんて古いスレなんだ、、、、
- 606 :605 :01/12/21 18:07
- 1> #include <stdio.h>
2> #include <stdlib.h>
3> int main()
4> {
5> printf("ageてごめん。\n"); abort();
6> }
7>
- 607 :606 :01/12/21 18:07
- やべ、、returnし忘れた(鬱
- 608 :^ :01/12/21 18:23
- print << 'EOF';
このスレッドは大耳モナーが嫌々管理中です、なんら問題はありません.
(\_/) タリー
( ´Д) タリー タリー
/ つ (\_/) (\_/)ノ⌒ヽ、
(_(__つ⊂(´Д`⊂⌒`つ(´Д` )_人__) ))
EOF
- 609 :dmp.c :01/12/21 20:13
- /* こんなスレあったんですね。
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]]");}
- 610 :デフォルトの名無しさん :01/12/22 18:45
- >>609
(・∀・)イイ!!
- 611 :デフォルトの名無しさん :01/12/24 11:32
- 誰か14行でRogue作って
- 612 :dmp.c 改 :01/12/25 16:03
- >>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]]");}
- 613 :デフォルトの名無しさん :01/12/29 01:14
- 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
- http://game.2ch.net/test/read.cgi/gamedev/1005038280/
相互リンク
- 616 :デフォルトの名無しさん :02/01/14 06:00
- 保守sage
- 617 :トリッキーの1 :02/01/24 02:19
- ををこのスレも生きてる♪懐かしい♪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
- 中央高等学院の従業員「西部」が女子トイレに闖入し
汚物入れを物色して女子生徒の使用済みタンポン・ナプキン等を
個人的に収集しているというのは事実。
中央高等学院では
生徒及びその保護者の個人情報を名簿図書館等に売却しています。
中央高等学院 http://chs-f.com/index.html 中央高等学院福岡校
http://www.chuo-school.ac/
- 622 :デフォルトの名無しさん :02/01/24 18:49
- >>621
8行なので×
- 623 :デフォルトの名無しさん :02/01/24 20:28
- >>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;}
- 624 :623 :02/01/24 20:35
- ありゃ。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;}
- 625 :619 :02/01/24 21:56
- >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のに差し替えて動かしました。
- 626 :デフォルトの名無しさん :02/01/24 23:08
- インクルードディレクティブで1行喰うのは痛いですなぁ。
- 627 :624 :02/01/25 00:52
- >>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つで通してくれました(^^;)
- 628 :624 :02/01/25 01:03
- あと、ファイルの拡張子はcppではなく、cで。
cppだとだめなようです。
- 629 :NASM :02/01/25 01:21
- 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
- 630 :619 :02/01/25 16:55
- #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日までしか測定出来ないところ。
- 631 :624 :02/01/25 22:48
- >>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;}}
- 632 :619 :02/01/26 19:46
- >>631
おお!スゴイです。早速コンパイルして使用しています。
以前のは、IEを動かすとたま〜に消えましたが、今回は消えない!
さすがに、これ以上は進化できないようです。
新ネタを思いついたら、また書くです(>▽<)。
- 633 :デフォルトの名無しさん :02/01/31 20:48
- 誰か7行で超軽いOSをつくってください
- 634 :デフォルトの名無しさん :02/02/01 04:49
- 最小の素数判定プログラムを作ってください。
- 635 :デフォルトの名無しさん :02/02/01 07:33
- >>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;
}
- 637 :デフォルトの名無しさん :02/02/02 02:33
- みすった。
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;
}
- 638 :デフォルトの名無しさん :02/02/02 02:55
- >>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;}
- 639 :デフォルトの名無しさん :02/02/02 03:57
- よくよく考えたら n==2 っていらんわ。
int isprime(int n){
int i = 2;
if (n < 2) return 0;
while(n % i != 0) i++;
return n == i;
}
- 640 :デフォルトの名無しさん :02/02/02 06:10
- 偶数とnの平方根以上の数で計算する必要は
ないのでは。
- 641 :デフォルトの名無しさん :02/02/02 07:55
- なんか見た目的に長くなっちゃうので(苦笑)
もちろん分ってはいるのですが。
- 642 :デフォルトの名無しさん :02/02/03 19:11
- 7行でCOM書けない?
- 643 :デフォルトの名無しさん :02/02/03 19:24
- DOSのCOM?COMコンポーネントならアクティブスクリプティングでなら簡単に書けそうだけど、
詰まんないかも。
- 644 :デフォルトの名無しさん :02/02/03 19:26
- 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万色表示
- 645 :まもら ◆MtyDeTiY :02/02/04 09:46
- // 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 :デフォルトの名無しさん :02/02/04 13:07
- >>646
なにそれ?
アフォ?
- 647 :デフォルトの名無しさん :02/02/04 13:56
- >>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になってしまう。
- 650 :not 645 :02/02/07 05:31
- >>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) );
でちょっとだけ大きな数も調べれるように…。
- 651 :645/まもら ◆MtyDeTiY :02/02/07 09:50
- >645 は、うまく素数判定をしない。
>650 さんのが正解だ...
テストしないで書き込んじゃだめでしたね。スマソ。
>646 さんは、漏れに突っ込んだんだよね。たしかにアフォでした。
- 652 :デフォルトの名無しさん :02/02/07 11:15
- もはや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.
- 654 : ◆woDeLPHI :02/02/07 12:10
- あ、実行させたら リサイズさせてみて遊んでね
- 655 : ◆woDeLPHI :02/02/07 13:16
- 同じ趣向だけど 万華鏡もどき
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使うのは初出かな?
- 657 :デフォルトの名無しさん :02/02/07 19:45
- 7行で砂時計を作ってみてください
- 658 :デフォルトの名無しさん :02/02/07 19:46
- むしろage
- 659 :デフォルトの名無しさん :02/02/07 20:15
- >657
あなたに指図される筋合いはありません。
何の権限があってそのような事を言うのですか?
- 660 :デフォルトの名無しさん :02/02/07 20:49
- >>659
別のところにも書きまくっているんだね。
http://pc.2ch.net/test/read.cgi/prog/1006353701/320
- 661 :デフォルトの名無しさん :02/02/07 23:21
- じゃ 波紋 とか 雪の結晶は 難しい?
- 662 :デフォルトの名無しさん :02/02/08 00:56
- マインスイーパーを作って
- 663 :デフォルトの名無しさん :02/02/08 17:47
- マス目をクリックすると、マス目が開く
地雷を掘り出すと、ゲームに負け
マス目に番号が表示された場合、その数は周囲の 8 個のマス目に隠れている地雷の数を示す
地雷があると判断したマス目に印をつける
- 664 :デフォルトの名無しさん :02/02/08 21:52
- >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
なんか汚い
パレット生成部分に無駄があるっぽい
挙動がやばい
ツッコミは勘弁
- 666 :どビギナー :02/02/10 01:47
- >>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
- 670 :デフォルトの名無しさん :02/02/15 00:40
- basic実用になりそう
- 671 :デフォルトの名無しさん :02/02/15 13:50
- >>653-655
面白い面白い。
demoぺえ
- 672 :671 :02/02/15 13:52
- 眺めているうちに面白い模様に〜。
簡単な7行demo作れそうな予感・・・
- 673 :デフォルトの名無しさん :02/02/16 21:25
- 低速静的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忘れた
- 675 :パーティクル&ブラー(13行) :02/02/17 20:10
- --------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ではかなり厳しい動作だたよ すまそ
- 676 :675 :02/02/18 17:05
- 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
- 678 :波紋/改(11行) :02/02/20 22:39
- やはしあまりにも汚かったので修正。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;}};}}
- 679 :デフォルトの名無しさん :02/02/22 19:56
- 美しさより短さが優先すると思われるが…
- 680 :デフォルトの名無しさん :02/02/22 22:53
- コードの美しさではなく画面出力の美しさだよ、念の為
コードの密度は上がってます。
あと、自分的には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 :デフォルトの名無しさん :02/02/23 17:36
- >>682
何万文字くらい使うの?
- 684 :682 :02/02/23 17:41
- >>683
まちがったインベーダだ。
ちなみに約8000文字
- 685 :未熟モン :02/02/25 04:43
- スゲエ!スゲエよ、ここの人たち。
俺なんかまだまだだな〜。
いつか参加したいんで、出直してくるわ!
- 686 :デフォルトの名無しさん :02/02/26 13:00
- >684
インベーダごときで100行かい(1行80で割ったとして)。
このスレのオセロでも見て出直してくるんだな。
- 687 :MIDIピアノ(7行) :02/02/27 19:19
- --------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以上必須
- 688 :デフォルトの名無しさん :02/03/04 00:41
- #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消せばいけるか)
- 689 :38 :02/03/04 20:28
- >>688
一応、出来はアレだけど俺が作った126を>>138氏が改造してくれた版が。
あと1週間でこのスレ一周年か。懐かしいなぁ。
- 690 :デフォルトの名無しさん :02/03/04 21:32
- >>2
はどういう意味ですか?
java.io.BufferedInputStream@2a9835
と出るだけですが
- 691 :デフォルトの名無しさん :02/03/05 19:22
- >>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行けずれないっす。
- 693 :デフォルトの名無しさん :02/03/07 17:32
- 27行で良ければぷよぷよがあるよ。
- 694 :デフォルトの名無しさん :02/03/07 20:07
- >>693
自慢したいなら別スレへ。
ココは7行スレなので、7行へ到達する意思がないならスレ違いです。
- 695 :*nix厨房 :02/03/08 16:12
- >>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はよくワカンナイっす
- 696 :comp :02/03/08 19:42
- 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;};};
- 697 :tara :02/03/09 04:23
- >>692
どのみち実行されないことを考えると
closesocket(l);とWSACleanup();
は削除してしまっても良いかも。
- 698 :デフォルトの名無しさん :02/03/09 12:48
- 気体上げ
>>696
圧縮と展開にわけると、7行になりそうか?
- 699 :comp :02/03/09 14:49
- =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行プログラミング」ってあったよね。
なんかなつかし
- 701 :comp :02/03/09 14:59
- >>698
サンクス。
今の時点なら、符号化と復号ルーチンを分けると、7行以内になる。
でも、ここまで来たからには、両方で7行におさめたい。
符号化が復号の2倍長いのがイタイ・・・。
- 702 :デフォルトの名無しさん :02/03/09 15:26
- >>699
gcc拡張つかいまくり?
- 703 :comp :02/03/09 15:32
- >>702
使いまくりです。
言語は何でもありってことなので、g++言語仕様でもよいのでは?ということでお願いします。
今、10行になりました。
- 704 :comp :02/03/09 15:40
- うわー、失礼!
コンパイルエラーのまま上げてました。直してます。
鬱だ。
- 705 :comp :02/03/09 16:14
- 修正版。
今日はここまでにします。
#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);}}
- 706 :tara :02/03/09 17:49
- >>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サーバー上のルートディレクトリは、実行ファイルのあるディレクトリになります。
- 707 :デフォルトの名無しさん :02/03/09 18:48
- >705
面白そうだがgcc専用じゃコンパイルすら出来ないんだろうな
- 708 :デフォルトの名無しさん :02/03/09 19:27
- mingwで簡単にコンパイルできるからそれでいいじゃん
- 709 :673 :02/03/09 20:31
- >>705
スゲェ。そこまで縮むとは。
参考資料:http://www.tomozo.ne.jp/yamazaki/download/doc_basic_compression.htm
繰上げのところが長くて困ってると思うんだけど
0xFFの数を数えて繰り上げるようにすれば
ちょっと縮むかもしれない。
あと、出力を4バイトためてDWORD出力するようにすれば
ロードの部分の無駄なシフトが要らなくなると思う。
- 710 :デフォルトの名無しさん :02/03/09 21:38
- >705
せっかく凄いんだから、標準C++で挑戦すればいいのに。
新しい環境用意してまでコンパイルする奴はあまりいないしね。俺みたいに(笑
まぁでもそこらへんは前に話し尽くされているとおり705さんの自由っすね
- 711 :デフォルトの名無しさん :02/03/09 21:59
- >>710
それは7行達成してからでもいいんじゃないか?
- 712 :comp :02/03/10 00:26
- アルゴリズムを変えないと、これ以上は難しいです。
それでも、先のバージョンから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
- 714 :comp :02/03/10 22:32
- >>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);}}
- 715 :デフォルトの名無しさん :02/03/10 23:10
- >>714
うはぁ、コリャ気味悪い
- 716 :comp :02/03/10 23:17
- 変数Tを消すことができました。
iも消せそうですが、うーん、無理かな。
- 717 :comp :02/03/11 00:36
- >>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);}}
- 718 :デフォルトの名無しさん :02/03/11 00:50
- main(int,char**V)のintはLに変えてもOKだな
あと、エンディアン変換のところ、デコード側で工夫すれば
変換しないでそのままストアできそうだから、縮むかも
- 719 :comp :02/03/11 01:04
- >>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] にするということですか?
何にしてもそこら辺はやはりネックですね、どうしたもんでしょうか。
#この世にビッグエンディアンしかなければ・・・
- 720 :comp :02/03/11 01:19
- あ、今気付いたんですが、
g.seekg(0,ios::beg); の ios::beg はいらないですね。
- 721 :デフォルトの名無しさん :02/03/11 01:43
- >o<<C(W>>24)<<C(W>>16)<<C(W>>8)<<C(W);
ここ。んで、デコード側は4バイトごとに読み込んで、
右シフトしながらデコードバッファに入れると。
キャスト連発が無駄にしか見えないんで
- 722 :デフォルトの名無しさん :02/03/11 01:48
- 正直、このスレ見た後にプログラム組もうとすると、
感覚おかしくなってめちゃコード書きにくくなります(w
- 723 :comp :02/03/11 01:55
- なんとなくあげ
>>721
符号語の読み書きをすべて4バイト単位に行うと、・・・可能でしょうかね。
ふむ。そうすると、s の読み込みも、逐次にすることもできそうですね。
そうなると、長さの算出(tellg)もいらなくなりますね。
うーむ。全体の設計、特にファイル入出力を見直してみます。
- 724 :comp :02/03/11 02:43
- 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);}}
- 725 :comp :02/03/11 02:58
- 8行目の O++ は要りません。
それから、変数 l も消せました。
もう寝ます・・・
- 726 :デフォルトの名無しさん :02/03/11 03:49
- >>724 R*=a[b]++
バグ。
1回目でa[256]を参照することになる
- 727 :デフォルトの名無しさん :02/03/11 04:23
- #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行まで縮みました
- 728 :デフォルトの名無しさん :02/03/11 04:37
- #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キャラクタですね
- 729 :comp :02/03/11 19:07
- >>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);}
- 730 :デフォルトの名無しさん :02/03/11 19:25
- >>726 エンコード側は初期化していますし、デコード側も問題ないはずですが・・・
デコード側で問題がある。
- 731 :730 :02/03/11 19:29
- 新しい版では修正されてるようですね
char a[256]で確保して、a[256]を参照していた
- 732 :comp :02/03/11 19:44
- >>731
さっぱりわかりません・・・。
デコード側2個目の for で K=b=0 してありますし、
データが正しければその後、b に 256 が入ることはないと思うのですが・・・。
私は、何か勘違いしているんでしょうか?
- 733 :730 :02/03/11 20:00
- >>732
スマソ激しく勘違いしてました。
出直してきます
- 734 :comp :02/03/11 20:51
- >>733
気にしないでください。
後21文字、頑張りましょう。
- 735 :デフォルトの名無しさん :02/03/11 22:15
- #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文字。そろそろ限界近いかも
- 736 :673 :02/03/11 22:19
- 超スゲエ
褒め称えage
- 737 :デフォルトの名無しさん :02/03/11 22:29
- #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行到達&頭が割れそう
- 738 :デフォルトの名無しさん :02/03/11 22:31
- あ、一文字オーバーのカウントかな?
最後は改行無しでスマソ
- 739 :デフォルトの名無しさん :02/03/11 22:36
- 続いてたんだなここ・・・
httpdも算術符号もすごすぎ。
- 740 :デフォルトの名無しさん :02/03/11 22:42
- #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
です
- 741 :デフォルトの名無しさん :02/03/11 22:47
- って、ダメだ。テキストしか確認してなかった
- 742 :デフォルトの名無しさん :02/03/11 22:50
- 737さん凄すぎ。縮むもんだねえ。
次のお題は Mersenne Twister でどうでしょ
- 743 :デフォルトの名無しさん :02/03/11 23:00
- >>742
ゴメン、737はダメです。
バイナリに適応できません。
現在あと1文字で修正版ができるはずです
- 744 :comp :02/03/11 23:08
- 鈴木氏の証人喚問をTVで見ていたら、またもや抜かされ・・・。
>>740
セパレータを cout<<l<<' ' から cout<<l<<-1 とすると、
1文字減らせます。
もちろん、デコーダーでは、cin.read(t,6) などとしていきます。
- 745 :デフォルトの名無しさん :02/03/11 23:19
- >>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さんに拍手
- 746 :comp :02/03/11 23:28
- 記念上げ!
>>745
とんでもない。最後の大詰めに貴方の大活躍があったならばこそです。
- 747 :デフォルトの名無しさん :02/03/12 00:29
- >>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());}}
- 751 :デフォルトの名無しさん :02/03/12 14:51
- 上の方にオセロがあったみたいだから、今度は将棋かチェスよろしく
- 752 :デフォルトの名無しさん :02/03/12 15:05
- >>749-750
素晴らしすぎる
- 753 :750 :02/03/12 15:28
- ごめんバグあった。これで最終版です。
初期化に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());}}
- 754 :750 :02/03/12 15:30
- >>751
将棋は辛そう・・・
>>752
ありがとー!すげえ嬉しい!
- 755 :デフォルトの名無しさん :02/03/12 16:09
- >>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は板違い?
- 757 :Javaさん :02/03/13 02:09
- 上のほうの
"HTTP/1.1 200 OK\nCon"+"tent-Type: text/html\n\n"
の部分は、ただ行にぎっしり詰めるためだけの"+"です。
無くても7行で収まるけど、まぁ、ユルシテ、、、、
- 758 :デフォルトの名無しさん :02/03/13 10:06
- >>756
言語は問わないから Java でも別にかまわないと思われ
むしろ #include で1行使わされる C/C++ より有利かも
- 759 :デフォルトの名無しさん :02/03/13 10:09
- JAVA作品は多いよ7〜10あるんじゃない?
Del坊ガンバレ まだ3作品しかない
- 760 :デフォルトの名無しさん :02/03/14 00:29
- >>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行。
- 761 :デフォルトの名無しさん :02/03/14 00:40
- >>760 あうっ! フィールドは使ってなかった...
けずると6行になっちゃうぞ?
- 762 :デフォルトの名無しさん :02/03/14 01:41
- 塩基配列圧縮記念
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
う〜ん,気にいった。何の役にも立たないところが良い。
- 764 :デフォルトの名無しさん :02/03/14 16:05
- あれ?>762は正しいの?
Cなんて忘れたけどさ、intで受けないと変なとこで終わらない?
- 765 :デフォルトの名無しさん :02/03/14 18:20
- つーか、永遠に終わらない
- 766 :デフォルトの名無しさん :02/03/14 20:27
- シロウト考えではFFを読み込んだときに終わっちゃいそうにオモタ。
- 767 :デフォルトの名無しさん :02/03/14 21:39
- ctrl+Z でも ctrl+C でも終るだろう?
- 768 :デフォルトの名無しさん :02/03/15 10:26
-
- 769 :デフォルトの名無しさん :02/03/15 17:00
- #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 :デフォルトの名無しさん :02/03/17 10:27
- このスレすげぇなぁ…。
- 773 :デフォルトの名無しさん :02/03/18 12:16
- >>772
同意。
なんか、MSX-FANの一画面プログラムを思い出すなぁ
職人はすごいっすね
- 774 : ◆tAdi.2WY :02/03/18 13:30
- 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#####
- 775 :デフォルトの名無しさん :02/03/18 20:41
- #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行はムリか・・。
- 776 :arch :02/03/18 23:47
- /* 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行で変換に挑戦してみるか。
- 778 :デフォルトの名無しさん :02/03/19 14:21
- >777 になにかを期待してた。そんな俺が悪いのか!
- 779 :デフォルトの名無しさん :02/03/19 15:05
- >>778
そんな778にささげる。
#!/bin/sh
convert $1 $2
2行でBMP2JPGコンバータだ。
sh と ImageMagik がインストールされていれば、な。
- 780 :デフォルトの名無しさん :02/03/20 14:54
- 781 :778 :02/03/25 15:04
- >779
いや、そういう意味じゃなくてね・・
ほら、ここ「7行プログラミング」でしょ・・
- 782 :デフォルトの名無しさん :02/03/25 15:28
- すまん・・・ネタのつもりじゃなかったんだが、どうしても7行には収まらん。
つーか無理っぽい気がしてきた。
7行関数 ってことにしても無理っぽいなぁ。
- 783 :デフォルトの名無しさん :02/03/25 15:50
- >>782
途中経過でいいからはっつけちゃえー
- 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>
- 786 :デフォルトの名無しさん :02/03/26 01:54
- 題材キタ━━━( ゚∀゚ )━( ゚∀)━( ゚)━( )━(゚ )━(∀゚ )━( ゚∀゚ )━━━!!!!
どうせ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>
- 788 :デフォルトの名無しさん :02/03/26 03:02
- よく頑張るなぁ。。。
- 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>
- 790 :デフォルトの名無しさん :02/03/26 09:41
- <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行。
- 791 :デフォルトの名無しさん :02/03/26 11:35
- <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>
動くかなあ
- 792 :IE限定ですが :02/03/26 11:46
- <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>
- 793 :デフォルトの名無しさん :02/03/26 12:26
- >>792
微妙に1列の文字制限オーバーしてない?
- 794 :793 :02/03/26 12:28
- スマソ
改行コードを数えなければぴったり制限内だった
- 795 :793 :02/03/26 12:32
- エラーで止またw
ライン:3
文字:70
エラー:'D[...].innerHTML'はオブジェクトではありません
タイミングは「1つ目の▲を取った時」
- 796 :793 :02/03/26 12:34
- 書き忘れ
IEのバージョンは5.01のSP2
- 797 :デフォルトの名無しさん :02/03/26 12:35
- >791は動く。
- 798 :790 :02/03/26 13:31
- <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>
カラー蛇。
- 799 :785 :02/03/26 18:26
- 24時間と経たずに7行達成されるとは・・・。
- 800 :C_sugar :02/03/26 19:43
- いやあ、凄い。
結構削れるものですな。
- 801 :デフォルトの名無しさん :02/03/26 22:46
- 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
- 802 :801 :02/03/26 22:52
- >>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
にする。(無理やりだな)
- 803 :デフォルトの名無しさん :02/03/27 12:56
- #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行(しかもカラー!)になるもんだ
- 805 :デフォルトの名無しさん :02/03/27 20:48
- >>803
それはもっと縮まりますね。
・ビットサイズによって宣言を統一
・switch:caseは使わない
・HC_ACTIONなどの識別子は数字に置き換える
でどうでしょう?
内容はコンパイルするのがたるいし使い方が解らなさそうなのでパス(^^;
- 806 :803 :02/03/28 17:59
- 感謝です。>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;}
- 807 :C言語超初心者 :02/03/28 18:12
- >>806
各ボタンに機能を持たせるのではなくて、あるボタンを選び、一律に
例えば、Insertボタンを押すたびに
マクロ記録開始→記録終了→再生→マクロ記録開始→記録終了→・・・
というようなものにすればもっと削れるのではないですか?
- 808 :C言語超初心者 :02/03/28 18:15
- あっ、すんません最低2つはボタンが必要ですね f^^)
記録開始、記録終了:Insert
再生:Delete
みたいに。
- 809 :803 :02/03/28 18:27
- >807,808
どうもありがとうございます。ただCtrl+Pauseは特殊なシーケンスらしく、helpで
推奨されてたのと、ちょっと処理する場所が違うので難しいです。
- 810 :805 :02/03/28 19:36
- トリッキーの1の砂嵐プログラムとか、昔のWindows7行を参考にしてみそ。
先人達の偉大な知恵が振り絞られているぞ。
確かDefWindowsProcをプロシージャに割り当てて、
メッセージループの中でコマンドを処理していたはず。
もう少し発想をかえると7行いきそうだな。がんばれ。
7行いったらコンパイルしてみる(笑)
- 811 :デフォルトの名無しさん :02/03/29 00:18
- JavaScriptのカラー蛇すげえええ。参りました。
- 812 :811 :02/03/29 04:06
- 感動したのでライフゲーム作ってみますた
<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>
- 813 :デフォルトの名無しさん :02/03/29 04:15
- カラー蛇いいね。
暇つぶしのつもりがのめり込んじゃうよ!
マインスイーパより中毒性ある
- 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>
- 816 :815 :02/03/29 18:29
- <span>を使わなくてもいいね。
- 817 :815 :02/03/29 19:03
- もっと縮められました。もうすぐ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>
- 818 :815 :02/03/29 19:22
- <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>
- 819 :デフォルトの名無しさん :02/03/29 19:35
- (´-`).。oO(ライフゲームって何なんだろう・・・)
- 820 :デフォルトの名無しさん :02/03/29 19:51
- http://home.highway.ne.jp/izushi/LifeGame/
- 821 :デフォルトの名無しさん :02/03/29 22:10
- 初期パターンをエディットできるといいね
2行以上あるから、できるかな
- 822 :815 :02/03/30 21:59
- エディット付きライフゲーム
カーソル●を上下左右で移動、スペースで配置のトグル、リターンで実行です
場の大きさも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
- ネタ募集上げ
- 824 :デフォルトの名無しさん :02/03/31 18:49
- 7行GUIあぷりトカ
- 825 :デフォルトの名無しさん :02/03/31 19:04
- >>823
JPEG圧縮つくろうぜ
- 826 :デフォルトの名無しさん :02/03/31 19:17
- >>825
JPEG変換は、>>782 さんができているとかいないとか。
- 827 :デフォルトの名無しさん :02/03/31 19:27
- >>824
GUIだけなら、今までそれなりにあった。
もうちょっと具体的になると、作品を作りやすいかも。
JavaScript でもぐら叩き、ってどですか?(ネタ)
作り始めてみたんですが、難航中。
- 828 :デフォルトの名無しさん :02/03/31 23:23
- テトリス。言語を問わず7行で作れるかな?
Vzのマクロだと可能だけど(笑)
- 829 :デフォルトの名無しさん :02/03/31 23:31
- >>828
ぜひあぷしてくれ!
- 830 :デフォルトの名無しさん :02/04/01 10:36
- >>829
Vz買ったらテトリスマクロついてくるよ
マスターユーザーならみんな持ってるはず
- 831 :829 :02/04/01 12:03
- >>830
Vz持ってないから、しらなかたよ。
調べたらテトリス以外にもいくつかマクロゲームがあたみたいね。
てっきり、>>828 さんが作ったかとおもた。
作成にチャレンジしてみるか・・・
普通に作って10行くらいになれば、きっと縮められる。
- 832 :ネタ :02/04/02 20:20
- 掲示板を作成して下さい。
仕様はお任せします。
- 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
- 835 :834 :02/04/03 00:30
- 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 : :02/04/03 02:15
- 大体見ればわかるんですが、
言語を書いてくれるとうれしい。
- 837 :デフォルトの名無しさん :02/04/03 09:30
- 春だねぇ。。
- 838 :期待あげ :02/04/03 12:46
- あげてみる
- 839 :834 :02/04/04 00:09
- >>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]
なり.
- 840 :デフォルトの名無しさん :02/04/04 00:21
- 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>"
- 842 :デフォルトの名無しさん :02/04/04 10:11
- 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>};
- 843 : :02/04/05 19:49
- パックマン。
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:終わる
で、敵に当たったら終わり。
########################################
- 844 :デフォルトの名無しさん :02/04/06 00:14
- 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");}
- 845 :デフォルトの名無しさん :02/04/06 00:24
- ↑最後の最後で間違った、鬱だ・・・
$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}
- 847 :デフォルトの名無しさん :02/04/06 03:01
- 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]}
- 848 :↑文字数間違えた(鬱) :02/04/06 03:04
- でも、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]}
- 849 :846 :02/04/06 03:29
- 後半の敵アルゴリズムを整理したら簡単に達成できちゃったよ ヽ(`Д´)ノ ウワァァン
あと>>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}
- 850 :デフォルトの名無しさん :02/04/06 06:43
- このスレの人達ってすごい。尊敬。
- 851 :デフォルトの名無しさん :02/04/06 10:24
- すごい!age です。
私も JS にて参加しようかな。
- 852 :846 :02/04/06 15:22
- 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;}
- 853 :任意たん :02/04/06 19:03
- >>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行目勿体ない。
- 854 :デフォルトの名無しさん :02/04/06 19:09
- 7行プログラミング
端から見てるとすごそうだけど、実は全然すごくない罠
by過去参加者
- 855 :デフォルトの名無しさん :02/04/06 20:46
- >>854
参加者なのに?
わちきは、もう感激だらけですよ。
「もうだめだ縮まらない」ってときにその解法が見える瞬間や、
「ほら」と解を出されたときなんか。
- 856 :デフォルトの名無しさん :02/04/06 21:08
- >>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));}
- 857 :846 :02/04/06 23:23
- あとちょっとで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ファイルをインクルードするのはよくないけど。
- 859 :デフォルトの名無しさん :02/04/06 23:52
- >>858
インクルードしなくてもいい例は過去に出てるだろ
- 860 :デフォルトの名無しさん :02/04/06 23:55
- >>859
標準ライブラリを使えないじゃん・・・・
- 861 :デフォルトの名無しさん :02/04/06 23:56
- >>858
#include 含めると6行以下になってきますが、
その制限によって多言語よりもすごいプログラムが出現するのだと思われ
正直ハフマン符号や、range encoder を6行+1で作る人がいるとは思わなんだ
- 862 :デフォルトの名無しさん :02/04/06 23:57
- >>860
プロトタイプを自分で書くんだよ。
>>537にある
- 863 :デフォルトの名無しさん :02/04/06 23:58
- >>862
なるほど。
なんちゅう荒技だ。
荒技を使わないとできないことだろうけど。
- 864 :843 :02/04/07 01:06
- >>844 >>845 >>846 >>847 >>848 >>849 >>852 >>853 >>856 >>857
うわっ!すごいレス。
ちょっとがんばってみたけど、
僕の実力はまだまだこんなものです。
みなさんありがとうございました。
すごく勉強になりました。
- 865 :843 :02/04/07 01:09
- すいません、あと少し。
>>844さんが詰めて書いただけでも、
3行縮まってる時点で僕はまだ甘いです。
- 866 :853 :02/04/07 01:15
- >>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;}}
- 868 :デフォルトの名無しさん :02/04/07 09:39
- 暇つぶしに上のソースを眺めてみたんだが、得体の知れないとこを見つけてしまった。
知ってる奴がいたら教えてくれ。
上のソースで「i>4」となっている所って、16バイトの配列の添字に1ビット分しか
使用していないみたいなんだけど、どーして? i>>4 の typo ?
- 869 :857 :02/04/07 11:51
- >>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}
- 870 :デフォルトの名無しさん :02/04/07 13:54
- 全行きっちり使い果たして>>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}
- 871 :デフォルトの名無しさん :02/04/07 14:04
- 素朴な疑問なんですが、
$a=$b?$c:-$c; # $bが真のとき $a=$c, $bが偽のとき $a=-$c
こういうロジック部分を1byteでも縮めて書けないですかね?
- 872 :869 :02/04/07 14:44
- >>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)
- 873 :870 :02/04/07 14:58
- >>872
スマソ。実をいうと全くのPerl初心者です。
or と || は同値だと思ってました。
- 874 :デフォルトの名無しさん :02/04/07 20:56
- >>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用意しておいて下さい
- 879 :853 :02/04/08 01:54
- しつこいがパックマンを一から作り直してみた。
操作方法は上のと一緒。
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----
#######################
#..........#..........#
#.###.####.#.####.###.#
#.....................#
#.###.#.#######.#.###.#
#.....#....#....#.....#
#####.#### # ####.#####
#.# #.#
#####.# ####### #.#####
. # # .
#####.# ####### #.#####
#.# #.#
#####.# ####### #.#####
#..........#..........#
#.###.####.#.####.###.#
#...#.............#...#
###.#.#.#######.#.#.###
#.....#....#....#.....#
#.########.#.########.#
#.....................#
#######################
- 880 :853 :02/04/08 07:12
- ちょこっと改良。
http://boobar.hoops.ne.jp/pacmaso.tar.gz
まだ余裕あるんで、パワーエサ付けるなり敵のルーチンいぢるなり、
他言語でやるなり、よろ。
- 881 :SYN ◆mMJ0UaoA :02/04/11 05:21
- 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]);}
- 882 :デフォルトの名無しさん :02/04/11 21:06
- >>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]);}
- 883 :デフォルトの名無しさん :02/04/11 22:04
- >>881
おいおい、本当に縮めるつもりがあるのか?
7行になったところを見たいだけちゃうんかと・・・
- 884 :843 :02/04/12 09:44
- 僕が言うのもなんですが、
>>883さんに激しく同意。
前に作ったパックマンですが、
皆さんからヒントを得て、現在11行(W
- 885 :853 :02/04/12 13:10
- >>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]));}
- 887 :縮め中毒患者 :02/04/12 23:58
- >>883
プログラムのネタであれば何でもいい
とにかく縮められるものを come on !
- 888 :デフォルトの名無しさん :02/04/13 00:52
- SHA1触ってみたんだけど、
全然ちぢまねえよマジで
- 889 :デフォルトの名無しさん :02/04/13 07:54
- ああ
- 890 :デフォルトの名無しさん :02/04/13 08:03
- いい
- 891 :デフォルトの名無しさん :02/04/13 13:13
- うう
- 892 :デフォルトの名無しさん :02/04/13 15:54
- ええっ!?
- 893 :デフォルトの名無しさん :02/04/13 15:57
- おお〜☆
- 894 :S :02/04/13 22:13
- 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>
- 895 :S ◆Q14CxNhI :02/04/13 22:20
- <<894
- 896 :S ◆Q14CxNhI :02/04/13 22:34
- <<894
遊び方:
リターンキーで1カラムずつ停止、中央を揃えてください
- 897 :S ◆Q14CxNhI :02/04/13 22:57
- ドラムの配置がダメダメでした。反省。
ついでにちょっと縮めました。
<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>
- 898 :デフォルトの名無しさん :02/04/14 00:00
- >>897
一列目が揃ったけど、結果は「残念」でした。報告。
- 899 :S ◆Q14CxNhI :02/04/14 00:35
- >>898
現在判定しているのは、真ん中の列だけです。
全列を対象とした方が良いですかね?
- 900 :S ◆Q14CxNhI :02/04/14 00:37
- 「列」ではなくて「行」ですね。鬱だ・・・。
テストプレイのときは、setTimeout(Y,99) を 300 くらいにしてみてください。
- 901 :S ◆Q14CxNhI :02/04/14 00:51
- <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>
- 902 :デフォルトの名無しさん :02/04/14 02:04
- >>910の人、新スレ立ててね。
>>920の人、このスレの名作をまとめてね
- 903 :デフォルトの名無しさん :02/04/14 03:12
- 名作候補作品、勝手に選択
選定に当たっては、7行達成を厳格なルールとしました
>>52>>89
>>101>>105>>125>>150>>153>>161>>167
>>319>>320>>337(>>372)>>397
>>402>>428>>430>>494
>>526
>>612>>631>>655
>>745>>753>>770>>774>>798
>>822>>839>>842>>880
- 904 :デフォルトの名無しさん :02/04/14 04:09
- 初参加。カレンダ生成プログラムです。多分もっと縮められると思います。
使い方: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);}
- 905 :853 :02/04/14 06:11
- 同じ軸上に居たら敵が追いかけてくるよう改良。
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
をを、お疲れ。懐かしいね。
マインスイーパや砂嵐が無いんじゃない?
- 907 :903 :02/04/14 17:01
- 候補にもれがあれば、追加よろしくです
あるいは、投票と考えればよいかな?
- 908 :904 :02/04/14 22:44
- バグ取り、圧縮して、月を英語名表示にしました。使い方は>>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
- [HTTP鯖] >>706 >>760 >>770
[DNA] >>762
[e] >>769
[mersenne twister] >>749(>>750 >>753)
[BMPGEN] >>775
[tar -xvzf] >>776
[蛇] >>792 >>798
[proxy] >>835(>>839)
[BBS] >>840 >>841 >>842 >>877
[pac-man] >>849 >>852 >>853 >>856 >>866 >>869(>>870) >>879 >>885 >>905
[calendar] >>904
[再帰アフォ] >>646
[BASIC(7行じゃないけど、感動的] >>448 >>497 >>498 >>510 >>511 >>514
- 910 :ヨ?リ^ :02/04/15 00:04
- [砂嵐] >>52 >>75 >>76 >>78 >>89
[ラスタスクロール] >>105 >>125 >>129
[インデント揃え] >>116(>>126 >>138) >>688
[圧縮] >>101 >>135 >>146 >>153(>>154) >>696 >>737 >>740 >>744
[倉庫番] >>118(>>120) >>150(>>148) >>179(>>180) >>774
[HTTPクライアント] >>161
[動画再生?] >>205
[レイトレ] >>170 >>209
[迷路(模様?)] >>283 >>285 (>>287) >>305
[ツール] >>319
[ライフゲェム] >>320 >>812 >>815(>>817 >>818) >>822
[オセロ] >>336 >>337 >>352 >>372
[四則演算] >>396(>>397) >>402 >>424 >>430
- 911 :デフォルトの名無しさん :02/04/15 00:05
- 本文が長すぎるって蹴られた・・・チクショー
[nCr(重複組み合わせ)] >>486
[BASE64] >>488 >>493 >>494
[マインスイーパ] >>385 >>537 >>540
[tic-tac-toe] >>336 >519 >>526
[high&low] >>530
[printf] >>425 >>428
[素因数分解] >>573(>>574)
[dump] >>609 >>612
[起動時間表示] >>623(>>624) >>625 >>627 >>630 >>631
[MIDIピアノ] >>687
- 912 :デフォルトの名無しさん :02/04/15 01:13
- <<910
910は新スレ立てるそうです
- 913 :デフォルトの名無しさん :02/04/15 01:39
- 910はまとめてくれたから、スレ立ては>>920にお願いしようか。
それまでに誰かテンプレートまとめて。
- 914 :デフォルトの名無しさん :02/04/15 01:43
- >>909-911
ありがとう、長くて探すきしなかったけどこれで一発だ。
- 915 : ◆tAdi.2WY :02/04/15 02:35
- >>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で展開。
外部ライブラリに頼る時点でちょっと弱いかな。
- 916 :デフォルトの名無しさん :02/04/15 03:03
- そろそろpart2突入ですか。次スレも良スレになることを願ってやみません。
- 917 :デフォルトの名無しさん :02/04/15 10:42
- 漏れの環境C++入ってないから、
始めのほうのC++のやつが見れん。
だれかコンパイルしたやつくれ〜。
つーかC++なのかも分からん。
とにかく実行してみたい。
お願いします。
_
┌─┴┴─┐
│ 良 ス レ │
└─┬┬─┘
││
゛゛'゛'゛
- 918 :デフォルトの名無しさん :02/04/15 10:47
- bccいれろや。
- 919 :917 :02/04/15 11:30
- >>918
そんなのがあるなんて知らなかった。
マジ、サンクス。
- 920 :デフォルトの名無しさん :02/04/15 12:12
- 七行プログラミング part2
http://pc.2ch.net/test/read.cgi/tech/1018840143/
- 921 :デフォルトの名無しさん :02/04/16 08:33
- お疲れ。いいスレだった
- 922 :デフォルトの名無しさん :02/04/20 16:20
- >>372
恐れ多く、申し訳ないけど、指摘させてください。。
オセロって先手●では???
- 923 :デフォルトの名無しさん :02/04/20 18:58
- >>992
ttp://www.othello.org/nakaji/lesson/lesson/rulej.html
うむ。
- 924 :デフォルトの名無しさん :02/04/20 19:04
- >922
画面を白黒反転すれば解決!w
- 925 :デフォルトの名無しさん :02/04/20 23:18
- >>922
ソースの○●を●○に変えれば解決?
- 926 :デフォルトの名無しさん :02/04/20 23:42
- >>922
ルールを変えれば解決・・・
- 927 :デフォルトの名無しさん :02/04/21 00:20
- プラパズルNo5とかどうでしょうか。
全組み合わせを探し出し、できれば表示する。
ルール
正方形が5つ集まってできたコマが
12種類(5つの正方形を組み合わせて出きる全通りです)あります。
これを6*10マスに収まるように並べる並べ方をしらべます。
ちなみに組み合わせは全部で2339通りあります。
もちろんコードが短ければ短いほど、前途売りの検出が速ければ速いほど イイ! ってかんじで。
- 928 :デフォルトの名無しさん :02/04/21 00:22
- このスレ終わってるから、ぜひ次スレで披露してください
http://pc.2ch.net/test/read.cgi/tech/1018840143/
- 929 :三村 :02/04/29 22:00
- 終わってるのかよ!
- 930 :デフォルトの名無しさん :02/05/18 01:27
- age
- 931 :デフォルトの名無しさん :02/06/05 21:56
- sage
- 932 :デフォルトの名無しさん :02/06/30 11:40
- もうそろそろ1000取り合戦だな。
- 933 :デフォルトの名無しさん :02/06/30 23:08
- 何だかパート2が荒れ出し模様
- 934 :hage :02/07/01 10:06
- 七行プログラムはpart2で終わりにしよう。
part1が良スレ過ぎたので、part2が糞スレに見える。
と、愚痴ってみるテスト。
- 935 :933 :02/07/01 18:45
- >>934
板全体から見ると、part2も悪くないんだけどね。
part3を作りたいと思わないのは、
激しく同意
- 936 :デフォルトの名無しさん :02/07/07 01:14
- >>935
トリッキーすれも part2 無くして終わったし、さびしいね
7行part3 も作るだけ作ってみれば、ネタはあとから来るんじゃないかな、
と期待してみる
- 937 :933 :02/07/07 02:09
- >>936
そだね。最近はDCTとかで復活の兆しが。
ただ、単体では動かない七行プログラミングモジュールを集めて・・・、
という方向には賛同しかねるとか、言ってみるテスト
- 938 :936 :02/07/10 21:38
- >>937
同じく。モジュールを集めるのには、必ずしも賛成できません。
DCT や CRC のような単品でも十分実用(あるいは縮めが面白そう)ならばいいけど、
JPEG の全工程をモジュール化しても、それって意味あるのだろうかと。
お前単に長いプログラムを分割して持ってきただけじゃないかと、小一時間・・・
- 939 :デフォルトの名無しさん :02/07/13 21:35
- まだ生きてたんだ!!このスレッド。
去年の夏頃読んでたんだけど、無くなったのかと思ってた。
- 940 :デフォルトの名無しさん :02/07/14 02:08
- >>939
旧スレをageるのはどうかと・・・
- 941 :デフォルトの名無しさん :02/07/14 03:38
- >>939
去年の夏?! ちゃんと続きも読んでおけよ。
七行プログラミング part2
http://pc.2ch.net/test/read.cgi/tech/1018840143/
- 942 :デフォルトの名無しさん :02/07/17 00:38
- 芸術だ
- 943 :デフォルトの名無しさん :02/07/17 09:56
- 爆発だ
- 944 :デフォルトの名無しさん :02/07/17 10:48
- 顔があってもいいじゃないか
- 945 :デフォルトの名無しさん :02/07/17 11:20
- スレの底に >>944
というわけで、>>1000の人は芸術的な顔を書いて下さい
- 946 :デフォルトの名無しさん :02/07/17 21:55
- (~~~ ゚ ∀~)~~~ ゚ メダマ ボーン
これは、芸術ですか? 爆発して、顔がありますが?
- 947 :デフォルトの名無しさん :02/07/24 00:53
- >>946
1000じゃないからだめーーー
- 948 :デフォルトの名無しさん :02/07/28 15:43
- part2 が激しいね〜
こっちはまたーりと dat 落ちかな
- 949 :デフォルトの名無しさん :02/07/31 22:35
- 1000取りには少し遠いしなぁ
- 950 :デフォルトの名無しさん :02/08/10 14:48
- うっとり。
- 951 :デフォルトの名無しさん :02/08/13 14:29
- あ
- 952 :デフォルトの名無しさん :02/08/13 15:00
- dat落ちしないために1000取りしてないのですよ
良スレが読めなくなっても1000取りしたいかい?
- 953 :デフォルトの名無しさん :02/08/13 19:24
- 圧縮前に落とすように調整すること。
- 954 :デフォルトの名無しさん :02/08/13 23:35
- webarchive使えばいんでないの?
- 955 :プディング ◆sBTiERL2 :02/08/14 01:21
- すみません・・・
バイオとかNECとかのキーボードの上についてるボタンはキーコードを吐き出しますか?
どうも読み取れません。
- 956 :プディング ◆sBTiERL2 :02/08/14 01:40
- ┌───────┐ ┏━━━━━━━━━━━┓
│WinMXツアー. │ ┃ ┃
│(株)プディング. │ ┣━━━━━━━━━━━┫
└───────┤ ┃ ┃
│ ∧ ∧ .┃┏━┓ ┏━┓┃=
│(・∀・) ’ ┗┛●┗━━━━━┛●┗┛
⊂ ∪
___/\__
/ \
| では参りませう! |
\_______/
- 957 :デフォルトの名無しさん :02/08/21 09:27
- http://www.ioccc.org/
Check out.
- 958 :デフォルトの名無しさん :02/08/21 09:55
- part2もうdatオチかとおもったじゃねーか
http://pc2.2ch.net/test/read.cgi/tech/1018840143/
- 959 :デフォルトの名無しさん :02/09/03 18:13
- こっちにこっそりすごい7行プログラムをうpしたりしてみる
といってみただけ
- 960 :デフォルトの名無しさん :02/09/13 10:09
- 10 cls
20 print "Baka";
30 goto 20
- 961 :デフォルトの名無しさん :02/09/29 04:41
- Part3誕生したけど、激しく荒れ模様
- 962 :デフォルトの名無しさん :02/09/29 11:48
- 保守しておくか。一応。
- 963 :デフォルトの名無しさん :02/09/29 21:38
- Part2が先に1000到達しました
- 964 :デフォルトの名無しさん :02/10/03 23:14
- ホシュ
- 965 :デフォルトの名無しさん :02/10/03 23:14
- 保守はさげでも可です。
- 966 :デフォルトの名無しさん :02/10/05 01:08
- >>961
> Part3誕生したけど、激しく荒れ模様
さっき見たら、まともになってきた模様。ソースが出てくると、厨房は口はさめなくなるから...。
- 967 :デフォルトの名無しさん :02/10/06 06:01
- sage
- 968 :デフォルトの名無しさん :02/10/22 12:38
- ほしゅ
- 969 :デフォルトの名無しさん :02/11/09 12:54
- ほす
- 970 :保守ついで :02/11/09 14:07
- >>966
同意。
if ( ソースの出が悪い && 休日祭日週末 )
{
printf("厨房を生産します。\n");
make_CHUBO(300); //無駄に使うレス数
}
- 971 :デフォルトの名無しさん :02/11/22 16:16
- ↑shine
- 972 :デフォルトの名無しさん :02/11/22 22:34
- 973 :デフォルトの名無しさん :02/12/08 02:40
- 974 :デフォルトの名無しさん :02/12/08 02:40
- 975 :デフォルトの名無しさん :02/12/08 02:40
- 976 :デフォルトの名無しさん :02/12/09 01:44
- という事で、こっちはとっとと埋めちまうかな。
- 977 :デフォルトの名無しさん :02/12/09 01:45
- 埋め
- 978 :デフォルトの名無しさん :02/12/09 23:28
- うめ
- 979 :デフォルトの名無しさん :02/12/10 16:14
- 梅
- 980 :デフォルトの名無しさん :02/12/11 00:57
- うめうめ〜!
- 981 :デフォルトの名無しさん :02/12/11 12:51
- ume
[Home]