■ 2ちゃんねるは、ここのサーバを使ってるです。。。
 .jp ドメインお持ちのお客様大歓迎。maido3.jp
 .fm 取得代行します。(US) maido3.fm
 .ca 取得代行します。(US) maido3.ca
 .com .net .org 取得代行します。(US) maido3.com
 .cc .to .tv 取得代行はじめました。NEW
人気サイト
月々1,000円からの BinboServer.com 2ちゃんねるも使っている Big-Server.com
>> 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)>>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
クリップボードの半角スペースを&nbsp;に、タブを&nbsp;4つに変更する

#include<windows.h>
int WINAPI WinMain (HINSTANCE d, HINSTANCE e,PSTR f,int g){HGLOBAL a,b;BYTE *c;
BYTE sp[24] = "&nbsp;&nbsp;&nbsp;&nbsp;";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が無いよ



2ちゃんねるは、ここのサーバを使ってるです。。。