七行プログラミング(2ちゃんねる)

FTP、CGI、SSI、telnetが自由に使える超高速レンタルサーバ。
工夫しだいで、楽しさ100倍。 www.binboserver.com
月額千円サーバ | サブドメインコース | BIGなサーバ

サブドメインコース:CGIやFTPが使いたい・お金を掛けたくない人のために。
 *****.syo-ten.com *****.gasuki.com *****.zansu.com
 お好きな名前を無料で使えます。早い者勝ち。

人気サイト 月額千円サーバ:.com .net .org で取得できます。.JPドメイン大歓迎!
 超高速・高機能サーバを1000円で!使ってみれば、分かります。

BIGなサーバ:Big なBig なサーバー。充実したサポートをお求めの方へ。
 インターネットでご活躍の皆様へ、そしてご活躍予定の皆様へ。
2ちゃんねるは、このサーバを使っているです。

■掲示板に戻る■ ■過去ログ倉庫めにゅーに戻る■

七行プログラミング
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">
<!--
alert("   Λ_Λ \n  ( ´∀`)\n  (    )\n  | | | \n  (__)_) ");
//-->
</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        db 'kaomozi dasitai yo...', 13, 10, 0
msg01        db 'dareka yatte hosii naa...', 13, 10, 0
msg02        db 'mou ascii na seikatu ha iyada!', 13, 10, 0
msg03        db 'haa.', 13, 10, 0
msg04        db 'zya-ne.', 13, 10, 0
rebootmsg    db 'nannka botan osite kure.', 13, 10, 0
message :
    lodsb
    or al,al
    jz done
    mov ah,0eh
    mov bx,0007
    int 0x10
    jmp message
done :
    ret
getkey :
    mov ah, 0
    int 016h
    ret
reboot: ;; reboot
    mov si, rebootmsg
    call message
    call getkey
    db 0EAh
    dw 0000h
    dw 0FFFFh
xwait :
    call message
    call getkey
    ret
start :
    mov ax,0x7c0
    mov ds,ax
    cli
    mov ax,0x9000
    mov ss,ax
    mov sp,0xffff
    sti
    mov si, msg00
    call xwait
    mov si, msg01
    call xwait
    mov si, msg02
    call xwait
    mov si, msg03
    call xwait
    mov si, msg04
    call xwait
    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)