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

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

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

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

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

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

七行プログラミング
1 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 09:09
海外のプログラマーが、たったの七行足らずで
DVDのプロテクトを解除するプログラムを作成!
我々も負けてはいられません!

ルール:七行なら言語は問いません。では、どうぞ!


2 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 09:27
<イチロー養成、動体視力強化プログラム Java>
・動作環境 MS-DOS プロンプト

1>class Suzuki {
2> public static void main(String args[]) {
3> while (true) {
4> System.out.print( System.in ) ;
5> }
6> }
7>}



3 名前: SAGE 投稿日: 2001/03/10(土) 09:44
1> #include <stdio.h>
2>
3> int main()
4> {
5>   printf( "Hello, World!" );
6>   return 0;
7> }


4 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 12:22
横幅はいったい何行あるんだ?



5 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 15:36
横幅は80桁でしょう、そりゃ。
1>cli
2>hlt
3>nop
4>nop
5>nop
6>nop
7>nop


6 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 16:46
セミコロンで区切ればいくらでも書けるんじゃないのか。


7 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 16:52
スレタイトル、なぜか「エロプログラミング」に見えた。
卯津だ・・


8 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 17:24




9 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 17:27
>海外のプログラマーが、たったの七行足らずで
>DVDのプロテクトを解除するプログラムを作成!
このコードが気になる。だれかあぷして。


10 名前: アンノウン名無しさん 投稿日: 2001/03/10(土) 17:47
↓にアプしてる人がいたよ

http://piza.2ch.net/test/read.cgi?bbs=tech&key=983191866&ls=50


11 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 17:48
>>9http://cocoa.2ch.net/test/read.cgi?bbs=linux&key=981301272&st=32&to=32&nofirst=true


12 名前: トリッキーの1 投稿日: 2001/03/10(土) 17:51
面白くなりそうなスレですね。
7行で意味のある複雑なことをやりたいですね〜

>>6
世界標準と言うことで、1行79文字以下で行きましょう。



13 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 19:07
転載あげ

#!/usr/bin/perl -w
# 526-byte qrpff, Keith Winstein and Marc Horowitz <sipb-iap-dvd@mit.edu>
# MPEG 2 PS VOB file on stdin -> descrambled output on stdout
# arguments: title key bytes in least to most-significant order
$_='while(read+STDIN,$_,2048){$a=29;$c=142;if((@a=unx"C*",$_)[20]&48){$h=5;
$_=unxb24,join"",@b=map{xB8,unxb8,chr($_^$a[--$h+84])}@ARGV;s/...$/1$&/;$d=
unxV,xb25,$_;$b=73;$e=256|(ord$b[4])<<9|ord$b[3];$d=$d>>8^($f=($t=255)&($d
>>12^$d>>4^$d^$d/8))<<17,$e=$e>>8^($t&($g=($q=$e>>14&7^$e)^$q*8^$q<<6))<<9
,$_=(map{$_%16or$t^=$c^=($m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;$t
^=(72,@z=(64,72,$a^=12*($_%16-2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]}(16..271))
[$_]^(($h>>=8)+=$f+(~$g&$t))for@a[128..$#a]}print+x"C*",@a}';s/x/pack+/g;eval

[Hot Wired - 7行でDVD暗号を解読するプログラム]
http://www.hotwired.co.jp/news/news/technology/story/20010308302.html



14 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 21:38
>>13
誰かインデントしてみてくれ。


15 名前: perl初心者 投稿日: 2001/03/10(土) 21:55
まずxをpack+に置き換えてから、$_の内容を実行するんですよね。
それでSTDINから$_に2048バイトずつ読み込んで、$a=29,$c=142、
ifのなかで、@aに$_の内容をunsigned charの配列にして読み込み、
その21番目と48と論理積とって偽ならそのまま出力、真なら$h=5,
$_と@aの80番目のXORをとってその下8ビット・・・むきーーーー



16 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 22:24
向こうの高校生よりも劣るのか、日本のプログラマって。
さいてー、プププ


17 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 22:48
while (read(STDIN,$_,2048))
{
    $a = 29;
    $c = 142;
    if ((@a = unpack("C*",$_))[20] & 48)
    {
        $h = 5;
        $_ = unpack(b24,join("",@b = map
                                     {
                                         pack(B8,unpack(b8,chr($_^$a[--$h+84])))
                                     }
                                     @ARGV ));
        s/...$/1$&/;
        $d = unpack(V,pack(b25,$_));
        $b = 73;
        $e = 256 | (ord($b[4])) << 9 | ord($b[3]);
        $d = $d>>8^($f = ($t = 255)&($d>>12^$d>>4^$d^$d/8))<<17,
        $e = $e>>8^($t&($g = ($q = $e>>14&7^$e)^$q*8^$q<<6))<<9,
        $_ = (map
              {
                  $_%16or$t^=$c^=($m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;
                  $t ^=(72,@z=(64,72,$a^=12*($_%16-2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]
              }
              (16..271) )[$_]^(($h>>=8)+=$f+(~$g&$t))for@a[128..$#a]
    }
    print pack("C*",@a)
}



18 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 23:34
あ、間違えてる、、、


19 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 00:35
これ、どうやって使うの?



20 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 00:46
なんだ。7行に収まったってだけじゃん・・・


21 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 00:50
>向こうの高校生よりも劣るのか、日本のプログラマって。
>さいてー、プププ

否定はしないよ。あっちのメガデモ関係とか見てると鬱になるよな。



22 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 00:56
>>21
技術云々って言うか、暇な奴が多いってことだろうけど。

日本のプログラマは搾取対象なので、趣味でなんか作る暇も無い。
(そういう風にプログラマを使ってる糞会社のせい。)


23 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 00:58
っていうか、おれ高校生の時プログラムなんてしなかったし。


24 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 01:34
>>20
凄いことだろ


25 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 03:30
日本にも1画面プログラムや1行プログラムがたくさんあったじゃん。



26 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 03:39
void main() while(1) printf("逝って良し!\n");


27 名前: いつでもどこでも名無しさん 投稿日: 2001/03/11(日) 04:04
>>25
テクノポリス別冊 プログラム・ポシェット
に投稿してました。


28 名前: 五郎 投稿日: 2001/03/11(日) 04:35
これはその高校生もすごいが、それよりperlがすごいんだよ。



29 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 04:39
てゆーか高校生じゃないじゃん、(>>13)どーでもいーけど。


30 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 05:45
妙にデモスレと似た雰囲気だなここは(藁


31 名前: 21 投稿日: 2001/03/11(日) 06:10
すまん。吾輩のせいかも。


32 名前: トリッキーの1 投稿日: 2001/03/11(日) 06:20
(関東など一部の地域での)テレビの2ちゃんねるシミュレータ、
すなわち砂嵐シミュレータを作ってみました。ざーっていうあれです。音は鳴らないけど。
言語はC+APIです。VisualC++6でコンパイル確認、Win2kと98で動作確認しました。
かな〜り削り取ったつもりですが、#include含めて13行もあります。

#include <Windows.h>
int i,r,a=640,b=400;long t[11]={40,640,400,2097153};char*k,y[0xfa000];long
WINAPI WndProc(HWND d,UINT m,UINT w,long l){PAINTSTRUCT p;switch(m){case 15:
HBITMAP q;HDC e;e=CreateCompatibleDC(BeginPaint(d,&p));GetDIBits(e,(q=
CreateCompatibleBitmap(p.hdc,a,b)),0,b,0,(BITMAPINFO*)t,0);for(k=y;k<y+a*b*4;
k+=4)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToDevice(p.hdc,0,0,a,b,0,0,0,b,y
,(BITMAPINFO*)t,0);DeleteObject(q);DeleteDC(e);EndPaint(d,&p);InvalidateRect
(d,0,0);return 0;case 2:PostQuitMessage(0);}return DefWindowProc(d,m,w,l);}int
WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int n){MSG m;WNDCLASS w;w.style=3;w
.lpfnWndProc=WndProc;w.cbWndExtra=w.cbClsExtra=0;w.lpszMenuName=0;w.hIcon=0;w.
hbrBackground=0;w.hCursor=LoadCursor(0,IDC_ARROW);w.lpszClassName="Tax's";w.
hInstance=i;RegisterClass(&w);ShowWindow(CreateWindow("Tax's","2ch",1<<19,99,
99,a,b,0,0,i,0),n);while(GetMessage(&m,0,0,0))DispatchMessage(&m);return 0;}

あと1行くらいは何とかなるかもしれないけれど、7行はちょっと……
オリジナルの、まともな変数名なコードを読みたいという人がもしいれば公開します。
あと、「俺ならここはこうする」という人がいれば是非是非教えてください。


33 名前: このスレの1 投稿日: 2001/03/11(日) 06:34
あくまで七行でお願いします。


34 名前: 30 投稿日: 2001/03/11(日) 06:38
>>31
気にしない気にしない。一休み一休み。


35 名前: 16進数スレより 投稿日: 2001/03/11(日) 06:52
#include <stdio.h>
int main(){
FILE *stream = fopen( "temp.txt", "w" );int giko, hahaha;
for( giko = 0; giko <= 0xF; giko++ ){fprintf( stream, "%x│", giko );
for( hahaha = 0; hahaha <= 0xF; hahaha++ )
fprintf( stream, " %x", giko & hahaha );
fprintf( stream, "\n" );}fclose( stream );}


36 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 07:01
>>32
まじで凄くねぇ?これ・・・


37 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 10:25
>>32
必要最低限のものが詰まってる感じだな


38 名前: SAGE 投稿日: 2001/03/11(日) 10:32
>>32
11行にはなったけど…7行はツラいなぁ。

// 無意味にC++。VC++6依存かも。
#include <windows.h>
PAINTSTRUCT p;HBITMAP q;HDC e;char*k,y[1<<20];int a=640,b=400,i,t[11]={40,a,b,
2097153},r;long WINAPI f(HWND d,UINT m,UINT w,long l){if(m==15){GetDIBits((e=
CreateCompatibleDC(BeginPaint(d,&p))),(q=CreateCompatibleBitmap(p.hdc,a,b)),0,
b,0,(BITMAPINFO*)t,0);for(k=y;k<y+a*b*4;k+=4)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;
SetDIBitsToDevice(p.hdc,0,0,a,b,0,0,0,b,y,(BITMAPINFO*)t,0);DeleteObject(q);
DeleteDC(e);return !InvalidateRect(d,0,!EndPaint(d,&p));}if(m==2)
PostQuitMessage(0);return DefWindowProc(d,m,w,l);}int WINAPI WinMain(HINSTANCE
i,HINSTANCE,LPSTR,int n){WNDCLASS w={3,f,0,0,i,0,LoadCursor(0,IDC_ARROW),0,0,
"Tax's"};RegisterClass(&w);ShowWindow(CreateWindow("Tax's","2ch",1<<19,99,99,a
,b,0,0,i,0),n);for(MSG m;GetMessage(&m,0,0,0);DispatchMessage(&m));return 0;}


39 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 11:22
Noise.java-------------------------
import java.awt.*;import java.awt.image.*;import java.util.*;public class Noise
extends Canvas{int P=256;byte[]c=new byte[P];int W=320;int H=240;byte[]p=new
byte[W*H];MemoryImageSource s;Image image;Random r=new Random();public Noise(){
for(int i=0;i<P;i++)c[i]=(byte)r.nextInt();s=new MemoryImageSource(W,H,new
IndexColorModel(8,P,c,c,c),p,0,W);s.setAnimated(true);image=createImage(s);}
public void update(Graphics g){for(int i=0;i<W*H;i++)p[i]=(byte)r.nextInt();s.
newPixels(0,0,W,H);g.drawImage(image,0,0,null);repaint(20);}public void paint(
Graphics g){update(g);}public Dimension getPreferredSize(){return new Dimension(
W,H);}public static void main(String[]a){Frame f=new Frame("Noise");Noise n=new
Noise();f.add(n);f.pack();f.setVisible(true);}}


32氏にならって作成。
Javaアプリケーション。
3行オーバー。
APIの使い方ちゃうねん。
レイアウトめんどい。
終了はCTRL+Cで(駄目すぎ)。
はっきり言って面白くない。
他の題材を探してこようと思う。


40 名前: 39 投稿日: 2001/03/11(日) 11:26
とにかくJavaでは見た目糞コードっぽくならなくてつまらん。
やはりPerlしかあるまいか。


41 名前: トリッキーの1 投稿日: 2001/03/11(日) 12:13
>>38
やっぱ他人の目は大切だな。何で気付かない?という所でだいぶん無駄がありましたね。
3行目が処理系依存なのが残念ですが、修正しても多分11行に収まりそうです。
最適化ありがとうございます。随分参考になりました。

>>40
Javaは言語が綺麗ですからね。import文はいいなぁ……(笑)


42 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 12:15
>>16
16,7,8歳頃ってハッカーとして一番の成長期だと思う。
なのに、日本の高校生は受験に追われ、PCとネットに(特にネットに)触れる機会が
少ないので、諸外国と比べハッカーが育ちにくいというのは、憂うべき状況だな。



43 名前: デモスレ住人 投稿日: 2001/03/11(日) 12:19
>>32 Watcom.
#include<windows.h>typedef void*v;typedef int i;i a=640,b=400,t[11]={40,640,400
,2097153},r;char*k,y[1<<25];HDC h,e;WINAPI w(v d,i m,i w,i l){if(m==15){v q=
CreateCompatibleBitmap(h,a,b);GetDIBits(e=CreateCompatibleDC(0),q,0,b,0,(v)t,0)
;for(k=y;k<y+a*b*4;k+=4)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToDevice(h,0,0,
a,b,0,0,0,b,y,(v)t,0);DeleteObject(q);DeleteDC(e);InvalidateRect(d,0,0);return
0;}return(m==2)?PostQuitMessage(0),0:DefWindowProc(d,m,w,l);}WNDCLASS c={0,(v)w,
0,0,(v)(1<<22),0,0,0,0,"."};WINAPI WinMain(v i,v x,v y,i z){MSG m;RegisterClass
(&c);h=GetDC(CreateWindow(".","頑張ってみたけど9行が限界かなぁ",37066<<16|32,
99,99,a,b,0,0,i,0));while(GetMessage(&m,0,0,0))DispatchMessage(&m);return 0;}



44 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 12:41
>42
プ。ちょうどその期間だけポッカリとブランクがあるんですけれど。


45 名前: 名無しさんi486 投稿日: 2001/03/11(日) 12:55
あのさ、smalltalkなら最終的にどんなプログラムでも一行なんすけど・・・


46 名前: >39 投稿日: 2001/03/11(日) 13:03
8行になった。

N.java

import java.awt.*;import java.awt.image.*;import java.util.*;class N extends
Frame{int W=320,H=240,P=256;byte[]c=new byte[P],p=new byte[W*H];
MemoryImageSource s;Image im;Random r=new Random();int i;N(){for(i=0;i<P;i++)c
[i]=(byte)r.nextInt();s=new MemoryImageSource(W,H,new IndexColorModel(8,P,c,c,c
),p,0,W);s.setAnimated(true);im=createImage(s);setSize(W,H);setVisible(true);}
public void update(Graphics g){for(i=0;i<W*H;i++)p[i]=(byte)r.nextInt();s.
newPixels(0,0,W,H);g.drawImage(im,0,0,null);repaint(20);}public void paint(
Graphics g){update(g);}static void main(String[]a){new N();}}



47 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 13:07
>>45
なんで?1行80文字以下の制限があるのに?プ


48 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 13:13
なんか知らんけど、発言するたびに屁を漏らす奴が一人いるね、このスレ。


49 名前: 43 投稿日: 2001/03/11(日) 13:19
ごめん,8行で書けたわ. 訂正.
#include<windows.h>typedef void*v;typedef int i;i a=640,b=400,t[11]={40,640,480
,2097153},r;char*k,y[1<<25];v h,m=y;WINAPI w(v d,i m,i w,i l){if(m==15){v q=Cr\
eateCompatibleBitmap(h,a,b);GetDIBits(h,q,0,b,0,(v)t,0);for(k=y;k<y+a*b*4;k+=4\
)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToDevice(h,0,0,a,b,0,0,0,b,y,(v)t,0);\
DeleteObject(q);return InvalidateRect(d,0,0);}if(m==2)ExitProcess(0);return De\
fWindowProc(d,m,w,l);}WINAPI WinMain(v i,v x,v y,i z){v c[]={0,(v)w,0,0,(v)(1<\
<22),0,0,0,0,"."};RegisterClass((v)c);h=GetDC(CreateWindow(".","2ch",37066<<16|
32,99,99,a,b,0,0,i,0));while(GetMessage(m,0,0,0))DispatchMessage(m);return 0;}



50 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 13:31
えらい圧迫感のあるスレだな(藁


51 名前: トリッキーの1 投稿日: 2001/03/11(日) 13:32
>>49
コンパイル出来なかったですが(Cコンパイラだとinclude以外は可能かな?)
参考になる部分は多かったです。文末の\はしらなかった。

WM_PAINTでBegin/EndPaintを呼ばなくてもいいんでしたっけ?
Windows3.1だと飛んでしまった記憶があるんですが、今試してみると
上手く動いてそうに見えます。MSDNにも「呼べ」って書いてないし。

最終的に10行になりました。後1行なら何とかなるでしょうが、
速度を維持したまま7行は絶対無理だと確信しました(笑)。
今回のはBegin/EndPaint問題も回避して、DCも毎回解放し、
何より全ての行が78文字以上なので等角フォントでみると
とても美しく見えます。俺としては満足です。
皆さんのコードはとても参考になりました。ありがとうございます。

#include <Windows.h>
HBITMAP q;HDC e,v;char*k,y[1<<20];int a=640,b=400,c,i,t[11]={40,a,b,1572865},r
;long WINAPI f(HWND d,UINT m,UINT w,long l){c=DefWindowProc(d,m,w,l);if(m==2)
PostQuitMessage(0);if(m==15){GetDIBits((v=GetDC(d)),(q=CreateCompatibleBitmap(
v,a,b)),0,b,0,(BITMAPINFO*)t,0);for(k=y;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9
+5)>>16;SetDIBitsToDevice(v,0,0,a,b,0,0,0,b,y,(BITMAPINFO*)t,0);DeleteObject(q
);InvalidateRect(d,0,0);ReleaseDC(d,v);}return c;}int WINAPI WinMain(HINSTANCE
i,HINSTANCE,LPSTR,int n){MSG m;WNDCLASS w={3,f,0,0,i,0,LoadCursor(0,IDC_ARROW)
,0,0,"Tax's"};RegisterClass(&w);ShowWindow(CreateWindow("Tax's","2ch",1<<19,99
,99,a,b,0,0,i,0),n);for(m;GetMessage(&m,0,0,0);DispatchMessage(&m));return 0;}



52 名前: 46 投稿日: 2001/03/11(日) 13:35
7行になった〜

N.java

import java.awt.*;import java.awt.image.*;import java.util.*;class N extends
Frame{int W=320,H=240;byte[]p=new byte[W*H];MemoryImageSource s;Image m;Random
r=new Random();void b(){for(int i=0;i<W*H;i++)p[i]=(byte)r.nextInt();}N(){b();s
=new MemoryImageSource(W,H,new IndexColorModel(8,256,p,p,p),p,0,W);
s.setAnimated(true);m=createImage(s);setSize(W,H);setVisible(true);}public void
update(Graphics g){b();s.newPixels();g.drawImage(m,0,0,null);repaint(20);}
public void paint(Graphics g){update(g);}static void main(String[]a){new N();}}



53 名前: 駄目プログラマ 投稿日: 2001/03/11(日) 13:49
#include <windows.h>
int WINAPI WinMain (HANDLE hI,HANDLE hP,LPSTR lp,int n)
{
RECT g;DWORD i=-1;HDC hdc = GetDC(0);GetWindowRect(GetDesktopWindow(), &g);
while(i--)SetPixel(hdc,rand()%g.right,rand()%g.bottom,rand());
ReleaseDC(0,hdc);return 0;
}

ほらよ、7行砂嵐プログラム。WIN32用でCな。win98meで動作確認。win2kは未確認。
ほっとけば いつか終了(藁。 我慢できなくなったらタスク終了しとけ。


54 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 13:59
>>53
見るからに動かしてみたくないぞ(藁


55 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 16:08
つかライブラリの量と質によるだろperlだってモジュールがあるし。
なんだって最終的に1行にできるよ。


56 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 16:49
>>55
用意されてるものだけで書くのが面白いんだろ。




57 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 16:54
>>51
これはすげえ。これだけのコードの短さを保ちながら、WNDCLASS部分などの
エラーチェック以外はほぼ完璧だ。しかも鬼門のDIBits関連APIをいじりながら、
描画アルゴリズムも最適化されてる。それでこの速度が達成出来るのか、うーむ。
いい勉強をさせられた。久々に他人のソースを見て感動したよ。


58 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 18:00
>51
>WM_PAINTでBegin/EndPaintを呼ばなくてもいいんでしたっけ?

呼ばなくてもいいけど、そのときはDefWindowProc()に処理を回さないとだめ。
DefWindowProc()が代わりにBegin/EndPaintを呼んでくれる。
WM_PAINTでBegin/EndPaintを呼ばずにreturnすると、無限ループになるよ。




59 名前: 57 投稿日: 2001/03/11(日) 18:23
>58
51さんはちゃんとその周りの処理も出来ているよ。
先にDefWindowProcを呼んで、その後で個別処理をしている。
ちなみにBegin/EndPaintを呼ばないと無限ループというのは間違いで、
WM_PAINTが絶え間なく呼ばれ続けるだけのはず。
今回の様なプログラムならそれを逆手にとって
InvalidateRectを呼ばない方法も考えられるね。
(そうするとまた少しコードが短くなる(笑))
でもそれは本来正しいプログラムではないので、51さんの方法がベストでしょう。


60 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 19:27
あまり誉められたものじゃないけど9行。
もう1行いけそう

#include <windows.h>
HBITMAP q;HDC e,v;char*k,y[1<<20];int a=640,b=400,c,i,t[11]={40,a,b,1572865},r;
int WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){int m[7];WNDCLASS w={67,De\
fWindowProc,0,0,i,0,0,0,0,"1"};RegisterClass(&w);ShowWindow(CreateWindow("1",0,
1<<19,0,0,a,b,0,0,i,0),1);while(GetMessage((MSG*)m,0,0,0)){DefWindowProc((HWND)
m[0],m[1],m[2],m[3]);if(m[1]==513)return 0;if(m[1]==15){GetDIBits((v=GetDC((HW\
ND)m[0])),(q=CreateCompatibleBitmap(v,a,b)),0,b,0,(BITMAPINFO*)t,0);for(k=y;k<y
+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToDevice(v,0,0,a,b,0,0,0,b,
y,(BITMAPINFO*)t,0);DeleteObject(q);InvalidateRect((HWND)m[0],0,0);}}}



61 名前: 60 投稿日: 2001/03/11(日) 19:28
ちなみに、クリックで終了w
ウインドウを閉じると、メモリにゴミが残りますw
スタイル変更したほうがよかったな。


62 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 19:51
>52
ふ〜ん。Javaの方が短いけれどずいぶんスッキリしているなあ


63 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 20:01
すごいですね。プログラムまったくわかりませんが、
大学に行ったらこんな凄いプログラムつくってみたいです


64 名前: 名無しでGO! 投稿日: 2001/03/11(日) 20:05
ところで、なんでみんな明らかに長くなりそうなWindows+CとかJavaなの?


65 名前: 60 投稿日: 2001/03/11(日) 20:25
もうちょっと縮めて8行

#include <windows.h>
HBITMAP q;HDC v;char*k,y[1<<20];int a=640,b=400,c,i,t[11]={40,a,b,1572865},r;W\
INAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){int m[7];WNDCLASS w={67,DefWind\
owProc,0,0,i,0,0,0,0,"1"};RegisterClass(&w);ShowWindow(CreateWindow("1",0,1<<19
,0,0,a,b,0,0,i,0),1);while(GetMessage((MSG*)m,0,0,0)){w.lpfnWndProc((HWND)m[0],
m[1],m[2],m[3]);if(m[1]==513)break;if(m[1]==15){v=GetDC((HWND)m[0]);for(k=y;k<y
+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToDevice(v,0,0,a,b,0,0,0,b,
y,(BITMAPINFO*)t,0);DeleteObject(q);InvalidateRect((HWND)m[0],0,0);}}return 0;}



66 名前: >64 投稿日: 2001/03/11(日) 20:41
だったら他の言語で書いてよ。


67 名前: トリッキーの1 投稿日: 2001/03/11(日) 20:44
>>58-59
情報tnxです。
59さん、確かにコレを利用するとかなり短く書けますね。
>>60
うーん、怖い。メッセージループ内で処理する場合、
SendMessageで送られたメッセージなどが
直接プロシージャにまわされてしまうので、
この例では例えばWM_DESTROYなどが処理できないはずです。
しかし、今思いついたんですが、GetMessageの返す
エラーメッセージを利用する方法がありますね。

というわけで>>58-60さんを参考にして書いてみました。
これも8行ですが、ちゃんと終了出来ます。
メモリはOSが解放してくれることを期待しています。
#include <Windows.h>
HBITMAP q;char*k,y[1<<20];int a=640,b=400,r,m[8];BITMAPINFO t={40,a,b,1,24};H\
WND g;int WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){WNDCLASS w={3,DefWi\
ndowProc,0,0,i,0,LoadCursor(0,IDC_ARROW),0,0,"T"};RegisterClass(&w);HDC v=Get\
DC(g=CreateWindow("T","2ch",268959744,99,99,a,b,0,0,i,0));q=CreateCompatibleB\
itmap(v,a,b);while(GetMessage((MSG*)m,g,0,0)!=-1){if(m[1]==15){GetDIBits(v,q,0
,b,0,&t,0);for(k=y;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToD\
evice(v,0,0,a,b,0,0,0,b,y,&t,0);}else DispatchMessage((MSG*)m);}return 0;}

7行が見えてきましたね(笑)


68 名前: トリッキーの1 投稿日: 2001/03/11(日) 20:53
まるでPGP鍵のようだ。

>>62
美しい言語である上、比較的簡単にグラフィックをさわれますからね。

>>63
これは悪い例です。というか、パズルみたいな物です。参考にしてはいけません。
確かに私は大学生ですが、普段こんな狂ったコードを書いているわけではありません。

>>64
他に適した言語がなかなか見つからないんですが、心当たりありますか?
使ったこと無いけれど、HSPとかだと簡単なのかな?


69 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 20:58
馬鹿スレから名スレへ


70 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 21:01
68さん>>
プログラム組んだことないのですが
はじめからC++って大丈夫ですか??
C言語知らなくてもC++の入門書読んでも大丈夫ですか??


71 名前: 60 投稿日: 2001/03/11(日) 21:01
>>67

>メモリはOSが解放してくれることを期待しています。
CS_CLASSDC か CS_OWNDC指定しておけば平気だと思う。
この例だと
WNDCLASS w = {67, ...
かな



72 名前: トリッキーの1 投稿日: 2001/03/11(日) 21:04
>>71=60さん
なるほど、名案!素晴らしい。
ちなみに>>67は、WM_PAINTが外から投げられると画面の更新を止めます。
その可能性は結構大きいので、バグプログラムだと言えるでしょう。悲しい。

>>70
すみません、スレ違いなので別の場所で会えれば……


73 名前: 60 投稿日: 2001/03/11(日) 21:07
関係ないけど、ちょっと気になってMSDN見てみた。

>警告 GetMessage 関数は、0 以外の値、0、-1 のいずれかを返します。したがって、次のようなコードは避けてください。
>while (GetMessage(lpMsg, hWnd, 0, 0)) ...

おぃ、どういうことだよ。
今までのサンプルってなんなんだ?


74 名前: トリッキーの1 投稿日: 2001/03/11(日) 21:13
>>73=60
-1を返しても、メッセージは大抵取れています。
Windows3.1の名残なのか、hwnd==NULLの場合でも正常に動作します。
ただこの場合、頻繁にエラーの-1が返されるようです。

しかし、本当にエラー(Windowが消滅した、など)を返してきた場合
対応できないので、>>67ではわざわざhwndを設定してエラーが出ないようにし、
その代わりエラーが返ってきたら(必ずいつか返ってくる)強制終了しています。


75 名前: 60 投稿日: 2001/03/11(日) 21:47
ゴール?
7行到達w
Cだとプリプロセッサというウザイものがあるから難しいねw

>>67を参考に。

#include <windows.h>
HDC v;char*k,y[1<<20];int a=640,b=400,c,i,r, m[8];BITMAPINFO t={40,a,b,1,24};H\
WND g;WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){ WNDCLASS w={67,DefWind\
owProc,0,0,i,0,0,0,0,"1"};RegisterClass(&w);v=GetDC(g=CreateWindow("1",0,26895\
9744,0,0,a,b,0,0,i,0));while(GetMessage((MSG*)m,g,0,0)!=-1){if(m[1]==15){for(k=
y;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToDevice(v,0,0,a,b,0,0
,0,b,y,&t,0);}elseDispatchMessage((MSG*)m);}return 0;}



76 名前: トリッキーの1 投稿日: 2001/03/11(日) 22:04
>>75
恥ずかしい……まさかこんな大穴を見落としていたとは。
確かにここまできたらGetDIBitsをする意味は全くないですね。

ちょっと惜しいのは、ウィンドウをドラッグすると更新が止まってしまう事です。
↓はそれを修正したInvalidateRectを呼ぶバージョンです。あとちょっと手を入れてあります。

#include <Windows.h>
char*k,y[1<<20];int a=640,b=400,c,r,m[8];BITMAPINFO t={40,a,b,1,24};HWND g;WI\
NAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){WNDCLASS w={67,DefWindowProc,0,0
,i,0,0,0,0,"T"};RegisterClass(&w);HDC v=GetDC(g=CreateWindow("T","2ch",513<<19
,99,99,a,b,0,0,i,0));while(GetMessage((MSG*)m,g,0,0)!=-1){if(m[1]==15){for(k=y
;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToDevice(v,0,0,a,b,0,0
,0,b,y,&t,0);}else DispatchMessage((MSG*)m);InvalidateRect(g,0,0);}return 0;}

しかし60さん、メッセージループといい素晴らしい目の付け所です。
60さんがいなければ7行達成出来ませんでしたね。今回はホントに勉強になりました。


77 名前: 39 投稿日: 2001/03/11(日) 22:09
>>52
ブラボー! 素晴らしいでし。
ていうか、宣言をまとめることすら思いつかなかった俺って
(いつも1行1個なんだも〜ん)
鬱だ氏のう


78 名前: 60 投稿日: 2001/03/11(日) 22:14
>>76
むむっ、こっちも別のアプローチで完成w
InvalidateRect呼ばないけど、ちょっとずるしてその辺解決。

#include <windows.h>
HDC v;char*k,y[1<<20];int a=640,b=400,c,i,r, m[8];BITMAPINFO t={40,a,b,1,24};H\
WND g;WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){WNDCLASS w={67,DefWindow\
Proc,0,0,i,0,0,0,0,"1"};RegisterClass(&w);v=GetDC(g=CreateWindow("1",0,2689597\
44,0,0,a,b,0,0,i,0));for(;;){if(PeekMessage((MSG*)m,0,0,0,1))DispatchMessage((
MSG*)m);else{if(!IsWindow(g))return 0;for(k=y;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(
r=r*9+5)>>16;SetDIBitsToDevice(v,0,0,a,b,0,0,0,b,y,&t,0);}}}




79 名前: トリッキーの1 投稿日: 2001/03/11(日) 22:20
>>78
ああなるほど。良くあるOnIdleの形ですね。
どちらの手法でも最終的にCPUを喰いまくるので(笑)
OKでしょう。

……そろそろ次のネタの時期ですね。
フルスクリーンのラスタースクロールとか(笑)


80 名前: トリッキーの1 投稿日: 2001/03/11(日) 22:27
>>51
自己レス
>最終的に10行になりました。後1行なら何とかなるでしょうが、
>速度を維持したまま7行は絶対無理だと確信しました(笑)。

今日の昼の発言。なんといい加減な確信だ(鬱)


81 名前: デフォルトの名無しさん 投稿日: 2001/03/11(日) 22:28
ついでに多重スクロールもきぼん


82 名前: トリッキーの1 投稿日: 2001/03/11(日) 22:37
7行で?(藁


83 名前: 81>82 投稿日: 2001/03/11(日) 22:39
いやべつに


84 名前: 38 投稿日: 2001/03/11(日) 22:39
>>76 , >>78
うぉ、あんたらすげぇ!

>>64
長くなりそうな言語で短く書くのが面白いのサ。


85 名前: 名無しの轍 投稿日: 2001/03/11(日) 22:41
俺は>>51のコードが非常に素晴らしいと思う。
もちろん7行達成も凄いことだが。


86 名前: トリッキーの1 投稿日: 2001/03/11(日) 22:44
>>85
ほめてくれてありがとう。
でも実は51、処理系依存の部分が1ヶ所あります。
書き直しても簡単に10行なのに、気付かなかった自分がちょっと嫌。


87 名前: 60 投稿日: 2001/03/11(日) 23:03
うんうん、51はすごかった。
俺もアレに触発されてやってみたわけだし。


88 名前: 52 投稿日: 2001/03/11(日) 23:04
>77
Javaの方が短いけれどわかりやすい。
・・・、というかWin32 APIよくわからないだけかも・・・。

乱数使うときはRandom#nextInt()を使ったほうが高速なんですね。
今までMath.random()使っていたけれど実はMath.random()が重いということを
知った今日この頃。

# Random#nextInt()はintだしねー


89 名前: 60 投稿日: 2001/03/11(日) 23:06
結局出来上がったコードはインデント戻せば普通な感じで面白み無いしね。
最後におまけで整理した行連結(\)なしバージョン

#include <windows.h>
char*k,y[1<<20];int a=640,b=400,c,r;BITMAPINFO t={40,a,b,1,24};WINAPI WinMain(
HINSTANCE i,HINSTANCE,LPSTR,int){MSG m;WNDCLASS w={67,DefWindowProc,0,0,i,0,0,0
,0,"1"};RegisterClass(&w);HWND g=CreateWindow("1",0,268959744,0,0,a,b,0,0,i,0);
HDC v=GetDC(g);for(;;){if(PeekMessage(&m,0,0,0,1))DispatchMessage(&m);else{if(!
IsWindow(g))return 0;for(k=y;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;
SetDIBitsToDevice(v,0,0,a,b,0,0,0,b,y,&t,0);}}}



90 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 00:53
新しいお題をクレー。粘土をクレー。


91 名前: 60 投稿日: 2001/03/12(月) 01:16
7行ラスタスクロールっしょ?
元絵を作る時点で7行超えてるし(鬱


92 名前: トリッキーの1 投稿日: 2001/03/12(月) 02:40
>>91
えっ……マジだったの?
ああ、今回はJavaにしたい……


93 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 04:55
;; nasmw s.asm -o s.com
dd 10cd13b0h,0c38ea0b7h,193740e4h,0f8e2aac7h,8626c031h,0f2e94105h,0ffh



94 名前: トリッキーの1 投稿日: 2001/03/12(月) 05:24
>>93
それは7行スレよりトリッキースレでしょう。
お待ちしております(笑)

>>91
骨格だけ作ってみました。10行です。最適化していないのでコード的に無駄だらけです(tとか)。
ここから出発するのはやめた方がいいかもしれません。BitBltは良くない。
とはいえ、Get/PutDIBitsを使うのもいまいち良くないですし。
いっそのこと、Windowの形態を無くしてしまうのも手かも……
その場合終了方法が問題です。

フルスクリーン ラスタースクロール
#include <windows.h>
#include <math.h>
HDC v,d,e;HWND g;int n,f,t[10]={40,0,0,1572865},m[8];WINAPI WinMain(HINSTANCE
i,HINSTANCE,LPSTR,int){t[1]=GetSystemMetrics(0);t[2]=GetSystemMetrics(1);
WNDCLASS w={67,DefWindowProc,0,0,i,0,0,0,0,"Lus"};RegisterClass(&w);v=GetDC(g=
CreateWindow("Lus",0,WS_VISIBLE|WS_POPUP,0,0,t[1],t[2],0,0,i,0));d=GetDC(0);
SelectObject(e=CreateCompatibleDC(d),CreateCompatibleBitmap(d,t[1],t[2]));
BitBlt(e,0,0,t[1],t[2],d,0,0,SRCCOPY);while(GetMessage((MSG*)m,g,0,0)!=-1){if
(m[1]==15)for(n=0;n<t[2];n++)BitBlt(v,sin(n*3.0/t[2])*sin((f++)/40.0)*60,n,t[1
],1,e,0,n,SRCCOPY);DispatchMessage((MSG*)m);InvalidateRect(g,0,0);}return 0;}



95 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 07:09
トリッキーの1さん、すっかりここの主になっちゃったね(藁


96 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 13:52
>94
なんでこの行数でこんな事が出来るんだ・・


97 名前:    投稿日: 2001/03/12(月) 14:44
優良スレだな。



98 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 14:55
月面着陸ゲームを50 or 25行で。



99 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 15:07
ぬ、560文字という制限なのですね。
Rubyじゃ無理だな。


100 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 15:07
>98
おいおい、(約)7行っていう縛りがあるから面白いんじゃないの?
50行×79字なんて掲示板には適さないし、研ぎの魅力が半減だ。



101 名前: 38 投稿日: 2001/03/12(月) 15:56
7行で圧縮&展開だ〜!
…というネタを振ろうと思って試しに作ってみたら出来ちゃった。

#include <stdio.h>
main(int C,char**V){FILE*r,*w;int c,p=-1,l=1;if(C==4){r=fopen(V[2],"rb");if(r)
{w=fopen(V[3],"wb");if(*V[1]-'x'){while((c=getc(r))-EOF){if(p-c||l==255){if(l-
1)putc(p,w),putc(l,w);putc(c,w),l=0;}l++,p=c;}if(l-1)putc(p,w),putc(l,w);}else
{while((c=getc(r))-EOF){if(c==p){l=getc(r);while(l--)putc(p,w);if(EOF==(c=getc
(r)))break;}else if(p+1)putc(p,w);p=c;}}fclose(r);fclose(w);}}else puts(
"usage: [a|x] [file_in] [file_out] (a:compress, x:expand)");return 0;}

# ただしただのRLEなので単色ビットマップとか以外はむしろサイズ増えるかも(^^;


102 名前: 60 投稿日: 2001/03/12(月) 16:33
とりあえず、9行。
>>94
まだいけそうなのでがんばります。

#include <windows.h>
#include <math.h>
WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){WNDCLASS w={67,DefWindowProc,0,0,i,0,0
,0,0,"R"};HDC e,d=GetDC(0);int a=GetSystemMetrics(0),b=GetSystemMetrics(1),n,f,
o=SRCCOPY;RegisterClass(&w);HWND g=CreateWindow("R",0,9<<28,0,0,a,b,0,0,i,0);M\
SG m;SelectObject(e=CreateCompatibleDC(d),CreateCompatibleBitmap(d,a,b));BitBlt
(e,0,0,a,b,d,0,0,o);while(IsWindow(g)){if(PeekMessage(&m,0,0,0,1))DispatchMess\
age(&m);for(n=0;n<b;n++)BitBlt(GetDC(g),sin(n*3.0/b)*sin((f++)/40.0)*60,n,a,1,e
,0,n,o);}return 0;}



103 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 17:25
>>101

この調子でスライド辞書+ハフマンお願い。


104 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 18:17
C++コンパイラもよろしく。


105 名前: 60 投稿日: 2001/03/12(月) 21:14
いんちきラスタスクロールになったけど(笑)、いちお、7行。
まっとうなやつで可能なのかな?

#include <windows.h>
#include <math.h>
int a=GetSystemMetrics(0),b=GetSystemMetrics(1),n,f,o=SRCCOPY,s;MSG m;HINSTANCE
i;main(){ WNDCLASS w={67,DefWindowProc,0,0,i=GetModuleHandle(0),0,0,0,0,"R"};
RegisterClass(&w);HWND g=CreateWindow("R",0,9<<28,0,0,a,b,0,0,i,0);HDC d=GetDC(
g);while(IsWindow(g)){if(PeekMessage(&m,0,0,0,1))DispatchMessage(&m);else{for(n
=0;n<b;n++)BitBlt(d, s=sin((f+n+1)/40.0)*60,n,a,1,d,s,n,o);f++;}}return 0;}



106 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 21:35
>>103-104
ムリ(藁


107 名前: 60 投稿日: 2001/03/12(月) 21:43
ここに提示されるソースのインデントを整えるツールとか7行でできるかな?


108 名前: トリッキーの1 投稿日: 2001/03/12(月) 23:15
>>105
これでいいんじゃないでしょうか。Windowを登録しないという技を使えば、
表示的にはまともな(ただし作法からは大幅にはずれた)プログラムは出来そうですが。
砂嵐で培ったノウハウが活用されていますね。C+APIに関してはコレくらいかな?

さて、次は何でしょう。圧縮ですか?インデントツールですか?
インデントツールは難しそうです。構文解析を7行は辛いな(笑)


109 名前: デフォルトの名無しさん 投稿日: 2001/03/12(月) 23:20
倉庫番きぼーん


110 名前: B++ 投稿日: 2001/03/12(月) 23:21
俺も挑戦してみたくなったので参戦。
とりあえずラスタスクロールを>>94をもとに作ってみた。
#include <windows.h>
#include <math.h>
char*p,q[1<<23];int v,w,h,y,f;HANDLE n,a,b,c,t;int APIENTRY WinMain(HINSTANCE
i,HINSTANCE,LPSTR,int){v=(w=GetSystemMetrics(0))*3;h=GetSystemMetrics(1);b=
CreateCompatibleDC(a=GetDC(0));BITMAPINFO o={{40,w,h,1,24}};SelectObject(b,
CreateDIBSection(a,&o,0,(void**)&p,0,0));BitBlt(b,0,0,w,h,a,0,0,SRCCOPY);c=
GetDC(n=CreateWindow((LPCTSTR)32770,"2ch",9<<28,0,0,w,h,0,0,i,0));MSG m;
CopyMemory(q+v,p,v*h);while(GetMessage(&m,0,0,0)){for(y=0;y<h;y++)CopyMemory(p
+y*v,q+y*v+v+(int)(sin(y*3.0/h)*sin(++f/10.0)*60)*3,v);BitBlt(c,0,0,w,h,b,0,0,
SRCCOPY);DispatchMessage(&m);InvalidateRect(n,0,0);}return 0;}
下手にバックバッファ(DIBSection)使ったら長くなった。
ポイントはウィンドウクラスに32770(ダイアログ用のクラス)
を使うとRegisterClassが不要になること。


111 名前: トリッキーの1 投稿日: 2001/03/12(月) 23:34
>>110
参戦大歓迎です(笑)

>ポイントはウィンドウクラスに32770(ダイアログ用のクラス)
なるほど、そんな怪しい方法があったとは。参考になります。
この場合、"EDIT"などでもいいかもしれませんね。

しかしこの場合、どうやって終了させればいいんでしょ?
ALT+F4利かないですね。例のSendMessage問題が難しそうです。
後、このコードはC++処理系だとコンパイル出来ないのが残念ですね。


112 名前: 39 投稿日: 2001/03/12(月) 23:55
>>109
ゲーム系は入力周りだけで7行食っちまいそうでし。
標準Cの範囲でなんか題材ないかにゃー?


113 名前: トリッキーの1 投稿日: 2001/03/13(火) 00:12
標準Cだと、ヘッダファイルが行数を圧迫してつらいっす。
stdio、stdlibだけで2行だし、そのうえ特殊な物をつかうと……
致し方ないですけどね(笑)


114 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 00:14
やっぱPerlにしようよ。


115 名前: 60 投稿日: 2001/03/13(火) 00:23
>>105
あ、処理系依存だな。
まぁ、しょうがないか。

>>114
Perlですか。
専門外なんで、パスですかね(^^;


116 名前: 38 投稿日: 2001/03/13(火) 01:04
-- Cのソースのインデントを整えてるふりをする(笑)ツール --

※ 構文解析?知らんな(ナンチテ
※ IEからコピペするときは行末スペースを削ってからぶち込んでクレ。
※ 絶対Perlとかの方が向いてる作業だよなぁ、これ…。

#include <stdio.h>
#define g EOF!=(c=getc(stdin))
#define p(x) putc(x,stdout)
int main(){int i,c,d=0,n=0;while(g){p(c);if(c!='#')break;while(g){p(c);if(c==
'\n')break;}}while(g){if(c=='\\'&&g&&c!='\n')p('\\');if(c!='\n'){if(c=='}')d--
;if(n){n=0;for(i=0,p('\n');i<d;i++)p('\t');}p(c);if(c==',')p(' ');if(c==';')n=
1;if(c=='{'){d++;n=1;}if(c=='}')n=1;}}return 0;}


117 名前: 38 投稿日: 2001/03/13(火) 01:17
↑いかん、致命的バグがあった…(汗


118 名前: 39 投稿日: 2001/03/13(火) 02:20
soukoban.pl---------------
open I,"s.txt";while(<I>){chop;$m.=$_;$w=length;$h++;}$p=index $m,"P";$m=~
s|P|.|;@b=(0,0,$w,0,-1,0,1,0,-$w,0);while($m=~/\$/){$t=$m;substr $t,$p,1,"P";
for(1..$h){print substr($t,0,$w,"")."\n";}print"\n";$v=$b[<STDIN>];$d=$p+$v;
$c=substr $m,$d,1;if($c eq'#'){next;}if($c eq'$'){$c=substr $m,$d+$v,1;if($c
eq'#'){next;}substr $m,$d,1,".";substr($m,$d+$v,1,$c eq"_"?'#':'$');}$p=$d;}

s.txt---------------------
................
......#####.....
......#...#.....
....###$..#.....
....#..._.#.....
....#...__#.....
....#.P.$$#.....
....#.....#.....
....####..#.....
.......####.....
................
................

>>109氏の挑戦に応えて、倉庫番である。
5行である。
恐るべしPerl。
ステージは外部ファイル(邪道?)。
移動は8、2、4、6+リターン。
Perl初心者なので無駄あると思う。
誰か面白いステージ作って下さい。


119 名前: 39 投稿日: 2001/03/13(火) 02:23
しまったバグ発見。


120 名前: 39 投稿日: 2001/03/13(火) 02:33
open I,"s.txt";while(<I>){chop;$m.=$_;$w=length;$h++;}$p=index $m,'P';$m=~s|P|.|
;@b=(0,0,$w,0,-1,0,1,0,-$w,0);while($m=~/\$/){$t=$m;substr $t,$p,1,'P';for(1..$h
){print substr($t,0,$w,"")."\n";}print"\n";$v=$b[<STDIN>];$d=$p+$v;$c=substr $m,
$d,1;if($c eq'#'){next;}if($c eq'$'){$c=substr $m,$d+$v,1;if($c =~/#|\$/){next;}
substr $m,$d,1,".";substr $m,$d+$v,1,$c eq'_'?'#':'$';}$p=$d;}

よし、修正(汗)。


121 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 04:26
やはりperlだとあまり面白くないと思うのは俺だけ?


122 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 04:45
>>121
じゃあどうすれバインダー



123 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 07:08
1画面って事で 25x80文字位のショートプログラムスレ欲しいねぇ


124 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 09:30
くくくれー。題材くれー。


125 名前: トリッキーの1 投稿日: 2001/03/13(火) 09:47
>>118
残念ながらうちのjperl4(dos)ではインタプリタを通りませんでした。
それっぽいところを修正したら、今度は標準出力に何も表示されません。
うーん、同じ症状の人はいないかな?

>>121-122
perlは汚い言語なので、凄いと思わせるプログラムはなかなか難しいでしょう。
よほど難しい題材でないと、「7行でこんな事が!」という感じにはなりづらいです。

>>108
参考までに、全画面ラスタースクロールのWindowを登録しないバージョンを作ってみました。
展開してみるとわかると思うけど、簡単かつ邪道な方法です。
7行です。終了は左クリックです。

#include <windows.h>
#include <math.h>
WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){HDC d,e;int x=GetSystemMetrics(
0),y=GetSystemMetrics(1),n,f;d=GetDC(0);SelectObject(e=CreateCompatibleDC(d),
CreateCompatibleBitmap(d,x,y));BitBlt(e,0,0,x,y,d,0,0,SRCCOPY);while(!(
GetKeyState(1)&(1<<31))){for(n=0;n<y;n++)BitBlt(d,sin((n)*3.0/y)*sin((f++)/
40.0)*60,n,x,1,e,0,n,SRCCOPY);Sleep(1);}InvalidateRect(0,0,1);return 0;}

すかすかなので、気合いを入れればもう1行くらい余裕で縮まりそうです。
全画面砂嵐なら5行で作れるかもしれませんね(笑)


126 名前: 38 投稿日: 2001/03/13(火) 12:14
>>116修正版。

#include <stdio.h>
#define p(x) putchar(x)
main(){int c,i,v=10,k=0,d=0,n=0;for(;(c=getchar())-EOF;v=c){if(v==10&&c==35)do
{p(c);}while(c-10&&(c=getchar())-EOF);else{if(c==92&&g){if(c==10){c=v;continue
;}else p(92);}if(c==10)c=32;if(c=='}')d--;if(n){n=0;if(!k&&c-59)for(i=0,p(10);
i<d;i++)p(9);}if(c==41)p(32);p(c);if(c==44)p(32);if(c==40)p(32),k++;if(c==41)k
&&k--;if(c=='{')n=1,d++;if(c=='}'||c==59||c==58)n=1;}}return 0;}

ダメダメ。俺の腕じゃこんなもんだな。

>>118
うち(v5.6.0)だとちゃんと動いたっす。マップも
スクリプト内に埋めちゃってても7行で行けるんでは?


127 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 14:00
>>125
いまどきPerl4はないと思うが…。今の普通はどう考えても5だよ。


128 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 14:18
すげぇ!みんなすげぇよ!


129 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 14:58
とりあえず、125のを無理やりPascalにしてみました(藁

a.pas---------------------
program a;uses Windows;var d,e:HDC;x,y,n,f:UINT;begin x:=GetSystemMetrics(0);y
:=GetSystemMetrics(1);d:=GetDC(0);e:=CreateCompatibleDC(d);SelectObject(e,
CreateCompatibleBitmap(d,x,y));BitBlt(e,0,0,x,y,d,0,0,SRCCOPY);while((1shl 31)
and GetKeyState(1)=0)do for n:=0to y-1do begin BitBlt(d,Round(sin(n*3/y)*sin(f
/40)*60),n,x,1,e,0,n,SRCCOPY);Inc(f);Sleep(0);end;InvalidateRect(0,0,True)end.

5行でふ。しっかし、こんなんでよう動きますなあ・・・。


130 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 15:16
デモスレからのお便り(ワラ

7行でレイトレーシングしてクレヨ


131 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 16:30
>>130
むしろ、7行レイトレーシングを引っ提げて
そっちから殴り込みかけてくれヨ。(^^)


132 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 17:50
見てみたいぜ!月面着陸ゲーム!



133 名前: トリッキーの1 投稿日: 2001/03/13(火) 18:10
>>127
Dos時代から環境を引きずっているのだよ…許してください。


134 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 19:10
WindowsならActivePerlでもいれときましょー
http://www.activestate.com/Products/ActivePerl/


135 名前: *nix厨 投稿日: 2001/03/13(火) 19:22
参戦します。
スライド辞書圧縮にチャレンジしました。
#include <stdio.h>
int l=0,s,i,j,m,e=32,f=0x3ff;char c,*d=0;main(){while((c=getchar())-EOF){d=rea\
lloc(d,l+1);d[l++]=c;}d[l]=0;if(l<4){for(i=0;i<l;i++)printf("%c",d[i]);return 0
;}printf("%c%c%c",d[0],d[1],d[2]);for(s=3;s<(l-3);s++){j=(s>e)?e:s;for(m=1,j=((
l-s-2)>j)?j:(l-s);j>2;j--){for(i=(s-(s&f));i<s;i++){if(!(m=memcmp(d+i,d+s,j)))
break;if((i+j)>l)break;}if(!m)break;}if(!m){printf("(%d,%d)",s-i,j);s+=j-1;}el\
se putchar(d[s]);}for(i=s;i<l;i++) printf("%c",*(d+i));return 0;}
の7行。
コード化は課題とさせてください。
動作はテキストファイルを放りこめば見れます。


136 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 19:42
おぉぉぉ。まじで?


137 名前: *nix厨 投稿日: 2001/03/13(火) 19:43
古いの送っちまった。鬱
ま、7行で動くからいいか・・・


138 名前: >126 投稿日: 2001/03/13(火) 19:58
コンパイル通らぬ…。

#include <stdio.h>
#define p(x) putchar(x)
main(){int c,i,v=10,k=0,d=0,n=0;for(;(c=getchar())-EOF;v=c){if(v==10&&c==35)do
p(c);while(c-10&&(c=getchar())-EOF);else{if(c==92&&(c=getchar())-EOF){if(c==10)
{c=v;continue;}else p(92);}if(c==10)c=32;if(c=='}')d--;if(n){n=0;if(!k&&c-59)
for(i=0,p(10);i<d;i++)p(9);}if(c==41)p(32);p(c);if(c==44)p(32);if(c==40)p(32),k
++;if(c==41)k&&k--;if(c=='{')n=1,d++;if(c=='}'||c==59||c==58)n=1;}}return 0;}

こうじゃないか?


139 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 20:03
>むしろ、7行レイトレーシングを引っ提げて
>そっちから殴り込みかけてくれヨ。(^^)

うむ。我々は誰の挑戦でも受ける!


140 名前: トリッキーの1 投稿日: 2001/03/13(火) 22:20
>>135
をを、凄い。7行で作れるもんなんだね。


141 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 23:14
>>137
うぉぉ。
本当にできるとは。

新しい方も見てみたい。
age


142 名前: 38 投稿日: 2001/03/13(火) 23:26
>>138
おぉThanks!その通りです…

>>135
よーし次はハフマンよろしく!(w
ってのは冗談だけど、ArithmetricCoder辺りなら7行におさまらないかな…


143 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 23:37
>137
コンパイル通らんぞ
#include <stdlib.h>
#include <memory.h>
が抜けてる。

それと、これって当然解凍できないよね。
バイナリの圧縮も出来ないし。
まだまだ職人の入り込む余地はあるな


144 名前: デフォルトの名無しさん 投稿日: 2001/03/13(火) 23:58
こういうネタは手短に書けるように設計されたCやperl言語の圧勝だね。
行指向の言語じゃ無理だし。
流行のDelphiやpythonじゃこうはいかない・・?


145 名前: デフォルトの名無しさん 投稿日: 2001/03/14(水) 00:15
あの、>>135,138の
(c=getchar())-EOF
の部分って、等価比較より引き算の方が速いって事ですか?
それとも単に字数を稼ぐ為?
EOFのこういう使い方は初めてみたので。


146 名前: *nix厨 投稿日: 2001/03/14(水) 01:20
仕切りなおし。
#include <stdio.h>
int e=31,f=1023,g=0,h,i,j,k,l=0,m,n=127,s;char *d=0;main(){while((s=getchar())-EOF){d=
realloc(d,l+1);d[l++]=s;}d[l]=0;for(s=0;s<(l-3);s++){j=(s>e)?e:s;for(m=1,j=((l-s-2)>j)?j:(
l-s);j>2;j--){for(i=(s<f)?0:s-f;i<s;i++){if((!(m=memcmp(d+i,d+s,j)))||((i+j)>l))break;}if(
!m)break;}if(!m){if(s-g){for(k=s-g;k>n;k-=n){putchar(n);for(h=0;h<n;h++)putchar(d[g++]);}
putchar(k);for(;k>0;k--)putchar(d[g++]);}putchar(0x80+(j<<2)+(s-i)/256);putchar((s-i)%256)
;s=(g=s+j)-1;}}putchar(l-s);for(i=s;i<l;i++)putchar(d[i]);return 0;}

下記データが並んだのフォーマット。
先頭バイトの*値*が0x80未満なら以降の*値*バイトが未圧縮。
0x80以上なら次のバイトと合わせて先頭ビットがフラグ(1=圧縮)、7-16ビットが
一致する相対位置、2-6が一致するバイト数。

これで復号も可能なデータになったはずだけど、バグがあるかも。


147 名前: *nix厨 投稿日: 2001/03/14(水) 01:57
案の定、終了時の処理がバグってる。
ついでにターミナルの設定を間違ったみたいで、横が90字くらいあるぞ(w
だめだ。今日は寝よ


148 名前: 39 投稿日: 2001/03/14(水) 02:00
>うち(v5.6.0)だとちゃんと動いたっす。マップも
>スクリプト内に埋めちゃってても7行で行けるんでは?

エディットしやすさを優先したんですが、
よく見たら埋め込むスペースがありますね。

というわけで、ちょこちょこと無駄を省いて
(代入後再評価できるのど忘れしてた。ジーザス、なんてこった)
マップ込み5行倉庫番でし。

sokoban.pl-----------------------
$p=35;$m='###########..$...._##.$.##.._##..$...._##.$....._##..$########..# '
.' #..##### #....._# ########';@b=(0,0,$s=10,0,-1,0,1,0,-$s,0);while($m=~/\$/
){substr$t=$m,$p,1,'P';for(1..$s){print substr($t,0,$s,"")."\n";}print"\n";if((
$c=substr$m,$d=$p+($v=$b[<>]),1)eq'#'){next;}if($c eq'$'){if(($c=substr$m,$d+$v,
1)=~/#|\$/){next;}substr$m,$d,1,".";substr$m,$d+$v,1,$c eq'_'?'#':'$';}$p=$d;}



149 名前: 高橋はゑみ 投稿日: 2001/03/14(水) 02:14
1 WIDTH40,25:CONSOLE0,25,0,1:COLOR5,32:PRINTCHR$(12);SPC(5);"<= SCORE":LINE(0,2)
-(37,24),"■",3,B:M=-1730:V=2:FORT=1TO400:I=INP(0):V=-V*(I=255)+(I=253)*2-(I=247
)*2+((I=223)-(I=251))*120:M=M+V:IFPEEK(M)=32THENBEEP1:POKEM,135:PRINTCHR$(11);T:
BEEP0:NEXT

ワンラインあるけあるけゲームだよー。P8用。


150 名前: 39 投稿日: 2001/03/14(水) 02:22
あああああっ、空白が勝手にまとめられてるし。再掲!

sokoban.pl----------------
$p=35;$m='###########..$...._##.$.##.._##..$...._##.$....._##..$########..#....'
.'..#..#####..#....._#..########';@b=(0,0,$s=10,0,-1,0,1,0,-$s,0);while($m=~/\$/
){substr$t=$m,$p,1,'P';for(1..$s){print substr($t,0,$s,"")."\n";}print"\n";if((
$c=substr$m,$d=$p+($v=$b[<>]),1)eq'#'){next;}if($c eq'$'){if(($c=substr$m,$d+$v,
1)=~/#|\$/){next;}substr$m,$d,1,".";substr$m,$d+$v,1,$c eq'_'?'#':'$';}$p=$d;}


151 名前: むぎ茶 投稿日: 2001/03/14(水) 05:16
<script
language="JavaScript">
<!--
alert("   Λ_Λ \n  ( ´∀`)\n  (    )\n  | | | \n  (__)_) ");
//-->
</script>


152 名前: デフォルトの名無しさん 投稿日: 2001/03/14(水) 08:28
>>150
動いたよん(Perl5.6Win32) ヽ( ´ー`)ノ


153 名前: *nix厨 投稿日: 2001/03/14(水) 14:59
やっと7行になったよ
#include <stdio.h>
int e=31,f=1023,g=0,h,i,j,k,l=0,m,n=127,o,(*p)()=&putchar,s;char *d=0;main(){
while((s=getchar())-EOF){d=realloc(d,l+9);d[l++]=s;}memset(d+l,0,8);printf(
"%x\n",l);l+=8;for(s=0;s<(l-3);s++){j=(s>e)?e:s;for(m=1,j=(l-s-2>j)?j:(l-s);j>2
;j--){for(i=(s<f)?0:s-f;i<s;i++){if(!(m=memcmp(d+i,d+s,j))||i+j>l)break;}if(!m)
break;}if(!m){if(s-g){for(k=s-g;k>n;k-=n)r(o=n);r(o=k);}(*p)(128+(j<<2)+(s-i)/
256);(*p)((s-i)%256);s=(g=s+j)-1;}}}r(){(*p)(o);for(h=0;h<o;h++)(*p)(d[g++]);}

出力フォーマットは>>146と同じだが、先頭行に圧縮前サイズを出力するようになった。
これは終了時の処理が7行にまとまらなかったためで、オーバーランして圧縮し、
復号時に圧縮前サイズまで展開をする。この外道な仕様で勘弁して(w


154 名前: *nix厨 投稿日: 2001/03/14(水) 19:45
復号できたよ。

#include <stdio.h>
#include <stdlib.h>
int c,h,i,j,l,s=0;char *d=0;main(){if(scanf("%x\n",&l)-1)return 1;if(!(d=(char*
)malloc(l+8)))return 2;while((c=getchar())-EOF){if(c<127){for(i=0;i<c;i++){if((
h=getchar())-EOF){d[s++]=h;}else return 1;}}else{if((h=getchar())-EOF){h+=(c-
128)<<8;for(i=0,j=s-(h&1023);i<h>>10;i++){d[s++]=d[j++];if(s>l)break;}}else
return 1;}if(s>l)break;}fwrite(d,1,l,stdout);return 0;}

フォーマット異常時の処理まで手が回っていないので、>>153の出力結果だけ
放りこむようにしてください。


155 名前: デフォルトの名無しさん 投稿日: 2001/03/14(水) 21:47
>> 153-154
次はやっぱしハフマンかArithへの挑戦?

http://www.ioccc.org/
ここに応募してみるのも一興。


156 名前: デフォルトの名無しさん 投稿日: 2001/03/14(水) 21:57
>>153-154
おぉ!すげーよ
バイナリもそれなりに圧縮するし、ちゃんと戻る(w
謝っとこ、何度も書き込むんで、ドキュソと思っていました。ごめん


157 名前: デフォルトの名無しさん 投稿日: 2001/03/14(水) 23:11
>>153-154
VisualC++6(Win32)で動作確認しました。
符号化、復号化共に、以下のコードを追加しました。

#include <fcntl.h> //_O_BINARY
main(){
_setmode( _fileno( stdin ), _O_BINARY );
_setmode( _fileno( stdout ), _O_BINARY );
...

バイナリデータをリダイレクトする場合、Windowsでは最初に
setmodeを実行しないとうまくいかない様です。(ほかに良い方法はあるかな?)
それにしても凄いプログラムですね。


158 名前: デフォルトの名無しさん 投稿日: 2001/03/14(水) 23:25
なんかすごいぞ。がんばれ。

>>155 さんもいってるけど
http://www.ioccc.org/
に応募するのどう?



159 名前: >157 投稿日: 2001/03/15(木) 00:08
今Windowsのコンソールで試したら、
ファイルの先頭が改行"\r\n"のデータに対してはなんかおかしくなるね。
scanfのせいだろうけど。


160 名前: デフォルトの名無しさん 投稿日: 2001/03/15(木) 00:19
>158

>Sorry, right now you cannot enter the contest.
>The International Obfuscated C Code Contest is closed.

って書いてあるぞ。


161 名前: tara 投稿日: 2001/03/15(木) 02:06
7行超簡易HTTPクライアントです。エラーチェックもほとんど無し。
Windows専用です。引数に数字でホスト名を入力(www.yahoo.co.jpなら
210.152.236.113)してください。デフォルトのインデックスファイルの
内容を取得します。リンクする時にWinsockのライブラリを含めてください。

#include <stdio.h>
#include <winsock.h>
main(int c,char **a){SOCKADDR_IN d;WSADATA w;char t[99],x[]="GET /\n\n";
int z;SOCKET s;WSAStartup(MAKEWORD(2,2),&w);s=socket(AF_INET,SOCK_STREAM,0);if(
c!=2)return;d.sin_family=AF_INET;d.sin_port=htons(80);d.sin_addr.s_addr=
inet_addr(a[1]);if(!connect(s,(PSOCKADDR)&d,sizeof(d))){send(s,x,7,0);Sleep(
5000);while(z=recv(s,t,99,0)){t[z]=0;printf("%s",t);}}closesocket(s);}

HTTPヘッダなどはそのまま出てしまいます。


162 名前: *nix厨 投稿日: 2001/03/15(木) 09:41
>>155
ハフマンの方が短くなりそうなので、ハフマンに挑戦してみます。
さすがに自信が無いのでsage


163 名前: デフォルトの名無しさん 投稿日: 2001/03/15(木) 11:23
>>32

トリッキーの1氏、まともな変数名のを拝見したく。
是非お願い姿態。


164 名前: トリッキーの1 投稿日: 2001/03/15(木) 18:01
>>163
ご要望にお応えして。
最初から行数を減らすことを念頭に置いていたので、
あまりよろしくない部分もあるのでご注意。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  PAINTSTRUCT ps;
  HDC hdc;

  int  i;
  static int  r;    // 乱数用

  switch( message )
  {
    case WM_PAINT:
    {
      hdc = BeginPaint (hWnd, &ps);

      unsigned char *bitmap;
      bitmap=new unsigned char[640*400*3];

      HDC hmemdc;
      hmemdc=CreateCompatibleDC(hdc);

      HBITMAP  hb;
      hb=::CreateCompatibleBitmap(hdc,640,400);

      BITMAPINFO  bi;
      // 最低でも以下の情報だけは指定する必要がある
      bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
      bi.bmiHeader.biWidth = 640;
      bi.bmiHeader.biHeight = 400;
      bi.bmiHeader.biPlanes = 1;
      bi.bmiHeader.biBitCount = 24;
      bi.bmiHeader.biCompression = BI_RGB;

      // 念のために精確なBITMAPINFOを取得しておく
      GetDIBits(hmemdc,(HBITMAP)hb,0,400,0,&bi,DIB_RGB_COLORS);

      for(i=0;i<640*400*3;i+=3)
      {
        // r:疑似乱数
        // RGBすべてを同じ値にしてグレースケールにする
        bitmap[i]=bitmap[i+1]=bitmap[i+2]=r>>16;
        r = (r * 9 + 5);
      }

      // dcにコピー
      SetDIBitsToDevice(hdc,0,0,640,400,0,0,0,400,bitmap,&bi,DIB_RGB_COLORS);

      DeleteObject((HBITMAP)hb);
      DeleteDC(hmemdc);

      delete bitmap;
      EndPaint( hWnd, &ps );
      InvalidateRect(hWnd,NULL,false);
      break;
    }
    case WM_DESTROY:
      PostQuitMessage( 0 );
      break;
    default:
      return DefWindowProc( hWnd, message, wParam, lParam );
  }
  return 0;
}

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
  MSG      msg;
  WNDCLASS  wndclass;
  HWND    hWnd;

  if(!hPrevInstance)
  {
    // 古いWNDCLASSを使用(行数を減らすため)
    wndclass.style=CS_HREDRAW|CS_VREDRAW;
    wndclass.lpfnWndProc=WndProc;
    wndclass.cbClsExtra=0;
    wndclass.cbWndExtra=0;
    wndclass.hInstance=hInstance;
    wndclass.hIcon=NULL;
    wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
    wndclass.hbrBackground=NULL;
    wndclass.lpszClassName="Tax";
    wndclass.lpszMenuName=NULL;
    if(!RegisterClass(&wndclass))
      return FALSE;
  }
  hWnd=CreateWindow("Tax","2ch",WS_OVERLAPPED|WS_SYSMENU
    ,CW_USEDEFAULT,CW_USEDEFAULT,640,400
    ,NULL,NULL,hInstance,NULL);
  ShowWindow(hWnd,nCmdShow);

  while( GetMessage(&msg, NULL, 0, 0) )
  {
    TranslateMessage( &msg );
    DispatchMessage( &msg );
  }

  return msg.wParam;
}



165 名前: 158 投稿日: 2001/03/15(木) 22:06
>>160
終わってたのか…。
読んでなかった。

じゃあ、
The 2CH Obfuscated C Code Contest
2OCCCでも作るかな。



166 名前: デフォルトの名無しさん 投稿日: 2001/03/15(木) 22:53
じゃあ誰かとりあえず2occc.org取ってください(藁
2occc.???.comみたいなサブドメでも可。


167 名前: *nix厨 投稿日: 2001/03/16(金) 01:28
ハフマン圧縮(未完)です。
外道の技とアルゴリズム変更にまで手を染めたのですが、どうしても7行は無理でした。
とりあえず符号の生成までは7行でしたので、未完ながら努力の足跡書きこんどきます。
今回のは最低限のincludeもありません、コンパイルが通らない時は適当に付け加えてください。

q(int *a,int *b){return *a<*b?-1:1;}struct v{int i,b,h,n;}*v;struct{int n,i,e,k
;struct v v[63];}x[32]={0,},*a=x;main(){int b,i,j,l=0,m,n=1024;char *d=0;while(
(b=getchar())+1)a[(d=realloc(d,l+2))[l++]=b>>4].n++,a[d[l++]=b%16].n++;for(i=0;
i<32;i++)a[a[i].i=a[i].v[0].i=i].e=1;qsort(a,16,n,&q);for(b=17,i=0;!x[i].n;i++,
a++)b--;while(2<b){qsort(a,b--,n,&q);for(j=1;j<3;j++)for(i=0,v=a[j].v;i<a[j].e;
i++)v[i].h|=(j%2)<<v[i].b++;m=a[1].e;memcpy(a->v+a->e,a[1].v,m<<4);memcpy(a->v+
m+a->e,a[2].v,496);a->e+=m+a[2].e;a->n+=a[1].n+a[2].n;memcpy(a+2,a,n);a+=2;}
/* ここからデバッグ用。つか、これ無しだと意味不明になる */
printf("huffman code\n");
{
int y,z;
for(y=0;y<a[0].e;y++){
if(a[0].v[y].i<16){
printf("%d ",a[0].v[y].i);
for(z=a[0].v[y].b-1;z+1;z--)
printf("%d",(a[0].v[y].h>>z)%2);
printf("\n");
}
}
}
}



168 名前: *nix厨 投稿日: 2001/03/16(金) 01:46
7行プログラム良いなー。
普通なら上の見たく空白が潰れると鬱氏だけど、全然関係ないや(ワーィ!


169 名前: デフォルトの名無しさん 投稿日: 2001/03/16(金) 02:12
>>167

すげー。凄すぎるぜアンタ!!
俺はアンタを抱きしめたいぜ!

男に抱きしめられても困る
って意見は却下。


170 名前: ランバート 投稿日: 2001/03/16(金) 07:20
参戦したくて教科書片手に書いてみたけど、
オイラの頭じゃレイトレは無理ですぅ。
ヘボプログラマは参戦不可ですか?

T.java

import java.awt.*;public class T extends Frame{double B,A,D,m,X,Y,Z,R,L;
int a=10000;public static void main(String a[]){T r=new T();r.setSize(255,255);
r.show();}public void paint(Graphics g){for(int y=0;y<255;y++)for(int x=0;
x<255;x++){int c=L(x-128,y-128);c=c<0?0:c;g.setColor(new Color(c,c,c));
g.drawLine(x,y,x,y);}}int L(int x,int y){B=-a*4;A=x*x+y*y+a;D=B*B-4*A*a*3;
if(D>0){m=(-B+Math.sqrt(D))/(2*A);X=x*m;Y=y*m;Z=-100;R=Math.sqrt(X*X+Y*Y+Z*Z);
X/=R;Y/=R;Z/=R;L=1/Math.sqrt(3);L=(X-Y-Z)*L*255;return(int)L;}return 0;}}



171 名前: デフォルトの名無しさん 投稿日: 2001/03/16(金) 09:43
>>164

トリッキーの1氏、サンクス。
スレ的に終わったっぽい話題なのにすんまそん。


172 名前: 163 投稿日: 2001/03/16(金) 09:43
>>164

トリッキーの1氏、サンクス。
スレ的に終わったっぽい話題なのにすんまそん。


173 名前: フォルトの名無しさん 投稿日: 2001/03/16(金) 10:02
>>167
すげー、なんで動く?
PGが得意ってより、理解が深いんだろうな
変形ツリーでノード・ペアの確定と同時に符号まで振ってる
別なアルゴリズムと言って良いような…


174 名前: ランバート 投稿日: 2001/03/16(金) 21:39
なんか違うんだよなぁ。
7行に収まらないし。
誰か本物のレイトレを見せてくれよぅ。

import java.awt.*;public class N extends Frame{double A,B,C,D,E,F,G,L,M,N,R,T,
X,Y,Z,H=200;static void main(String[]a){N r=new N();r.setSize(200,200);
r.show();}public void paint(Graphics g){for(int y=0;y<H;y++)for(int x=0;x<H;
x++){int c =L(x-100,y-100);g.setColor(new Color(c,c,c));g.drawLine(x,y+20,x,
y+20);}}int L(int x, int y){B=-H*H;A=x*x+y*y+H*50;C=(H-50)*H;D=B*B-4*A*C;
if(D>0){R=(-B+Math.sqrt(D))/(2*A);X=x*R;Y=y*R;Z=-100*R;L=1/Math.sqrt(3);
R=Math.sqrt(X*X+Y*Y+Z*Z);L=(X-Y-Z)*L/R;int h=(int)(((double)F(X,Y,Z,R))*L);
return L>0?(h>0?h:(int)(L*255)):30;}return F(x,y,100,0);}int H(double x,
double y, double z, double r){E=x;F=y;G=z-H;x/=r;y/=r;z/=r;T=-(E*x+F*y+G*z);
x=2*x*T+E;y=2*y*T+F;z=2*z*T+G;return F(x,y,z,F);}int F(double x,double y,
double z,double b){M=10000-b;N=y==0?0:M/y;return N>0?((((x*N>0?x*N+M/2:-x*N)%M)
>M/2)^(((z*N+H)%M)>M/2)?100:200):0;}}


175 名前: デフォルトの名無しさん 投稿日: 2001/03/16(金) 23:00
>>174
いや、十分すげーじゃん。その調子で頼むぜ!



176 名前: 60 投稿日: 2001/03/17(土) 01:35
>>167に触発されてRangecorderを製作中。
つか、ちぢまらね〜


177 名前: デフォルトの名無しさん 投稿日: 2001/03/17(土) 17:20
>>176
これだけ圧縮物が集まると、後はブロックソートと外面のファイル管理さえあれば
立派に実用ツールですね



178 名前: デフォルトの名無しさん 投稿日: 2001/03/17(土) 18:38
>>178
MTForMTSも欲しいぞ


179 名前: 38 投稿日: 2001/03/17(土) 19:45
>>178
MTFくらいなら俺でも出来そうだ(w。とりあえずencoderのみ。

#include <stdio.h>
#include <io.h>
#include <fcntl.h>
main(){setmode(fileno(stdin),_O_BINARY);setmode(fileno(stdout),_O_BINARY);
int c,i,j,t,tbl[256];for(i=0;i<256;i++)tbl[i]=i;
while(EOF!=(c=getchar())){for(i=0;tbl[i]!=c;i++);t=tbl[i];for(j=i;j;
j--) tbl[j]=tbl[j-1];tbl[0]=t;putchar(i);}return 0;}


180 名前: 38 投稿日: 2001/03/17(土) 20:12
>>179改訂版。
引数無しで実行すると stdin から読んで stdout に吐くencoder。
第一引数を 'd' として実行すると decoder。

#include <stdio.h>
#include <io.h>
main(int C,char**V){setmode(fileno(stdin),1<<15);setmode(fileno(stdout),1<<15);
int c,i,t,tbl[256];for(i=0;i<256;i++)tbl[i]=i;while((c=getchar())-EOF){if(C>=2
&&*V[1]=='d'){putchar(t=tbl[c]);while(c--)tbl[c+1]=tbl[c];tbl[0]=t;}else{for(i=
0;tbl[i]!=c;i++);putchar(i);t=tbl[i];while(i--)tbl[i+1]=tbl[i];tbl[0]=t;}}
return 0;}


181 名前: *nix厨 投稿日: 2001/03/18(日) 01:28
>>177
それなら7行超えるけど出力部も作りますかね。
でも4ビットのハフマンだから余り縮まないよ?


182 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 11:57
アーカイバーお願いします。



183 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 12:55
結局、そのDVDのプロテクトを解除するプログラムって
どうやってDVDの再生するのよ。
どうやって使うのよ。
そこが抜けていると何にも役にたたないプログラムだよね。



184 名前: 名無しさん 投稿日: 2001/03/18(日) 14:12
いやあれは DVD の暗号がたった7行の、しかもperlスクリプトで
解けることで、プログラムの可能性を示す教育目的のプログラムだ。

それ言っては、プログラミングの解説本にあるようなアルゴリズム
解説のためのサンプルコードにケチを付けてるのと一緒。


185 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 14:37
暗号が解けるといったって、どこにDVDディスクを読みに行くコードがあるわけ?
サンプルになってるの?



186 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 15:00
>>185

バカかお前。コード読めや。



187 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 15:17
>>186
まあまあ、コードが理解できないようなかわいそうな奴なんだから、
そんなにきつい事言うなよ。


188 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 15:18
>>186
同意
コメントで用が足りてる


189 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 15:31
185=186=187=188
ネタ?


190 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 15:49
185=186=187=188=189=190
ネタ!


191 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 15:56
7行じゃDVDも再生できないしぃ
コメントもついてないしぃ
オンラインヘルプもついてないしぃ

だっめっじゃっあぁぁぁぁん



192 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 16:17
7行でOSを書いてくれ。


193 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 16:30
>>191
とりあえず君がコードを読めない人間であることはよくわかった。
>オンラインヘルプもついてないしぃ
もはや意味不明。


194 名前: *nix厨 投稿日: 2001/03/18(日) 16:43
まあまあ、またーりと行こうよ。

7行超えてますけど出力もする版のハフマン圧縮です。
出力部は、真面目に削ってないので入れた結果11行でした。
符号表は先頭から4ビットの符号長と可変長の符号の組が16個です。
int b,i,j,l=0,m,n=1024,c=0,p=7,h[32];r(int h,int b){for(b--;b+1;b--){c|=(h>>b)%
2<<p;if(!p--)putchar(c),c=0,p=7;}}q(int*a,int*b){return*a<*b?-1:1;}struct v{int
i,b,h,n;}*v;struct{int n,i,e,k;struct v v[63];}x[32]={0,},*a=x;main(){char*d=0;
while((b=getchar())+1)a[(d=realloc(d,l+2))[l++]=b>>4].n++,a[d[l++]=b%16].n++;
for(i=0;i<32;i++)a[a[i].i=a[i].v[0].i=i].e=1;qsort(a,16,n,&q);for(b=17,i=0;!x[i
].n;i++,a++)b--;while(2<b){qsort(a,b--,n,&q);for(j=1;j<3;j++)for(i=0,v=a[j].v;i
<a[j].e;i++)v[i].h|=(j%2)<<v[i].b++;m=a[1].e;memcpy(a->v+a->e,a[1].v,m<<4);
memcpy(a->v+m+a->e,a[2].v,496);a->e+=m+a[2].e;a->n+=a[1].n+a[2].n;memcpy(a+2,a,
n);a+=2;}for(i=0;i<16;i++){for(j=0;j<32;j++){if(a->v[j].i==i){r(a->v[j].b-1,4);
r(a->v[j].h,a->v[j].b);h[i]=a->v[j].b;h[i+16]=a->v[j].h;break;}}}for(i=0;i<l;i
++)r(h[d[i]]+16,h[d[i]]);if(p-7)r(0,p);}
符号表は先頭から4ビットの符号長と可変長の符号の組が16個です。
その後に符号化したデータが入り、最後は0でパディングしてあります。


195 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 16:45
7行でエロゲーム希望。
画像も7行内にテキストで収めること。
アイコラは不可。



196 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 17:19
>>195
顔文字板のAAを使えばできそうな気も…


197 名前: ネタレス 投稿日: 2001/03/18(日) 19:44
>>195
エロタイピング練習ソフトだ。
偽AI搭載で「いやよいやよも好きのうち」まで実装してみたぞ。

#include<stdio.h>
main(){
int c;while((c=getch())!=0x1B)
switch(c){
case' ':printf("いやっ\n");break;
case'\r':printf("そこはだめっ\n\a\a\a");break;
default:printf("書いていて悲しくなったのは隠しておきたい\n");}}

どうだ。7行で音まで出るぞ。



198 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 21:44
>>195
できた。

#include<stdio.h>
main(){printf("namco: (())\n");}


199 名前: 57行にせOS(i386) 投稿日: 2001/03/18(日) 21:44
[BITS 16]
[ORG 0]
jmp start
msg00        db 'kaomozi dasitai yo...', 13, 10, 0
msg01        db 'dareka yatte hosii naa...', 13, 10, 0
msg02        db 'mou ascii na seikatu ha iyada!', 13, 10, 0
msg03        db 'haa.', 13, 10, 0
msg04        db 'zya-ne.', 13, 10, 0
rebootmsg    db 'nannka botan osite kure.', 13, 10, 0
message :
    lodsb
    or al,al
    jz done
    mov ah,0eh
    mov bx,0007
    int 0x10
    jmp message
done :
    ret
getkey :
    mov ah, 0
    int 016h
    ret
reboot: ;; reboot
    mov si, rebootmsg
    call message
    call getkey
    db 0EAh
    dw 0000h
    dw 0FFFFh
xwait :
    call message
    call getkey
    ret
start :
    mov ax,0x7c0
    mov ds,ax
    cli
    mov ax,0x9000
    mov ss,ax
    mov sp,0xffff
    sti
    mov si, msg00
    call xwait
    mov si, msg01
    call xwait
    mov si, msg02
    call xwait
    mov si, msg03
    call xwait
    mov si, msg04
    call xwait
    call reboot
times 510-($-$$) db 0
dw 0xAA55



200 名前: 199 投稿日: 2001/03/18(日) 21:44
http://www.gaztek.org/osdev/boot/gbootsect.txt をまねただけだけど。



201 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 23:33
>200
つながりませんでした


202 名前: デフォルトの名無しさん 投稿日: 2001/03/18(日) 23:34
あ、つながりました。


203 名前: 名無しさん 投稿日: 2001/03/19(月) 06:57
そーいえば昔、アスキーでプログラムコンテストしてなかったか?

1行部門、256バイト部門と1024バイト部門があって
ほとんどが BASIC と機械語だったよーな


204 名前: デフォルトの名無しさん 投稿日: 2001/03/19(月) 12:43
>>1
そんだけDVDのプロテクトがアホだったって事です。
改行を一切入れなければ1行プログラムだって可。


205 名前: デフォルトの名無しさん 投稿日: 2001/03/20(火) 22:37
#include <dshow.h>
int main(int C,char*V[]){IGraphBuilder *pB;IMediaControl *pC;WCHAR v[MAX_PATH];
if(1<C){CoInitialize(NULL);CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPR\
OC_SERVER,IID_IGraphBuilder,(void**)&pB);pB->QueryInterface(IID_IMediaControl,(
void**)&pC);MultiByteToWideChar(CP_OEMCP,0,V[1],-1,v,MAX_PATH);pB->RenderFile(v
,NULL);pC->Run();MessageBox(NULL,"","",MB_OK);pC->Release();pB->Release();CoUn\
initialize();return 0;}}

どっかの掲示板からのコピペっす.


206 名前: デフォルトの名無しさん 投稿日: 2001/03/21(水) 01:04
つーか、#includeは1行でいいの?ってしょうがないか


207 名前: デフォルトの名無しさん 投稿日: 2001/03/21(水) 03:11
ブラウザの”×”(閉じる)ボタンを非表示にできません。
JSでもダメみたいっす。どうにか制御できないもんでしょうか?


208 名前: 270 投稿日: 2001/03/21(水) 04:50
すいません。スレチガイ。逝コウ。


209 名前: ランバート 投稿日: 2001/03/21(水) 06:50
朝から頭の体操してます。
光が今ひとつだけど
レイトレっぽくなったのではないでしょうか?
でもオイラの頭じゃ7行は無理っス。

import java.awt.*;public class R extends Frame{class V{double x,y,z,r;V(double
a,double b,double c){x=a;y=b;z=c;}V(V a){x=a.x;y=a.y;z=a.z;}double c(V s){
return x*s.x+y*s.y+z*s.z;}void n(){r=Math.sqrt(x*x+y*y+z*z);x/=r;y/=r;z/=r;}}
static void main(String[]a){R r=new R();r.setSize(255,255);r.show();}public
void paint(Graphics g){for(int y=0;y<255;y++)for(int x=0;x<255;x++){V A=new
V(x-128,y-128,100);V B=new V(0,0,200);int c=L(A,B);g.setColor(new Color(c,c,c))
;g.drawLine(x,y+20,x,y+20);}}double a,b,c,d,R;int L(V A,V B){a=(new V(A)).c(A);
b=(new V(A)).c(B);c=(new V(B)).c(B)-10000;d=b*b-a*c;if(d>0){R=(-b+Math.sqrt(
d))/a;V N=new V(A.x*R,A.y*R,A.z*R);N.n();R=(N.x+N.y-N.z)/Math.sqrt(3);A.x-=B.x;
A.y-=B.y;A.z-=B.z;int h=(int)(((double)H(N,A))*R);return R>0?( h>0?h:(int)(R*
255)):30;}return F(A);}int H(V N,V A){a=-N.c(A);N.x=2*N.x*a+A.x;N.y=2*N.y*a+
A.y;N.z=2*N.z*a+A.z;return F(N);}int F(V A){a=A.x;b=10000-A.r;c=A.y==0?0:b/A.y;
return c>0?((((a*c>0?a*c+b/2:-a*c)%b)>b/2)^(((A.z*c+200)%b)>b/2)?100:200):0;}}


210 名前: 名無しさん@お腹いっぱい。 投稿日: 2001/03/21(水) 21:15
DVD複製防止を解除するプログラム

DVDつきのwindows 98 があります
さて、どうやって7行プログラムを実行
して、解除するのでしょうか?
恐らくここをみた人の8割が思っているはず


211 名前: デフォルトの名無しさん 投稿日: 2001/03/21(水) 21:22
>>210
じゃぁ、あんたここにいる8割はアホだと思ってんの?
自分がアホだからって他人もアホだと思うのは大間違い



212 名前: デフォルトの名無しさん 投稿日: 2001/03/21(水) 23:01
>>210
なになに? よく分からんが、実行の仕方教えてとかヘタレな話?


213 名前: デフォルトの名無しさん 投稿日: 2001/03/22(木) 00:33
俺もヘタレだからヘタレなコードしか書けんが、
7行すれなんだからコードで語ろうぜ!


214 名前: デフォルトの名無しさん 投稿日: 2001/03/22(木) 04:39
7行ごえ

#include<windows.h>
#include<math.h>
int*P,y[1<<18],a=256,c,r,m[8],n,S=a/2,u,v;BITMAPINFO T={40,a,a,1,32};HWND g;
float s,X,Y=-.57,Z,t,l,d;WINAPI WinMain(HINSTANCE I,HINSTANCE,LPSTR,int)
{WNDCLASS w={67,DefWindowProc,0,0,I,0,0,0,0,"T"};RegisterClass(&w);HDC h=GetDC(
g=CreateWindow("T","2ch",513<<19,0,0,a,a,0,0,I,0));while(GetMessage((MSG*)m,g,0,0)!=-1)
{if(m[1]==15){s+=.1;Z=Y*cos(s);X=Y*sin(s);P=y;for(v=S;v>-S;v--){for(u=-S;u<S;u++)
{d=9999-u*u-v*v;d>0?t=sqrt(d),l=sqrt(u*u+v*v+t*t),n=(X*u/l+Y*v/l+Z*t/l)*255,n=n<0?0:n:
n=64;*P++=n;}}SetDIBitsToDevice(h,0,0,a,a,0,0,0,a,y,&T,0);}else DispatchMessage((MSG*)m);
InvalidateRect(g,0,0);}return 0;}



215 名前: デフォルトの名無しさん 投稿日: 2001/03/22(木) 11:13
>>210

ちょっとボク、VOBってしってる?

>>211-212

210はわざわざageてくれたんだよ。
でもちょっと英語が苦手なんだよ。


216 名前: デフォルトの名無しさん 投稿日: 2001/03/22(木) 11:42
たぶんスクリプトの実行方法からして分からないんじゃない?(w


217 名前: デフォルトの名無しさん 投稿日: 2001/03/22(木) 11:53
アーカイバーは7行じゃきついか...

>>210

Win98にコピー対策なんぞあったか。
エラーセクタプロテクトも何もないと思ったが。
# シリアルなんぞコピー対策ではない

本来の使い方は、DVDからripしてきたvobに、
/usr/local/bin/perl unvob.pl < rip.vob > out.mpg
とかやる。

コードを読め。
コメントを読め。


218 名前: 名無しさん@お腹いっぱい。 投稿日: 2001/03/22(木) 22:45
>217
来の使い方は、DVDからripしてきたvobに、

これはどうやるんでしょうか?
<マジレス希望!>


219 名前: デフォルトの名無しさん 投稿日: 2001/03/22(木) 22:56
>218
http://www.dab.hi-ho.ne.jp/kankyo/gamekan/dvd/rip.htm
をみればわかると思う


220 名前: デフォルトの名無しさん 投稿日: 2001/03/22(木) 23:03
オレはコードよめるぜって知ったかぶりしかいないが
だれも7行プログラムの使用方法を知らないのであった。



221 名前: デフォルトの名無しさん 投稿日: 2001/03/22(木) 23:03
DVDのプロテクトを解除できたらどうなるんだろう


222 名前: デフォルトの名無しさん 投稿日: 2001/03/22(木) 23:28
7行にプロテクト(つーか暗号化だな)の解除方法が
書ききれるんだね凄いねってのが面白さなわけで。

http://www.cs.cmu.edu/~dst/DeCSS/Gallery/ 参照のこと。
実用性を求めてはいけないのです。


223 名前: デフォルトの名無しさん 投稿日: 2001/03/22(木) 23:50
まあ、217に使い方かいてあるし・・・


224 名前: デフォルトの名無しさん 投稿日: 2001/03/23(金) 03:01
http://www.hotwired.co.jp/news/news/technology/story/20010308302.html
ここ読んだ限りちがうんじゃないのか?



225 名前: デフォルトの名無しさん 投稿日: 2001/03/23(金) 03:06
おいおいおいっ
有志がサイト提供してくれちゃいました。
http://2occc.nothing.sh/

転送量とかが増えちゃ悪いので、sageで書きます。


226 名前: デフォルトの名無しさん 投稿日: 2001/03/23(金) 07:31
>>217
無駄無駄。たぶんDVDコピーしたいぜ教えてクンのPCにはPerlすら入ってないぜ。


227 名前: デフォルトの名無しさん 投稿日: 2001/03/23(金) 09:54
要するに7行でリッパーを書けという話?



228 名前: デフォルトの名無しさん 投稿日: 2001/03/23(金) 15:23
なあ、最近気づいたんだが218のような奴はMS−DOSすら使ったこと無いんでは?
dir > abc.txt なんてコマンドも知らないんじゃ?


229 名前: デフォルトの名無しさん 投稿日: 2001/03/23(金) 17:03
「シニス メテ」とかよくやったなぁ。
「ハシ」も比較的よくあったかも。

あぁ、時代が違うのか・・・



230 名前: デフォルトの名無しさん 投稿日: 2001/03/23(金) 17:04
下げ忘れ
鬱逝


231 名前: basic09が使いたかった。 投稿日: 2001/03/23(金) 19:17
スナミ

Syntax Error
Ready
?.
0

Ready



232 名前: デフォルトの名無しさん 投稿日: 2001/03/23(金) 21:17
vbsの自己生成スクリプト。cのやつのパクリだけど
s="s=Z:wscript.echo replace(s,chr(90),chr(34)+s+chr(34))":wscript.echo replace(s,chr(90),chr(34)+s+chr(34))


233 名前: デフォルトの名無しさん 投稿日: 2001/03/23(金) 23:32
>>232

vbsってevalあるの?


234 名前: デフォルトの名無しさん 投稿日: 2001/04/03(火) 22:56
age


235 名前: >234 投稿日: 2001/04/03(火) 23:20
なんか書け


236 名前: デフォルトの名無しさん 投稿日: 2001/04/04(水) 04:21
10 PRINT "あげ";
20 GOTO 10


237 名前: デフォルトの名無しさん 投稿日: 2001/04/05(木) 23:08
/* efdtt.c Author: Charles M. Hannum <root@ihack.net> */
/* */
/* Thanks to Phil Carmody <fatphil@asdf.org> for additional tweaks. */
/* */
/* Length: 434 bytes (excluding unnecessary newlines) */
/* */
/* Usage is: cat title-key scrambled.vob | efdtt >clear.vob */

#define m(i)(x[i]^s[i+84])<<
unsigned char x[5],y,s[2048];main(n){for(read(0,x,5);read(0,s,n=2048);write(1,s
,n))if(s[y=s[13]%8+20]/16%4==1){int i=m(1)17^256+m(0)8,k=m(2)0,j=m(4)17^m(3)9^k
*2-k%8^8,a=0,c=26;for(s[y]-=16;--c;j*=2)a=a*2^i&1,i=i/2^j&1<<24;for(j=127;++j<n
;c=c>y)c+=y=i^i/8^i>>4^i>>12,i=i>>8^y<<17,a^=a>>14,y=a^a*8^a<<6,a=a>>8^y<<9,k=s
[j],k="7Wo~'G_\216"[k&7]+2^"cr3sfw6v;*k+>/n."[k>>4]*2^k*257/8,s[j]=k^(k&k*2&34)
*6^c+~y;}}




238 名前: デフォルトの名無しさん 投稿日: 2001/04/05(木) 23:09
うーむ。大きく化けるなぁ。オリジナルは

http://www.cs.cmu.edu/~dst/DeCSS/Gallery/hannum-efdtt-source.txt

です。知っている人は知っていると思うが。


239 名前: デフォルトの名無しさん 投稿日: 2001/04/23(月) 21:00
あげ



240 名前: デフォルトの名無しさん 投稿日: 2001/04/24(火) 02:25
> 七行プログラミング
なんか俳句みたいなノリですね。


241 名前: デフォルトの名無しさん 投稿日: 2001/05/19(土) 04:19
age


242 名前: デフォルトの名無しさん 投稿日: 2001/06/02(土) 06:01
age


243 名前: デフォルトの名無しさん 投稿日: 2001/06/02(土) 06:04
3ヶ月前に終ってるね


244 名前: デフォルトの名無しさん 投稿日: 2001/06/02(土) 08:30
DVD のrippingしたいなら、DTV板見た方が良いよ。
http://cheese.2ch.net/test/read.cgi?bbs=avi&key=978772988


245 名前: デフォルトの名無しさん 投稿日: 2001/06/02(土) 14:48
なんかこのスレみてたら昔MacPOWERでやってた
HyperCard10行勝負!思い出したよ。
懐かしさと感動をあたえてくれたよ、このスレ…続きを見たいもんだ


246 名前: デフォルトの名無しさん 投稿日: 2001/06/02(土) 16:04
>>245
見たいなら、なんか新たなネタを振るとよいと思われ。


247 名前: 無責任な名無しさん 投稿日: 2001/06/02(土) 16:27
>>246
JPEGとかMP3とか…
…ネタもまともにふれなくてごめん。


248 名前: デフォルトの名無しさん 投稿日: 2001/06/04(月) 23:20
http://backno.mag2.com/reader/Back?id=0000015670
from slashdot日本語

256バイト以下限定、perlコンテスト。
俳句ジェネレータ、いいよ。


249 名前: デフォルトの名無しさん 投稿日: 2001/06/05(火) 00:10
あ、結城さんだ。


250 名前: デフォルトの名無しさん 投稿日: 2001/06/05(火) 02:46
昔あった dshar という DOS 版 shar の展開コードは7行じゃないけどすごかったよ

echo T_OOWW3=XXWX5 2PY5w3P_-l.P-KD1Ep-OLPZ-pJP-pw40PQX5fsPu>%2
echo dsharTMPcmd:5Fe,xPQX-=.PQX-MQP-xx4_P5rjP5Z2P-jE,JP=>>%2
echo 5O2,APQX5R8P-rJPPRX5iBP-x=PRX5TsP59DHHP5rIHP-w64ZP=>>%2
echo 40-2APQX-MiP-trP5_WP-pBP51w,pPTYPZPZP__ox44Qx47HGSz2.r>>%2
echo 4OSitBnaz43PysRGiC.EGb5_h0PEGL7l8JwIm1E48WwPiOB7tLGM8O>>%2
echo Bur_GTvb6jJEXCzHHoE2feG.Oh71PZ64.ChRPFt4ltaz6URzCLAmDG>>%2
echo MHUckSHkJzB2An4ECsRFpANlGn4EWsRFpA0fm4CORzKX42.l8HGXGN>>%2
echo .UuBD_k8H47HGZGl4_kFUERn4IBL8dstltaVuerBCoC1PP9tWQ7l4c>>%2
echo k09.AOSvtOIVx4DKMHWIOB8J2n4D6P8tazLP4eSOIsRErOyutU3.BP>>%2
echo hoQsRErLsORoP4.o6hbzD24OGqu60a44Cp.1od8NgTVzCT4OBAv9cq>>%2
echo 814Whp.Ck8HCy4oauAk4Cn94B6UB2zCx4mDBzwpJ94.ByB.CMHYuX2>>%2
echo .Jp4KQLsRGh4pArv2MQTBOR1QRtOsO3nP4.nnhBsRFK8gHCOPD4dea>>%2
echo Yb.QFRlMQTKQ4nnhbnP4.J8v94PAtElta2jT9pWVab5jKz3Q4b8mCn>>%2
echo ndBsREXV2MRH6uu46cN5x.EQtuZpxoWQx47HG_zq.T4psORL7mFb.U>>%2
echo N1B48LGH2OCutFCq_1AQr4.PII47GnPP4t0KQt6KzBmCkvx_Kprp.4>>%2
echo l4BpMO4anCc46bj559A5lF4xP_RsLLMBg1aZWPnKbx.K.:>>%2

これででてきたものは COM 形式のファイルとして実行できる立派な「バイナリ」なんだけど。


251 名前: デフォルトの名無しさん 投稿日: 2001/06/05(火) 07:27
昔に bat2com とかいう、DOS の bat ファイル → .com 化ファイルってあったね。
あの当時、凄い衝撃的で、あれでプログラム習おうって気になったし・・・・・


252 名前: デフォルトの名無しさん 投稿日: 2001/06/05(火) 15:57
>>250

その展開コードは、たぶん同一作者の
"com2txt"ってソフト使ってると思われ。

最初の"T_OOWN3="って部分を逆アセンブルすると
綺麗なソースが出てくるのにショックを受けた覚えがある。
おかげでx86アセンブリ覚えました :-)


253 名前: デフォルトの名無しさん 投稿日: 2001/06/06(水) 01:19
>>252
どういう原理なんですか? 普通に画面表示するbatにしか見えない・・・


254 名前: デフォルトの名無しさん 投稿日: 2001/06/06(水) 02:15
本当に"画面表示"するbatかよくみてみなよ


255 名前: デフォルトの名無しさん 投稿日: 2001/06/06(水) 02:45
>>250
1つ目のパラメーターには何が入るのだろうか…?


256 名前: デフォルトの名無しさん 投稿日: 2001/06/06(水) 17:21
ちなみに作者さんはこの人。
どちらも同じ人でしょ

http://hayabusa.ics.nara-wu.ac.jp/~nide/


257 名前: デフォルトの名無しさん 投稿日: 2001/06/06(水) 19:27
>>250
アドレス違反となっちゃいましたが…


258 名前: デフォルトの名無しさん 投稿日: 2001/06/06(水) 20:44
昔懐かしREM文に書いた機械語…

じじいsage


259 名前: デフォルトの名無しさん 投稿日: 2001/06/06(水) 22:15
>>257

PureDOSかW9x系列じゃないと動かないと思うさ。
NT/2000/Meは当然ながら無理だよ。

com2txtの方が感動がでかいと思う。


260 名前: デフォルトの名無しさん 投稿日: 2001/06/09(土) 23:40









261 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 23:35
Lispで記号処理。


262 名前: デフォルトの名無しさん 投稿日: 2001/06/22(金) 09:43
http://www.geocities.co.jp/SiliconValley-PaloAlto/8642/
http://www.geocities.co.jp/SiliconValley-PaloAlto/8642/turedure/cprog_01.htm#010605


263 名前: デフォルトの名無しさん 投稿日: 2001/07/04(水) 09:59
期待age


264 名前: ho 投稿日: 2001/07/04(水) 22:38
VBどシロウトです。
FF9の穴掘り宝探しゲームをイメージしてください。

Dim XX, YY, c

Private Sub Form_Load()
Randomize: Form1.ScaleMode = 6: XX = Form1.ScaleWidth * Rnd: YY = Form1.ScaleHeight * Rnd: c = 0
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Form1.Cls: c = c + 1: Print c & " 回目": If Abs(X - XX) < 1 And Abs(Y - YY) < 1 Then Print "当たり ": Form_Load Else Print "距離 " & Int(((X - XX) ^ 2 + (Y - YY) ^ 2) ^ 0.5) & "mm"
End Sub


265 名前: デフォルトの名無しさん 投稿日: 2001/07/14(土) 15:53
mata-ri age


266 名前: デフォルトの名無しさん 投稿日: 2001/07/14(土) 16:35
# 今月のカレンダー

($d,$m,$y,$w)=(localtime)[3..6];print$y+1900,'/',++$m,"/$d\n",$"x(($w-=$d-
1)%7*3);printf"%2d%s",$_,++$w%7?$":$/for(1..28+($m-2?3-$m*.86%2:!($y%4)));


267 名前: デフォルトの名無しさん 投稿日: 2001/07/14(土) 18:29
このスレの栄光と挫折

ネタスレ(スタート)

Windows7行時代(最盛期)

標準C7行時代(衰退)

ネタスレ


268 名前: デフォルトの名無しさん 投稿日: 2001/07/14(土) 18:46
>>266
お、凄い。


269 名前: デフォルトの名無しさん 投稿日: 2001/07/14(土) 19:40
>>268
どこら辺が?それほどトリッキーには見えないけど


270 名前: 267 投稿日: 2001/07/14(土) 20:42
28+($m-2?3-$m*.86%2:!($y%4)) のあたりとか、縮めるのチョト苦労したのよ。
この無駄な努力をかってください。


271 名前: デフォルトの名無しさん 投稿日: 2001/07/14(土) 22:28
>>270
すばらしい


272 名前: デフォルトの名無しさん 投稿日: 2001/07/17(火) 01:33
1 #!/bin/csh -f
2 foreach dn (`/bin/ls |awk '{print $NF}'`)
3 @ cnt = `pwd|awk 'BEGIN{RS="/"}{print}'|wc -l`
4 while( $cnt )
5 echo -n "| ";@ cnt--
6 end
7 if( -f $dn ) then
8 echo "|--- $dn (F)"
9 else if( -d $dn ) then
10 echo "|=== $dn (D)";cd $dn;`basename $0` $1 $2;cd ..
11 endif
12end

うーん。。。かなり削って12行。。。
shで書けば頭のまじない取れるし、もっと減るかも。。


273 名前: 272 投稿日: 2001/07/17(火) 01:35
インデントが、なくなっちまった。。。


274 名前: デフォルトの名無しさん 投稿日: 2001/07/18(水) 02:24
>>272
ホットゾヌではポップアップ内でだけインデントが反映される


275 名前: デフォルトの名無しさん 投稿日: 2001/07/31(火) 05:27
age


276 名前: デフォルトの名無しさん 投稿日: 2001/08/10(金) 03:11
age


277 名前: デフォルトの名無しさん 投稿日: 2001/08/10(金) 04:18
# sorry this is all one line -- it didn't work on multiple lines for me
eval ` ifconfig | sed -e ' /^[^[:space:]]*:[0-9]*/ {
s|^\([^:]*\):\([0-9]*\).*$|X=x; TMP="\2"; [ "$device"
!= "\1" ] \|\| |g; b; }; /^[^[:space:]]/ { s|.*|X=x;
[ 0 = 0 ] \|\| |g; b; }; /inet addr:
[0-9]*\.[0-9]*\.[0-9]*\.[0-9]* *Bcast:[0-9.]* *Mask:[0-9.]*/
{ s|^.*inet addr:\(\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\)
*Bcast:\([0-9.]*\) *Mask:\([0-9.]*\).*$|eval " rdev_${TMP}_addr=\1;
rdev_${TMP}_mb=\7_\6; rdevip_\2_\3_\4_\5=${TMP};
rdev_LIST=\\\\"\\\\$rdev_LIST \\\\${TMP}\\\\"; " \|\| |g;
b; }; s|^.*$||g; ' ` X=x;


本当は改行を入れたらダメ

/etc/sysconfig/network-scripts/ipup-aliases
にこんなの書いてあった、、、すごいよぅ


278 名前: デフォルトの名無しさん 投稿日: 2001/08/10(金) 04:34

何所よ??


279 名前: N88BASIC 投稿日: 2001/08/10(金) 12:12
10 FOR I=1 TO 100:X=RND(100):Y=RND(100):PSET(X,Y),6:NEXT:
X=0:Y=0:WHILE W<100 AND GET@(X,Y)<>0:PSET(X,Y),2:K$=INPUT$:
S=1-CHR(K$)<>20:FOR S=S TO 0:Y=Y-1:NEXT:X=X+1:F=X>100:WEND:
IF F THEN PRINT "クリア" ELSE PRINT "ゲームオーバー"

N88Basicで障害物よけ1ボタンゲーム。
100個の障害物(点)があり、それをよける。スペースを押すと
上昇し、離すと下降。

N88BASICの命令を忘れてしまったので、以下の命令は勘でかいた。
PSET(X,Y),6 座標x,yに黄色いの点を描画
GET@(X,Y)<>0 画面上のx,yにある点の色が黒でなければ
S=1-CHR(K$)<>20 K$のアスキーコードが&H20(=スペース)ならばSは0,でなければ1


280 名前: 279 投稿日: 2001/08/10(金) 12:15
分解。

FOR I=1 TO 100
 X=RND(100):
 Y=RND(100):
 PSET(X,Y),6:
NEXT:

X=0:
Y=0:
WHILE W<100 AND GET@(X,Y)<>0:
  PSET(X,Y),2:
  K$=INPUT$:
  S=1-CHR(K$)<>20:
  FOR S=S TO 0:
    Y=Y-1:
  NEXT:
  X=X+1:
  F=X>100:
WEND:

IF F THEN
  PRINT "クリア"
ELSE
  PRINT "ゲームオーバー"


281 名前: 279 投稿日: 2001/08/10(金) 12:17
>>279,280
まちがえた。これだとキー押してるときに何もせず
離しているときに上昇してしまう…

10 FOR I=1 TO 100:X=RND(100):Y=RND(100):PSET(X,Y),6:NEXT:
X=0:Y=0:WHILE W<100 AND GET@(X,Y)<>0:PSET(X,Y),2:K$=INPUT$:
S=1-CHR(K$)<>20:FOR S=S TO 0:Y=Y+2:NEXT:Y=Y-1:X=X+1:F=X>100:WEND:
IF F THEN PRINT "クリア" ELSE PRINT "ゲームオーバー"


282 名前: 迷路(らしきもの) 投稿日: 2001/08/10(金) 12:50
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]){ randomize();
struct _a { short s[82]; f(){int i;for(i=0;i<39;i++)
s[i]=rand()&0x100?'/':'\';s[i]=0;} } d;
for(int i=0;i<80;i++){ d.f();puts((char *)(d.s));};
return 0;}


実行例
/////\\\\/\/\\//
\//\/\\////\/\\\
/\\\\\\\//\\\\\/
/\/\\\/\/\\\\\//
////\\/\\//\\/\\
/\/\\\\\\\/////\
\//\//\\////\/\\
\/\/\\\\//\/\/\\
/\\/\\//\\/\//\\
//\//\/\//\\/\\/
\////\\/\///\//\


283 名前: デフォルトの名無しさん 投稿日: 2001/08/10(金) 12:52
>>279
ゴメン。あまり身が詰まってるように見えない。
多分このスレでは、訳わからんぐらい密度の高いコードが
期待されていると思われ。


284 名前: デフォルトの名無しさん 投稿日: 2001/08/10(金) 17:15
こんなのは無理かい?
┌──┐
│┌┐│
└─┘│
───┘


285 名前: デフォルトの名無しさん 投稿日: 2001/08/10(金) 21:04
#include <stdio.h>
#include <stdlib.h>
int y=0;int main(int argc, char* argv[]){ randomize();
struct a{ short s[40]; a(){int x;for(x=0;x<39;x++)
s[x]='/'+(((4410+ x*y/(x+y+1))%2)<<8);
s[x]=0;y++;puts((char *)(s));}; } b[25];
return 0;}

乱数より規則あった方が楽しい
\\\\\/////////
\\//////////\\
\/////\\\\\\\\
\///\\\\\\\///
\//\\\\\//////
///\\\//////\\
//\\\/////\\\\
//\\\///\\\\\\
//\\///\\\\\//
//\\///\\\////
//\\//\\\/////
//\///\\\///\\


286 名前: デフォルトの名無しさん 投稿日: 2001/08/10(金) 21:17
>>278
Vine Linux 2.1


287 名前: デフォルトの名無しさん 投稿日: 2001/08/10(金) 21:21
渦巻きも作れるよ
s[x]='/'+(((2+((x-20+((y-9)>>9))>>8)+((y-9)>>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が無いよ


585 名前: 573 投稿日: 01/10/30 21:00
また三行でやってみました。
素数判定です。
それまでの素数を保存しない中ではいいとこいってる・・・・かな?

#include<iostream.h>
int main(){unsigned __int64 b=1,c=1,d=3,z,i=3;a:for(;i<c;i+=2){for(z=3;z<b;z+=2)
if(i%z==0){i+=2;goto a;}cout<<i<<",";}b++;c+=d;d+=2;goto a;return 0;}


586 名前: デフォルトの名無しさん 投稿日: 01/10/30 22:09
>>585
遅くてよけりゃ二行。

#include <iostream.h>
int main(){for(int z,i=1;z=++i;){while(i%--z);if(z==1)cout<<i<<",";}return 0;}


587 名前: デフォルトの名無しさん 投稿日: 01/11/01 19:41
IDENTIFICATION DIVISION.
PROGRAM-ID. AISATU.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
DISPLAY "HELLO".
STOP RUN.

あっ、もう7行だ。


588 名前: トリッキーの1 投稿日: 01/11/02 10:49
なかなかいいネタがないですね……


589 名前: *nix厨 投稿日: 01/11/02 16:20
それではネタ>>588

1ソース多言語で"Happy 2ch world!"を出力する
・コンパイルのワーニングは無視してかまわない
・"Happy 2ch world!"以外はなるたけ出さない
・実行可能な言語を示す
  (DOS窓とMS系OSのコマンドラインなどは1つとして数える)

例:DOS窓+C言語

rem (){printf("Happy 2ch world!\n");return 0;} main(){ /*
echo Happy 2ch world!
rem */
rem ();return 0;}


元ネタ(f77,c,/bin/shの3つ)
http://www.ioccc.org/1986/applin.c


590 名前: トリッキーの1 投稿日: 01/11/02 21:01
>>589
ネタありがとう♪面白そう。

……しかし、これはスレ違いかな?
トリッキースレの方に転載して貰って、そちらで盛り上がりません?
http://pc.2ch.net/test/read.cgi/tech/983191866/


591 名前: デフォルトの名無しさん 投稿日: 01/11/02 21:09
>>589-590
7行にどれだけ言語を盛り込めるか大会。



…にしてしまえば、そうスレ違いでもないかも?


592 名前: トリッキーの1 投稿日: 01/11/02 21:45
>>591
それでも面白そうですが、7行の美しさはまた別の所にあるような気がして。
8行で言語を詰め込んだのを、7行にしてもあまり驚きは無いでしょう?
(少なくとも、今までのこのスレのプログラムのような)。

とはいえ、別にここでもいいし、いっそのこと別スレにするという手もありますね(笑)
*nix厨さんの意向に従います。


593 名前: トリッキーの1 投稿日: 01/11/04 09:28
かなり頑張ったわりに反響が全然無かった(涙)>>540
>後で気が向いたら、もう少し削ってみます。もしかしたら後1行くらいいけるかも。

さっき気が向いて、さぁ後1行削ってみよう!と思ったけれど、時間が経つと駄目だね。
変数名の意味を全然覚えていなくて、展開してみてもわけわからん……
自分で自分のコードを解析しています(笑)。新しく書いた方が楽かも。


594 名前: デフォルトの名無しさん 投稿日: 01/11/04 09:36
絶対俺のほうがスゲェ


595 名前: *nix厨 投稿日: 01/11/04 15:55
>>590-592
実は仕事中の逃避モードです
確かにプログラムの技術というよりトリッキーモノですね
では移動しましょう
http://pc.2ch.net/test/read.cgi/tech/983191866/642


596 名前: デフォルトの名無しさん 投稿日: 01/11/22 21:22
>>585
#include<iostream.h>
int main(){unsigned int i=1,b=1,c=1,z;a:for(;i+=2;){if(c<i)c+=1+(b++<<1);
for(z=3;z<=b;z+=2)if(i%z==0)goto a;cout<<i<<",";}return 0;}

ちょっとだけ短くしてみた。


597 名前: デフォルトの名無しさん 投稿日: 01/12/15 07:28
age


598 名前: デフォルトの名無しさん 投稿日: 01/12/18 00:03
ekat _ [] = []
ekat n (x:xs) = (map (take n)(take n (iterate tail (cycle x )))) ++ (ekat n xs)
mrep 1 = [[1]]
mrep n = ekat n (map (n:)(mrep (n-1)))
pretty x = sequence_ (map print x)
main = do x <- getNum ;pretty (mrep x)
where getNum :: IO Int
getNum = do{args<-getArgs;readIO (args!!0) }

引数nに対してnPnを出力。


599 名前: デフォルトの名無しさん 投稿日: 01/12/20 19:59
>>598
言語がわからん…(^^;


600 名前: デフォルトの名無しさん 投稿日: 01/12/20 21:41
600ズザー


601 名前: デフォルトの名無しさん 投稿日: 01/12/21 00:16
>>599
多分 Haskell かと


602 名前: 599 投稿日: 01/12/21 00:46
>>601
なるほど、ありがと。調べてみまっす。


603 名前: デフォルトの名無しさん 投稿日: 01/12/21 00:53
58文字のソート関数
s(int*a,int*b){while(a<b)*a>*b?*a^=*b^=*a^=*b:s(a++,b-1);}


604 名前: なんで? 投稿日: 01/12/21 17:32
LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
Debug/Cpp1.exe : fatal error LNK1120: 外部参照 1 が未解決です。


605 名前: デフォルトの名無しさん 投稿日: 01/12/21 18:05
なんて古いスレなんだ、、、、


606 名前: 605 投稿日: 01/12/21 18:07
1> #include <stdio.h>
2> #include <stdlib.h>
3> int main()
4> {
5> printf("ageてごめん。\n"); abort();
6> }
7>


607 名前: 606 投稿日: 01/12/21 18:07
やべ、、returnし忘れた(鬱


608 名前: ^ 投稿日: 01/12/21 18:23
print << 'EOF';
このスレッドは大耳モナーが嫌々管理中です、なんら問題はありません.
   (\_/)          タリー
   (  ´Д)    タリー              タリー
   /   つ  (\_/)   (\_/)ノ⌒ヽ、
  (_(__つ⊂(´Д`⊂⌒`つ(´Д` )_人__) ))
EOF


609 名前: dmp.c 投稿日: 01/12/21 20:13
/* こんなスレあったんですね。
Win98にはdump.exeがナイので昔作ったモノ。技のないダサいプログラムですが。*/
#include <stdio.h>
main(a,v)char**v;{FILE*f;char c,s[80],t[20];long p=0,m=0,n;if(a>1&&(f=fopen
(v[1],"rb"))){if(a>2)sscanf(v[2],"%x",&p);if(p>0)fseek(f,p,SEEK_SET);if(a>3
)sscanf(v[3],"%x",&m);if(n=p%16){sprintf(s,"%08X: %*s",p,n*3,"");sprintf(t,
"%20s","");}for(;(!m||p<m)&&fread(&c,1,1,f);p++){if(!(n=p%16))sprintf(s,"%"
"08X: ",p);sprintf(s+9+n*3," %02X",c&255);t[n]=(((unsigned)c<32||c==127)?
'.':c);t[n+1]=0;if(n==15)printf("%s : %""s\n",s,t);}if(p%16)printf("%-58s:"
" %s\n",s,t);}else puts("USAGE:dmp filename [start [end]]");}


610 名前: デフォルトの名無しさん 投稿日: 01/12/22 18:45
>>609
(・∀・)イイ!!


611 名前: デフォルトの名無しさん 投稿日: 01/12/24 11:32
誰か14行でRogue作って


612 名前: dmp.c 改 投稿日: 01/12/25 16:03
>>609
オーバーフロー発見。鬱死。t[20]->t[24]。
その他小細工。

#include <stdio.h>
p,m,n;main(a,v)char**v;{FILE*f;char c,s[80],t[24];if(a>1&&(f=fopen(v[1],"rb"))){
if(a>2)sscanf(v[2],"%x",&p);fseek(f,p,SEEK_SET);if(a>3)sscanf(v[3],"%x",&m);if(n
=p%16)sprintf(s,"%08X: %*s",p,n*3,""),sprintf(t,"%20s","");for(;(!m||p<m)&&fread
(&c,1,1,f);p++){if(!(n=p%16))sprintf(s,"%08X: ",p);sprintf(s+9+n*3," %02X",c&255
);t[n]=((c&255)<32||c==127)?46:c;t[n+1]=0;if(n==15)printf("%s : %s\n",s,t);}if(p
%16)printf("%-58s: %s\n",s,t);}else puts("USAGE:dmp filename [start [end]]");}


613 名前: デフォルトの名無しさん 投稿日: 01/12/29 01:14
printf("age");


614 名前: デフォルトの名無しさん 投稿日: 01/12/29 01:24
#include <iostream>
using namespace std;
int main(void)
{
cout<<"ほんとに7行でプロテクトはずせるの?"<<endl;
return(0);
}


615 名前: デフォルトの名無しさん 投稿日: 01/12/29 11:11
http://game.2ch.net/test/read.cgi/gamedev/1005038280/
相互リンク


616 名前: デフォルトの名無しさん 投稿日: 02/01/14 06:00
保守sage


617 名前: トリッキーの1 投稿日: 02/01/24 02:19
ををこのスレも生きてる♪懐かしい♪sage


618 名前: デフォルトの名無しさん 投稿日: 02/01/24 07:41
C/C++のコメント行を削除できたらいいなとねがう
#include <stdio.h>
#include <string.h>
int f,b;main(v,c)char*c[];{FILE*i,*o;char*p,*q,s[256];sprintf(s,"%s~",c[1]);if(
i=fopen(c[1],"rb")){if(o=fopen(s,"wb")){while(fgets(s,255,i)){p=strstr(s,"//");
if(p&&*(p-1)!='"')*p=0;else{if(!f){p=strstr(s,"/*");if(p){f=1;b=1;q=strstr(p,
"*/");if(q){q=p+2;f=0;}else*p = b = 0;}}else{q=strstr(s,"*/");if(q){strcpy(s,q+
2);f=0;}}}if(!b){fputs(s,o);}b=f;}fclose(o);}fclose(i);}}



619 名前: デフォルトの名無しさん 投稿日: 02/01/24 16:56
短縮おながいします。VC++用。
#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
char ch[50],title[]="NOTICE v1.00";
unsigned int gs,gm,gh;
for(;;)
{
gs=GetTickCount()/1000;
gm=gs;
gm/=60;gs%=60;
gh=gm;
gh/=60;gm%=60;
wsprintf(ch,"起動してから %d 時間 %d 分 %d 秒",gh,gm,gs);
if(MessageBox(NULL,ch,title,MB_RETRYCANCEL)==IDCANCEL)
break;
Sleep(1000);
}
return 0;
}


620 名前: >>619 投稿日: 02/01/24 17:39
かきかわんねーけど、いいんかいな?
char ch[50],title[]="NOTICE v1.00";
for(;;) {
unsigned int gs=GetTickCount()/1000;
wsprintf(ch,"起動してから %d 時間 %d 分 %d 秒",gs/3600,(gs/60)%60,gs%60);
if(MessageBox(NULL,ch,title,MB_RETRYCANCEL)==IDCANCEL) return 0;
Sleep(1000);
}



621 名前: デフォルトの名無しさん 投稿日: 02/01/24 17:41
中央高等学院の従業員「西部」が女子トイレに闖入し
汚物入れを物色して女子生徒の使用済みタンポン・ナプキン等を
個人的に収集しているというのは事実。

中央高等学院では
生徒及びその保護者の個人情報を名簿図書館等に売却しています。
中央高等学院 http://chs-f.com/index.html 中央高等学院福岡校
http://www.chuo-school.ac/



622 名前: デフォルトの名無しさん 投稿日: 02/01/24 18:49
>>621
8行なので×


623 名前: デフォルトの名無しさん 投稿日: 02/01/24 20:28
>>619さん

こんなのはどうでしょう。
終了しないけど、それほど邪魔にもならない……かな?(--;;;)

#include <windows.h>
int WINAPI WinMain(i,p,l,n){HWND h;DWORD d;char c[99];RECT r;HDC q;while(1){h=
GetDesktopWindow();d=GetTickCount()/1000;wsprintf(c,"起動してから %d 時間 %d \
分 %d 秒",d/3600,d/60%60,d%60);GetWindowRect(h,&r);q=GetWindowDC(h);
SetTextColor(q,0xFF0000);DrawText(q,c,-1,&r,DT_RIGHT|DT_TOP|DT_SINGLELINE
);InvalidateRect(h,&r,1);Sleep(1000);}return 0;}



624 名前: 623 投稿日: 02/01/24 20:35
ありゃ。whileの位置が変だ。

#include <windows.h>
int WINAPI WinMain(i,p,l,n){HWND h;DWORD d;char c[99];RECT r;HDC q;
h=GetDesktopWindow();GetWindowRect(h,&r);q=GetWindowDC(h);SetTextColor(q,
0xFF0000);while(1){d=GetTickCount()/1000;wsprintf(c,"起動してから %d 時間 %d \
分 %d 秒",d/3600,d/60%60,d%60);DrawText(q,c,-1,&r,DT_RIGHT|DT_TOP|DT_SINGLELINE
);InvalidateRect(h,&r,1);Sleep(1000);}return 0;}



625 名前: 619 投稿日: 02/01/24 21:56
>620,623,624
oh!!ここまで化けるとは。非常に感激していますヽ( ´ー`)ノ
調子に乗って、終了を追加してみたり…。
でも1行オーバー(;´Д`)

#include <windows.h>
int WINAPI WinMain(i,p,l,n){HWND h;DWORD d;char c[128];RECT r;HDC q;
h=GetDesktopWindow();GetWindowRect(h,&r);q=GetWindowDC(h);SetTextColor(q,
0xFF0000);int vk=0;while(!vk){d=GetTickCount()/1000;
vk=GetAsyncKeyState(VK_SHIFT)&GetAsyncKeyState(VK_CONTROL);
wsprintf(c,"起動してから %d 時間 %d 分 %d 秒 SHIFT+CTRLで終了",d/3600,d/60%60,d%60);
DrawText(q,c,-1,&r,DT_RIGHT|DT_TOP|DT_SINGLELINE);InvalidateRect(h,&r,1);
Sleep(1000);}return 0;}

>624に準じて改造しましたが、ウチではVC++がだだこねてエラーを吐き出すので、
WinMain付近を619のに差し替えて動かしました。


626 名前: デフォルトの名無しさん 投稿日: 02/01/24 23:08
インクルードディレクティブで1行喰うのは痛いですなぁ。


627 名前: 624 投稿日: 02/01/25 00:52
>>619さん

おお、頑張ってますね。
んじゃ、ちょっときわどい手を使いますが、7行にまとめてしまいませう。

#include <windows.h>
int WINAPI WinMain(i,p,l,n){HWND h;DWORD d;char c[99];RECT r;HDC q;int k=0;
h=GetDesktopWindow();GetWindowRect(h,&r);q=GetWindowDC(h);SetTextColor(q,
0xFF0000);while(!k){d=GetTickCount()/1000;k=GetAsyncKeyState(VK_SHIFT)&
GetAsyncKeyState(VK_CONTROL);wsprintf(c,"起動してから %d 時間 %d 分 %d 秒 SHIF\
T+CTRLで終了",d/3600,d/60%60,d%60);DrawText(q,c,-1,&r,34);InvalidateRect(h,&r,
1);Sleep(1000);}return 0;}

同じ手法を使えばもう少し縮みそう。
WinMainは、うちのVC++では警告3つで通してくれました(^^;)



628 名前: 624 投稿日: 02/01/25 01:03
あと、ファイルの拡張子はcppではなく、cで。
cppだとだめなようです。



629 名前: NASM 投稿日: 02/01/25 01:21
assume cs:code ds:code
code test
org 100h
start:
mov dx,offset mes1
mov ah,09h
int 21h
mes1 DB 'あせむぶら!',0Dh,0Ah,'$'
code ends
end start


630 名前: 619 投稿日: 02/01/25 16:55
#include <windows.h>
int WINAPI WinMain(i,p,l,n){HWND h;DWORD d;char c[99];RECT r;HDC q;int k=0;
h=GetDesktopWindow();GetWindowRect(h,&r);q=GetWindowDC(h);SetTextColor(q,
0xFF0000);while(!k){d=GetTickCount()/1000;k=GetAsyncKeyState(16)&
GetAsyncKeyState(17);wsprintf(c,"起動してから %02d 日 %02d 時間 %02d 分 \
%02d 秒 SHIFT+CTRLで終了",d/86400,d/3600%24,d/60%60,d%60);DrawText(q,c,
-1,&r,34);InvalidateRect(h,&r,1);Sleep(1000);}return 0;}

また、ヤッチャッタ。
欠点は49日までしか測定出来ないところ。


631 名前: 624 投稿日: 02/01/25 22:48
>>619さん

お疲れ様です。49日多分対応……したと思うのですが。
実際にやってみないとわからないのが辛い(--;)
ついでに、表示されなくなるバグもこれで直ったかと。

#include <windows.h>
int WINAPI WinMain(i,p,l,n){HWND h;DWORD d,y=0;char c[99];RECT r;HDC q;int k=0,
z=0;h=GetDesktopWindow();while(!k){d=GetTickCount()/1000;d=d+z*0x418937;Sleep(
100);GetWindowRect(h,&r);k=GetAsyncKeyState(16)&GetAsyncKeyState(17);wsprintf(c
,"起動してから %02d 日 %02d 時間 %02d 分 %02d 秒 SHIFT+CTRLで終了",d/86400,d/
3600%24,d/60%60,d%60);q=GetWindowDC(h);SetTextColor(q,0xFF0000);DrawText(q,c,-1
,&r,34);if(k==1)k=0;InvalidateRect(h,&r,1);ReleaseDC(h,q);if(y>d)z++;y=d;}}



632 名前: 619 投稿日: 02/01/26 19:46
>>631
おお!スゴイです。早速コンパイルして使用しています。
以前のは、IEを動かすとたま〜に消えましたが、今回は消えない!

さすがに、これ以上は進化できないようです。
新ネタを思いついたら、また書くです(>▽<)。


633 名前: デフォルトの名無しさん 投稿日: 02/01/31 20:48
誰か7行で超軽いOSをつくってください


634 名前: デフォルトの名無しさん 投稿日: 02/02/01 04:49
最小の素数判定プログラムを作ってください。



635 名前: デフォルトの名無しさん 投稿日: 02/02/01 07:33
>>634
int isprime(int n){return n == 2;}


636 名前: デフォルトの名無しさん 投稿日: 02/02/02 02:29
>>634
int isprime(int n){
int i = 2;
if (n < 2) return 0; else if (n == 2) return 1;
while((n % i != 0) && (i < n)) i++;
return n == i;
}



637 名前: デフォルトの名無しさん 投稿日: 02/02/02 02:33
みすった。
n % n == 0 なのは当たり前だから i < n っていらないや。

int isprime(int n){
int i = 2;
if (n < 2) return 0;
else if (n == 2) return 1;
while(n % i != 0) i++;
return n == i;
}



638 名前: デフォルトの名無しさん 投稿日: 02/02/02 02:55
>>634
int isprime(int n){
int i=2;if(n<2)return 0;
for(;i<=n/2;i++)if(n/i*i==n)
return 0;return 1;}



639 名前: デフォルトの名無しさん 投稿日: 02/02/02 03:57
よくよく考えたら n==2 っていらんわ。

int isprime(int n){
  int i = 2;
  if (n < 2) return 0;
  while(n % i != 0) i++;
  return n == i;
}



640 名前: デフォルトの名無しさん 投稿日: 02/02/02 06:10
偶数とnの平方根以上の数で計算する必要は
ないのでは。


641 名前: デフォルトの名無しさん 投稿日: 02/02/02 07:55
なんか見た目的に長くなっちゃうので(苦笑)
もちろん分ってはいるのですが。


642 名前: デフォルトの名無しさん 投稿日: 02/02/03 19:11
7行でCOM書けない?


643 名前: デフォルトの名無しさん 投稿日: 02/02/03 19:24
DOSのCOM?COMコンポーネントならアクティブスクリプティングでなら簡単に書けそうだけど、
詰まんないかも。


644 名前: デフォルトの名無しさん 投稿日: 02/02/03 19:26
int a[3],b=0;printf("<html><body><h1 style=\"background:black;color:white;\">色早見表</h1><pre>");
for(a[0]=0x00;a[0] <= 0xff;a[0]++)for(a[1]=0x00;a[1] <= 0xff;a[1]++)
for(a[2]=0x00;a[2] <= 0xff;b++,a[2]++){
printf("<font color=\"#%02X%02X%02X\" size=1>●</font><tt>#%02X%02X%02X</tt>",a[0],a[1],a[2],a[0],a[1],a[2]);
if(b == 16)printf(b=0,"\n");
}printf("</body></html>");//HTML1677万色表示


645 名前: まもら ◆MtyDeTiY 投稿日: 02/02/04 09:46
// 24時間以上前の話題でスマソ
private static boolean isDividable( int n, int i ) {
 return ( i != 1 ) && ( n % i != 0 ) && isDividable( n, i-1 );
}
public static boolean isPrime(int n) {
 return isDividable( n, n-1 );
}


646 名前: デフォルトの名無しさん 投稿日: 02/02/04 13:07
>>646
なにそれ?
アフォ?


647 名前: デフォルトの名無しさん 投稿日: 02/02/04 13:56
>>646
自分にアフォとか言ってるアフォのいるスレはここですか?


648 名前: デフォルトの名無しさん 投稿日: 02/02/07 03:40
>>645
再帰とは思いつかなかった。
短くて、素晴らしい。


649 名前: デフォルトの名無しさん 投稿日: 02/02/07 04:22
>>645
>private static boolean isDividable( int n, int i ) {
> return ( i != 1 ) && ( n % i != 0 ) && isDividable( n, i-1 );
>}
↑これ不味くないかな?
iが1だと必ずfalseになっちゃう。

後、大きな数を調べようとすると再帰が多すぎてStackOverflowErrorになってしまう。


650 名前: not 645 投稿日: 02/02/07 05:31
>>649
return ( i == 1 ) || (i > 0) && ( n % i != 0 ) && isDividable( n, i-1 );
return ( i <= 1 ) || ( n % i != 0 ) && isDividable( n, i-1 );
前者は遅い。後者は1以下を渡されてもtrueを返す…。
あと
return isDividable( n, sqrt(n) );
でちょっとだけ大きな数も調べれるように…。


651 名前: 645/まもら ◆MtyDeTiY 投稿日: 02/02/07 09:50
>645 は、うまく素数判定をしない。
>650 さんのが正解だ...
テストしないで書き込んじゃだめでしたね。スマソ。
>646 さんは、漏れに突っ込んだんだよね。たしかにアフォでした。



652 名前: デフォルトの名無しさん 投稿日: 02/02/07 11:15
もはや7行とは何の関わりもないクソスレになりつつあるな。
嗚呼過去の栄光よ…


653 名前: ◆woDeLPHI 投稿日: 02/02/07 12:04
Delphiでこんなのはどうかな? 新規作成でコンソールアプリ選んで
出たソースを全部消して以下と置き換えてコンパイル&GO

uses forms,math;var x,y:integer;x0,y0:double;begin with TForm.Create(nil) do try
show; while Visible do begin application.ProcessMessages;
x:=random(width); y:=random(Height);
x0:=x0-(x0-width div 2 ) / (1000+random(1000))/1000;
y0:=y0-(y0-height div 2 ) / (1000+random(1000))/1000;
Canvas.Pixels[x,y]:=round(x0*cos(hypot(x-x0,y-y0)/32)*256);
end; finally free;end; end.


654 名前: ◆woDeLPHI 投稿日: 02/02/07 12:10
あ、実行させたら リサイズさせてみて遊んでね


655 名前: ◆woDeLPHI 投稿日: 02/02/07 13:16
同じ趣向だけど 万華鏡もどき

uses forms,math;var x,y,c:Word;a:array[byte]of byte;function f(n:byte):byte;
begin Result:=round(cos(hypot((x+a[n*2])mod(c*2)-c,(y+a[n*2+1])mod(c*2)-c)/c)
*255)end; begin c:=80;with TForm.Create(nil) do try show; while Visible do
begin application.ProcessMessages; x:=random(width); y:=random(Height);
case random(10000)of 1: inc(a[random(9)]);2:dec(a[a[8]mod 9]);end;
Canvas.Pixels[x,y]:=f(0)+f(1)shl 8+f(2) shl 16; end; finally free;end; end.



656 名前: デフォルトの名無しさん 投稿日: 02/02/07 16:50
Delphiものは >>129 にAPIベースのウネウネがあるけど、VCL使うのは初出かな?


657 名前: デフォルトの名無しさん 投稿日: 02/02/07 19:45
7行で砂時計を作ってみてください


658 名前: デフォルトの名無しさん 投稿日: 02/02/07 19:46
むしろage


659 名前: デフォルトの名無しさん 投稿日: 02/02/07 20:15
>657
あなたに指図される筋合いはありません。
何の権限があってそのような事を言うのですか?




660 名前: デフォルトの名無しさん 投稿日: 02/02/07 20:49
>>659
別のところにも書きまくっているんだね。
http://pc.2ch.net/test/read.cgi/prog/1006353701/320


661 名前: デフォルトの名無しさん 投稿日: 02/02/07 23:21
じゃ 波紋 とか 雪の結晶は 難しい?


662 名前: デフォルトの名無しさん 投稿日: 02/02/08 00:56
マインスイーパーを作って


663 名前: デフォルトの名無しさん 投稿日: 02/02/08 17:47
マス目をクリックすると、マス目が開く
地雷を掘り出すと、ゲームに負け
マス目に番号が表示された場合、その数は周囲の 8 個のマス目に隠れている地雷の数を示す
地雷があると判断したマス目に印をつける





664 名前: デフォルトの名無しさん 投稿日: 02/02/08 21:52
>662

マインスイーパーは、>>535-540で出来てるぞ。
当時のレスを読みふけってしまった。
懐かしい面々、今はどうしているのかな?


665 名前: 波紋アプレット(10行) 投稿日: 02/02/09 22:45
--------W.java
import java.awt.*;import java.awt.event.*;import java.awt.image.*;public class
W extends java.applet.Applet{ImageProducer s;int w=64,T=4;int[] p=new int[w*w]
,v=new int[w*w];byte[] q=new byte[w*w],r=new byte[256],b=new byte[256];public
void update(Graphics g){g.drawImage(createImage(s),0,0,w*T,w*T,0,0,w,w,null);}
public boolean mouseDown(Event e,int x,int y){v[x/T+y/T*w]+=128;return true;}{
byte d=(byte)-128;for(int i=0;i<256;i++){r[(d++)&255]=(byte)i;b[i]=(byte)255;}
s=new MemoryImageSource(w,w,new IndexColorModel(8,256,r,r,b),q,0,w);new Thread
(){public void run(){for(;;){for(int i=w+1;i<w*w-w;i++){v[i]+=(p[i-w]+p[i-1]+p
[i+1]+p[i+w])/4-p[i];p[i-w]+=v[i-w];q[i]=(byte)(p[i-w-1]-p[i]);}repaint();try{
sleep(50);}catch(Exception e){return;}}}}.start();}}

--------w.html
<HTML><BODY>
<APPLET CODEBASE="." CODE="W.class" WIDTH="255" HEIGHT="255"></APPLET>
</BODY></HTML>

--------README
なんか汚い
パレット生成部分に無駄があるっぽい
挙動がやばい
ツッコミは勘弁


666 名前: どビギナー 投稿日: 02/02/10 01:47
>>665
見てみたす。
思わず目を細めてしまったのは、男の悲しいサガでしょうか?

Javaほとんどサパーリなので、コードに手入れできないや。
役に立てずスマソです。勉強しよっと。



667 名前: デフォルトの名無しさん 投稿日: 02/02/14 02:48
BASIC感動しました。
ということで、FORTHは作れませんかね?
組み込む機能は小さくても自己拡張できるし。


668 名前: デフォルトの名無しさん 投稿日: 02/02/14 23:22
>>667
辞書を別にすればできない気もしないな。


669 名前: MASM 6 投稿日: 02/02/15 00:37
.MODEL TINY
.CODE
ORG 100H
MAIN PROC
.exit
MAIN ENDP
END MAIN


670 名前: デフォルトの名無しさん 投稿日: 02/02/15 00:40
basic実用になりそう


671 名前: デフォルトの名無しさん 投稿日: 02/02/15 13:50
>>653-655
面白い面白い。
demoぺえ



672 名前: 671 投稿日: 02/02/15 13:52
眺めているうちに面白い模様に〜。
簡単な7行demo作れそうな予感・・・


673 名前: デフォルトの名無しさん 投稿日: 02/02/16 21:25
低速静的RangeCoder。7行なんてムリだ・・・

#include <stdio.h>
typedef unsigned long D;typedef unsigned char B;D f[256],tt;struct{D l,r;}t[256];
u(){D i,s=0;for(i=0;i<256;i++){t[i].r=f[i];t[i].l=s;s+=f[i];}tt=s;}wr(B *b,B *w,
D s,FILE *fp){D i,j,k,l,r,p,m;B c;for(i=0;i<256;i++)f[i]=0;for(i=0;i<s;i++)f[b[i
]]++;u();l=j=0;r=1UL<<31;for(i=0;i<s;){c=b[i++];m=r/tt;p=l;l+=m*t[c].l;r=m*t[c].
r;if(p>l){k=j-1;while(w[k]==0xFF)w[k--]++;w[k]++;}while(r<(1UL<<24)){w[j++]=(l>>
24)&0xFF;l<<=8;r<<=8;}}while(l){w[j++]=(l>>24)&0xFF;l<<=8;}j++;fwrite(f,4,256,fp
);fwrite(&s,4,1,fp);fwrite(&j,4,1,fp);fwrite(w,1,j,fp);}D lc(D l){D i;for(i=0;i<
255;i++)if(t[i].l<=l&&t[i+1].l>l)return i;return 0xFF;}D rd(B *b,B *w,D s,FILE*
fp){D o,i,j,k,d,l,r,m;for(i=0;i<s;i++)w[i]=0;fread(f,4,256,fp);fread(&o,4,1,fp);
fread(&j,4,1,fp);fread(w,1,j,fp);s=o;u();r=1<<7;l=w[0];k=(i=1)-1;while(s){while(
r<1<<24){l=(l<<8)|w[i++];r<<=8;}r/=tt;m=l/r;d=lc(m);b[k++]=d;l-=r*t[d].l;r*=t[d]
.r;s--;}return o;}main(int a,char *argv[]){FILE *i,*o;D n;B b[8192],w[8250];i=
fopen(argv[2],"rb");o=fopen(argv[3],"wb");while(!feof(i)){if(argv[1][0]=='e'){n=
fread(b,1,8192,i);wr(b,w,n,o);}else{n=rd(b,w,8192,i);fwrite(b,1,n,o);if(n!=8192)
break;}}fclose(o);fclose(i);}


674 名前: デフォルトの名無しさん 投稿日: 02/02/16 21:25
age忘れた


675 名前: パーティクル&ブラー(13行) 投稿日: 02/02/17 20:10
--------E.java
import java.awt.*;import java.awt.image.*;class E{public static void main(
String[]a){new Frame(){int T=4,W=128,n=96,F=255,i;P[]p=new P[n];Image m;byte[]
t=new byte[W*W],c=new byte[768];class P{double x,y,u=Math.random()*2-1,v=-Math
.random()*1.5-.5;int s(){x+=u;y+=(v+=.01);return(int)x+(int)y*W;}}{for(i=0;i<n
;i++)p[i]=new P();for(i=0;i<F;i+=3){c[i]=c[i+256]=c[i+512]=(byte)i;c[i+F]=c[i+
510]=c[i+511]=(byte)F;}show();MemoryImageSource s=new MemoryImageSource(W,W,
new IndexColorModel(8,256,c,0,false),t,0,W);s.setAnimated(true);m=createImage(
s);resize(512,512);repaint();try{for(;;Thread.sleep(15)){for(i=0;i<n;i++){int
v=p[i].s();if(v>0&&v<W*W)t[v]+=128;}for(i=1;i<W*(W-1);i++)t[i]=(byte)(((t[i-1]&
F)+(t[i+1]&F)+(t[i+W]&F))*F/768);s.newPixels();}}catch(Exception e){}}public
boolean mouseDown(Event e,int u,int v){for(int j=0;j<n;j++){p[j]=new P();p[j].
x=u/T;p[j].y=v/T;}return true;}public void update(Graphics g){g.drawImage(m,0,
0,W*T,W*T,0,0,W,W,this);}};}}

--------README
実行は
> javac E.java
> java E
で、ウィンドウ上でクリックすれ

7行には遠く及ばなかった・・・

J2SE1.4で動作確認
MS Javaではかなり厳しい動作だたよ すまそ


676 名前: 675 投稿日: 02/02/18 17:05
1行縮んで、12行に。
次はL-Systemでもやってみようかな

import java.awt.*;import java.awt.image.*;class E{public static void main(
String[]a){new Frame(){class P{double x,y,u=Math.random()*2-1,v=-Math.random()
*1.5-.5;int s(){return(int)(x+=u)+(int)(y+=(v+=.01))*W;}}int T=4,W=128,F=255,i
;P[]p=new P[0];Image m;byte[]t=new byte[W*W];public void update(Graphics g){g.
drawImage(m,0,0,W*T,W*T,this);}public boolean mouseDown(Event e,int X,int Y){p
=new P[96];for(int j=0;j<96;j++){(p[j]=new P()).x=X/T;p[j].y=Y/T;}return 0<1;}
{for(i=0;i<F;i+=3){t[i]=t[i+256]=t[i+512]=(byte)i;t[i+F]=t[i+510]=t[i+511]=(
byte)F;}MemoryImageSource s=new MemoryImageSource(W,W,new IndexColorModel(8,F+
1,t,0,0<0),t,0,W);s.setAnimated(true);m=createImage(s);resize(W*T,W*T);show();
try{for(repaint();;Thread.sleep(15)){for(i=0;i<p.length;i++){int z=p[i].s();if
(z>0&&z<W*W)t[z]+=128;}for(i=1;i<W*(W-1);i++)t[i]=(byte)(((t[i-1]&F)+(t[i+1]&F
)+(t[i+W]&F))*F/768);s.newPixels();}}catch(Exception e){}}};}}


677 名前: デフォルトの名無しさん 投稿日: 02/02/18 17:47
age


678 名前: 波紋/改(11行) 投稿日: 02/02/20 22:39
やはしあまりにも汚かったので修正。1行増えちったよ すまそ

import java.awt.*;import java.awt.image.*;class W{public static void main(
String[]a){new Frame(){int T=6,W=64,F=255,i,j;float r=1.414f;byte[]q=new byte[
W*W];float[]p=new float[W*W],v=new float[W*W];Image m;{byte d=(byte)-128;while
(i<F+1){q[j=((d++)&F)*3]=q[j+1]=(byte)i;q[2+3*i++]=(byte)F;}MemoryImageSource
s=new MemoryImageSource(W,W,new IndexColorModel(8,256,q,0,0<0),q,0,W);resize(W
*T,W*T);s.setAnimated(true);m=createImage(s);show();try{for(repaint();;Thread.
sleep(33)){for(i=W+1;i<W*W-W-1;i++){v[i]+=(p[i-W]+p[i-1]+p[i+1]+p[i+W]+(p[i-1-
W]+p[i+1-W]+p[i-1+W]+p[i+1+W])/r-p[i]*2*(2+r))/4;if(v[i]>1/32f)v[i]=1/32f;p[i-
W-1]+=v[i-W-1];q[i]=(byte)((p[i-W-1]-p[i])*F);}s.newPixels();}}catch(Exception
e){}}public void update(Graphics g){g.drawImage(m,0,0,W*T,W*T,this);}public
boolean mouseDown(Event e,int x,int y){v[x/T+y/T*W]-=.5;return 0<1;}};}}


679 名前: デフォルトの名無しさん 投稿日: 02/02/22 19:56
美しさより短さが優先すると思われるが…


680 名前: デフォルトの名無しさん 投稿日: 02/02/22 22:53
コードの美しさではなく画面出力の美しさだよ、念の為
コードの密度は上がってます。

あと、自分的には1024byteが目安。
スレの趣旨とはずれるけど7行はきつすぎっす。


681 名前: ウィルスだ! 投稿日: 02/02/23 00:54
#include <stdio.h> //自己複写プログラム
int main(int argc,char **argv)
{char s[256];int i,c;FILE *fp,*ap = fopen(*argv,"rb");if(ap){
fclose(ap);for(i=0;i<10/* 試しに10個 */;i++){sprintf(s,"%d.exe",i);
ap = fopen(*argv,"rb");fp = fopen(s,"wb");if(fp)while((c = fgetc(ap)) != EOF)
fputc(c,fp); else printf("\"%s\":開けず\n",s);fclose(fp);fclose(ap);}}
else{printf("*argv開けず\n");fclose(ap);return 1;}puts("正常終了");return 0;}


682 名前: デフォルトの名無しさん 投稿日: 02/02/23 17:31
まぁ、漏れは1行でテトリス作れるが。


683 名前: デフォルトの名無しさん 投稿日: 02/02/23 17:36
>>682
何万文字くらい使うの?


684 名前: 682 投稿日: 02/02/23 17:41
>>683
まちがったインベーダだ。
ちなみに約8000文字


685 名前: 未熟モン 投稿日: 02/02/25 04:43
スゲエ!スゲエよ、ここの人たち。
俺なんかまだまだだな〜。
いつか参加したいんで、出直してくるわ!


686 名前: デフォルトの名無しさん 投稿日: 02/02/26 13:00
>684
インベーダごときで100行かい(1行80で割ったとして)。
このスレのオセロでも見て出直してくるんだな。


687 名前: MIDIピアノ(7行) 投稿日: 02/02/27 19:19
--------P.java
import java.awt.*;import java.awt.event.*;import javax.sound.midi.*;class P{
public static void main(final String[]a)throws Exception{final Synthesizer s=
MidiSystem.getSynthesizer();s.open();new Frame(){{show();addKeyListener(new
KeyAdapter(){MidiChannel c=s.getChannels()[0];boolean[]f=new boolean[256];int
i;public void keyPressed(KeyEvent e){i=a[0].indexOf(e.getKeyChar());if(i>=0&&!
f[i]){f[i]=0<1;c.noteOn(i,64);}}public void keyReleased(KeyEvent e){if((i=a[0]
.indexOf(e.getKeyChar()))>=0){f[i]=0<0;c.noteOff(i);}}});requestFocus();}};}}

> javac P.java
> java P ####################################zsxdcvgbhnjmq2w3er5t6y7ui9o0p

QWERTYUIOP
ドレミファソラシドレミ

ZXCVBNM
ドレミファソラシ

かなり苦しいけど。Java1.3以上必須


688 名前: デフォルトの名無しさん 投稿日: 02/03/04 00:41
#include <stdio.h>
#include <string.h>
void puttab(FILE *f,int t){while(t-->0)fputc('\t',f);}void i(char *f){FILE *s,
*o;char *p,of[256];int c,in=0;strcpy(of, f);p=of;while(*(p++)!='.');strcpy(--p,
"_i.c");s=fopen(f,"r");o=fopen(of,"w");if(s==NULL||of==NULL){fprintf(stderr,
"Error:File not found.\n");fclose(s);fclose(o);return;}while((c=fgetc(s))!=EOF)
{switch(c){case'{':fprintf(o,"{\n");puttab(o,++in);break;case'}':fseek(o,-1,
SEEK_CUR);fprintf(o,"}\n");puttab(o,--in);break;case';':fprintf(o,";\n");puttab
(o,in);break;case'\n':case'\t':break;default:fprintf(o,"%c",c);break;}}fclose(s)
;fclose(o);}int main(int a,char *v[]){if(a<=1){
fprintf(stderr,"usage :exec <sorcefile.c>\n");return 0;}i(v[1]);return 0;}

もう出てたッヶ?
自動インデント。改行。
for(;;)の;まで改行しちゃうけど手動でやるよりマシ・・。(caseもね)
7行には遠いけどまぁ、役立つかもしれないってことで。
(エラー出力とか#include消せばいけるか)


689 名前: 38 投稿日: 02/03/04 20:28
>>688
一応、出来はアレだけど俺が作った126を>>138氏が改造してくれた版が。

あと1週間でこのスレ一周年か。懐かしいなぁ。


690 名前: デフォルトの名無しさん 投稿日: 02/03/04 21:32
>>2
はどういう意味ですか?
java.io.BufferedInputStream@2a9835
と出るだけですが


691 名前: デフォルトの名無しさん 投稿日: 02/03/05 19:22
>>690
その場の思いつきで書いてるんだろうから突っ込むな(笑)

7行テトリス希望


692 名前: bakache 投稿日: 02/03/07 00:44
#include <winsock2.h>
#include <io.h>
void main(){WSADATA w;WSAStartup(257,&w);{SOCKADDR_IN a={2,20480};SOCKADDR*q=(
SOCKADDR*)&a;SOCKET l=socket(2,1,0),s;bind(l,q,16);listen(l,5);for(;;){char b[
4096],*p=b,*t="HTTP/1.0 200\r\n\r\n";int n=16;int r=recv((s=accept(l,q,&n)),b,
4096,0),i=0,f;while(i++<r)if(*p++<=' '){char*u=p;while(i++<r)if(*p++<=' '){*--p
=0;send(s,t,16,0);*--u=':';*--u='C';f=open(u,32768);while((r=read(f,b,4096))>0)
send(s,b,r,0);close(f);}break;}closesocket(s);}closesocket(l);}WSACleanup();}

VC+Windows専用超簡易HTTP鯖...後1行けずれないっす。



693 名前: デフォルトの名無しさん 投稿日: 02/03/07 17:32
27行で良ければぷよぷよがあるよ。


694 名前: デフォルトの名無しさん 投稿日: 02/03/07 20:07
>>693
自慢したいなら別スレへ。
ココは7行スレなので、7行へ到達する意思がないならスレ違いです。


695 名前: *nix厨房 投稿日: 02/03/08 16:12
>>692
ちょっとだけ短く
f=open(u,32768);while((r=read(f,b,4096))>0)send(s,b,r,0);

for(f=open(u,32768);read(f,b,1)>0;send(s,b,1,0));
Winはよくワカンナイっす


696 名前: comp 投稿日: 02/03/08 19:42
Range Encoder と適応的モデル
g++ 2.95.3 で動作確認。16MB近くのファイルまで圧縮可能。
(Borland C++ ではコンパイル不可)
圧縮データはエンディアンの異なるシステムでは非互換。
符号化: exec E infile outfile 復号: exec D infile outfile

モデル部と符号化部に分かれている上に、8行もあるのが・・・

// main.cpp (モデル部)
#include "range.h"
L u,i;main(int,char **V){L b=256,a[b],l,z=ios::binary;fstream g(V[2],ios::in|z)
,o(V[3],ios::out|z);g.seekg(0,ios::end);C s[l=g.tellg()];g.seekg(0,ios::beg);
g.read(s,l);g.close();R r,x;while(u<b)a[u++]=1;if(*V[1]-68){C t[l*2];r.p=t;
while(i<l){for(x.w=b=0;b<s[i];)x.w+=a[b++];x.r=a[s[i++]]++;x.e=u++;r.T(x);}
r.F();o.write(&l,4);o.write(t,r.o);}else{C t[l=*(L *)s];r.D(s);while(i<l){x.e=
u++;L v=r.V(x),w=b=0;for(;v>=w;w+=a[b++]);t[i++]=--b;x.w=w-(x.r=a[b]++);r.S(x);
}o.write(t,l);}}

// range.h (符号化部)
#include <fstream>
typedef unsigned long L;typedef unsigned char C;class R{public:L w,r,e,i,o;C
*g,*p;R(){r=-1;w=o=0;};L D(C *n){g=n+(i=4);w=g[0]<<24|g[1]<<16|g[2]<<8|g[3];};
L V(R s){while(r<1<<24)w=w<<8|g[i++],r<<=8;return w/(r/=s.e);};L S(R s){w-=r
*s.w;r*=s.r;};L F(){p[o++]=w>>24;p[o++]=w>>16;p[o++]=w>>8;p[o++]=w;};L T(R s){
L t=r/s.e,l=w;w+=s.w*t;r=s.r*t;if(l>w){for(t=o-1;t>0,p[t]==255;p[t--]++);
p[t]++;}while(r<1<<24)p[o++]=w>>24,w<<=8,r<<=8;};};



697 名前: tara 投稿日: 02/03/09 04:23
>>692
どのみち実行されないことを考えると
closesocket(l);とWSACleanup();
は削除してしまっても良いかも。



698 名前: デフォルトの名無しさん 投稿日: 02/03/09 12:48
気体上げ
>>696
圧縮と展開にわけると、7行になりそうか?



699 名前: comp 投稿日: 02/03/09 14:49
=696
class を使うのをやめて、一本にしてみた。使い方は同じ。
現在11行。10行にはなりそうだが・・・。

#include <fstream>
typedef unsigned long L;typedef unsigned char C;L W=0,A=-1,E,O=0,u,i,b=256,a[b]
,l=ios::binary,X,Y,T,K;main(int,char **V){fstream g(V[2],ios::in|l),o(V[3],
ios::out|l);g.seekg(0,ios::end);C s[l=g.tellg()];g.seekg(0,ios::beg);g.read(s,l
);g.close();while(u<b)a[u++]=1;if(*V[1]-68){C t[l*2];while(i<l){for(X=b=0;b<s[i
];)X+=a[b++];Y=a[s[i++]]++;T=A/u++;K=W;W+=X*T;A=Y*T;if(K>W){for(T=O-1;T>0,t[O]
==255;t[T--]++);t[T]++;}while(A<1<<24)t[O++]=W>>24,W<<=8,A<<=8;}t[O++]=W>>24;t[
O++]=W>>16;t[O++]=W>>8;t[O++]=W;o.write(&l,4);o.write(t,O);}else{C t[l=*(L *)s]
;O=8;W=s[4]<<24|s[5]<<16|s[6]<<8|s[7];while(i<l){while(A<1<<24)W=W<<8|s[O++],A
<<=8;for(T=W/(A/=u++),K=b=0;T>=K;K+=a[b++]);t[i++]=--b;X=K-(Y=a[b]++);W-=A*X;A
*=Y;}o.write(t,l);}}



700 名前: デフォルトの名無しさん 投稿日: 02/03/09 14:57
昔雑誌で「1行プログラミング」ってあったよね。
なんかなつかし


701 名前: comp 投稿日: 02/03/09 14:59
>>698

サンクス。
今の時点なら、符号化と復号ルーチンを分けると、7行以内になる。
でも、ここまで来たからには、両方で7行におさめたい。
符号化が復号の2倍長いのがイタイ・・・。




702 名前: デフォルトの名無しさん 投稿日: 02/03/09 15:26
>>699
gcc拡張つかいまくり?


703 名前: comp 投稿日: 02/03/09 15:32
>>702
使いまくりです。
言語は何でもありってことなので、g++言語仕様でもよいのでは?ということでお願いします。
今、10行になりました。



704 名前: comp 投稿日: 02/03/09 15:40
うわー、失礼!
コンパイルエラーのまま上げてました。直してます。
鬱だ。



705 名前: comp 投稿日: 02/03/09 16:14
修正版。
今日はここまでにします。

#include <fstream>
typedef unsigned long L;typedef unsigned char C;L W,A=-1,E,O,u,i,l=ios::binary,
X,Y,T,K;main(int,char **V){fstream g(V[2],ios::in|l),o(V[3],ios::out|l);L b=256
,a[b];g.seekg(0,ios::end);C s[l=g.tellg()];g.seekg(0,ios::beg);for(g.read(s,l);
u<b;)a[u++]=1;if(*V[1]-68){C t[l*2];while(i<l){for(X=b=0;b<s[i];)X+=a[b++];Y=a[
s[i++]]++;T=A/u++;K=W;W+=X*T;if(K>W){for(K=O-1;K,t[K]==255;t[K--]++);t[K]++;}
for(A=Y*T;A<1<<24;A<<=8)t[O++]=W>>24,W<<=8;}t[O++]=W>>24;t[O++]=W>>16;t[O++]=W
>>8;t[O++]=W;o.write(&l,4);o.write(t,O);}else{C t[l=*(L *)s];W=s[4]<<24|s[5]<<
16|s[6]<<8|s[7];for(O=8;i<l;A*=Y){for(K=b=0;A<1<<24;A<<=8)W=W<<8|s[O++];for(T=W
/(A/=u++);T>=K;K+=a[b++]);t[i++]=--b;X=K-(Y=a[b]++);W-=A*X;}o.write(t,l);}}



706 名前: tara 投稿日: 02/03/09 17:49
>>692

POSTリクエストには応えられないけど、GETリクエストのみ対応で良いなら
これで動く……はず、です。

#include <winsock2.h>
#include <io.h>
void main(){WSADATA w;WSAStartup(257,&w);{SOCKADDR_IN a={2,20480};SOCKADDR*q=(
SOCKADDR*)&a;SOCKET l=socket(2,1,0),s;bind(l,q,16);listen(l,5);for(;;){char b[
4096],*p=b,*t="HTTP/1.0 200\r\n\r\n",*u;int n=16;int r=recv((s=accept(l,q,&n)),
b,4096,0),i=0,f;u=(p+=5);while(i++<r)if(*p++<=' '){*--p=0;send(s,t,16,0);f=open
(u,32768);while((r=read(f,b,4096))>0)send(s,b,r,0);close(f);}closesocket(s);}}}

ちなみに、HTTPサーバー上のルートディレクトリは、実行ファイルのあるディレクトリになります。



707 名前: デフォルトの名無しさん 投稿日: 02/03/09 18:48
>705
面白そうだがgcc専用じゃコンパイルすら出来ないんだろうな


708 名前: デフォルトの名無しさん 投稿日: 02/03/09 19:27
mingwで簡単にコンパイルできるからそれでいいじゃん


709 名前: 673 投稿日: 02/03/09 20:31
>>705
スゲェ。そこまで縮むとは。
参考資料:http://www.tomozo.ne.jp/yamazaki/download/doc_basic_compression.htm

繰上げのところが長くて困ってると思うんだけど
0xFFの数を数えて繰り上げるようにすれば
ちょっと縮むかもしれない。
あと、出力を4バイトためてDWORD出力するようにすれば
ロードの部分の無駄なシフトが要らなくなると思う。


710 名前: デフォルトの名無しさん 投稿日: 02/03/09 21:38
>705
せっかく凄いんだから、標準C++で挑戦すればいいのに。
新しい環境用意してまでコンパイルする奴はあまりいないしね。俺みたいに(笑
まぁでもそこらへんは前に話し尽くされているとおり705さんの自由っすね


711 名前: デフォルトの名無しさん 投稿日: 02/03/09 21:59
>>710
それは7行達成してからでもいいんじゃないか?


712 名前: comp 投稿日: 02/03/10 00:26
アルゴリズムを変えないと、これ以上は難しいです。
それでも、先のバージョンから40文字ほど縮めました。
673 さんに触発されて、自分のコードを書き直して始めたのですが、随分勉強になりました。


#include <fstream>
typedef unsigned long L;typedef unsigned char C;L b=256,a[256],W,A=-1,O,u,i,T,
K,l=ios::binary;main(int,char**V){fstream g(V[2],ios::in|l),o(V[3],ios::out|l)
;g.seekg(0,ios::end);C s[l=g.tellg()],c;g.seekg(0,ios::beg);for(g.read(s,l);u<
b;)a[u++]=1;if(*V[1]-68){C t[l*2];for(o.write(&l,4);i<l;K=W){for(T=b=0;b<s[i];
)T+=a[b++];W+=A/u*T;if(K>W)for(K=O;--K,!++t[K];);for(A=A/u++*a[s[i++]]++;A<1<<
24;A<<=8)t[O++]=W>>24,W<<=8;}o.write(t,O);o<<(c=W>>24)<<(c=W>>16)<<(c=W>>8)<<(
c=W);}else{C t[l=*(L*)s];W=s[4]<<24|s[5]<<16|s[6]<<8|s[7];for(O=8;i<l;A*=a[b]
++){for(K=b=0;A<1<<24;A<<=8)W=W<<8|s[O++];for(T=W/(A/=u++);T>=K;K+=a[b++]);t[i
++]=--b;W-=A*(K-a[b]);}o.write(t,l);}}



713 名前: デフォルトの名無しさん 投稿日: 02/03/10 01:03
>>712
unsigned long の long と ios::binary はなくても動いた。
cygwin + gcc 2.95.3_5


714 名前: comp 投稿日: 02/03/10 22:32
>>713
32bit 環境ですから long はいらないようですね。
ios::binary はどうなんでしょうか? とりあえず外してみました。

さらに、無理だと思われたそれ以外の個所も縮みました。
そのため、とうとう9行達成ができました。
そして、それによってさらにもう少し減るかもしれません。


#include <fstream>
typedef unsigned L;typedef unsigned char C;L W,O,u,i,l,T,K;main(int,char**V){L
b=256,a[b],A=-1;fstream g(V[2],ios::in),o(V[3],ios::out);g.seekg(0,ios::end);C
s[l=g.tellg()],t[l*2];g.seekg(0,ios::beg);for(g.read(s,l);u<b;)a[u++]=1;if(*V[
1]-68){for(o.write(&l,4);i<l;K=W){for(b=0;b<s[i];W+=A/u*a[b++]);if(K>W)for(K=O
;--K,!++t[K];);for(A=A/u++*a[s[i++]]++;A<1<<24;A<<=8)t[O++]=W>>24,W<<=8;}o.
write(t,O);o<<C(W>>24)<<C(W>>16)<<C(W>>8)<<C(W);}else{C t[l=*(L*)s];for(W=s[4]
<<24|s[5]<<16|s[6]<<8|s[O=7];i<l;A*=a[b]++){for(K=b=0;A<1<<24;A<<=8)W=W<<8|s[
++O];for(T=W/(A/=u++);T>=K;K+=a[b++]);W-=A*(K-a[t[i++]=--b]);}o.write(t,l);}}



715 名前: デフォルトの名無しさん 投稿日: 02/03/10 23:10
>>714
うはぁ、コリャ気味悪い


716 名前: comp 投稿日: 02/03/10 23:17
変数Tを消すことができました。
iも消せそうですが、うーん、無理かな。



717 名前: comp 投稿日: 02/03/11 00:36
>>715
まったくです。自分でも理解不能になってきました。
fstream を ifstream と ofstream に分けました。


#include <fstream>
typedef unsigned L;typedef unsigned char C;L W,O,u,i,l,A=-1;main(int,char**V){
L b=256,a[b],K;ifstream g(V[2]);g.seekg(0,ios::end);C s[l=g.tellg()],t[l*2];g.
seekg(0,ios::beg);for(g.read(s,l);u<b;)a[u++]=1;ofstream o(V[3]);if(*V[1]-68){
for(o.write(&l,4);i<l;K=W){for(b=0;b<s[i];W+=A/u*a[b++]);if(K>W)for(K=O;!++t[
--K];);for(A=A/u++*a[s[i++]]++;A<1<<24;A<<=8)t[O++]=W>>24,W<<=8;}o.write(t,O);
o<<C(W>>24)<<C(W>>16)<<C(W>>8)<<C(W);}else{C t[l=*(L*)s];for(W=s[4]<<24|s[5]<<
16|s[6]<<8|s[O=7];i<l;A*=a[b]++){for(K=b=0;A<1<<24;A<<=8)W=W<<8|s[++O];for(A/=
u++;W/A>=K;K+=a[b++]);W-=A*(K-a[t[i++]=--b]);}o.write(t,l);}}



718 名前: デフォルトの名無しさん 投稿日: 02/03/11 00:50
main(int,char**V)のintはLに変えてもOKだな
あと、エンディアン変換のところ、デコード側で工夫すれば
変換しないでそのままストアできそうだから、縮むかも


719 名前: comp 投稿日: 02/03/11 01:04
>>718
> intはLに
あ、そうですね。ありがとうございます。

しかし、エンディアン変換とはどこのことでしょうか。
o<<C(W>>24)<<C(W>>16)<<C(W>>8)<<C(W);
でしょうか。
それとも、エンコード時のt[0]からt[3]を整数でストアして、
デコードのW=s[4]<<24... をたとえば W=*(L*)&s[4] にするということですか?

何にしてもそこら辺はやはりネックですね、どうしたもんでしょうか。
#この世にビッグエンディアンしかなければ・・・


720 名前: comp 投稿日: 02/03/11 01:19
あ、今気付いたんですが、
g.seekg(0,ios::beg); の ios::beg はいらないですね。



721 名前: デフォルトの名無しさん 投稿日: 02/03/11 01:43
>o<<C(W>>24)<<C(W>>16)<<C(W>>8)<<C(W);
ここ。んで、デコード側は4バイトごとに読み込んで、
右シフトしながらデコードバッファに入れると。

キャスト連発が無駄にしか見えないんで


722 名前: デフォルトの名無しさん 投稿日: 02/03/11 01:48
正直、このスレ見た後にプログラム組もうとすると、
感覚おかしくなってめちゃコード書きにくくなります(w


723 名前: comp 投稿日: 02/03/11 01:55
なんとなくあげ

>>721
符号語の読み書きをすべて4バイト単位に行うと、・・・可能でしょうかね。
ふむ。そうすると、s の読み込みも、逐次にすることもできそうですね。
そうなると、長さの算出(tellg)もいらなくなりますね。

うーむ。全体の設計、特にファイル入出力を見直してみます。


724 名前: comp 投稿日: 02/03/11 02:43
tellg 近辺を削除できたので、37バイト縮まりました。
本当に、7行いけるかもしれませんねぇ。嘘みたいだ。
4バイト入出力は、しかし、意外と難しそうです。

#include <fstream>
typedef unsigned L;typedef unsigned char C;L W,O,u,i,l,R=-1,K;main(L,char**V){
L b=256,a[b],R=-1,c;C*t=new C[1<<24];ifstream g(V[2]);ofstream o(V[3]);while(u
<b)a[u++]=1;if(*V[1]-68){for(;(c=g.get())<256;K=W,l++){for(b=0;b<c;W+=R/u*a[b
++]);if(K>W)for(K=O;!++t[--K];);for(R=R/u++*a[c]++;R<1<<24;R<<=8)t[O++]=W>>24,
W<<=8;}o.write(&l,4);o.write(t,O);o<<C(W>>24)<<C(W>>16)<<C(W>>8)<<C(W);}else{g
.read(&l,4);g.read(t,4);for(W=*t<<24|t[1]<<16|t[2]<<8|t[3];i<l;R*=a[b]++){for(
K=b=0;R<1<<24;R<<=8,O++)W=W<<8|g.get();for(R/=u++;W/R>=K;K+=a[b++]);W-=R*(K-a[
t[i++]=--b]);}o.write(t,l);}}



725 名前: comp 投稿日: 02/03/11 02:58
8行目の O++ は要りません。
それから、変数 l も消せました。

もう寝ます・・・


726 名前: デフォルトの名無しさん 投稿日: 02/03/11 03:49
>>724 R*=a[b]++
バグ。
1回目でa[256]を参照することになる


727 名前: デフォルトの名無しさん 投稿日: 02/03/11 04:23
#include <fstream>
typedef unsigned char C;unsigned W,O,u=256,i,l,K,b,a[256],R=-1;main(int,char**V
){C*t=new C[1<<24];ifstream g(V[2]);ofstream o(V[3]);if(*V[1]-68){for(;(i=g.get
())<256;K=W,l++){for(b=0;b<i;W+=R/u*(a[b++]+1));if(K>W)for(K=O;!++t[--K];);for(
R=R/u++*(1+a[i]++);R<1<<24;R<<=8)t[O++]=W>>24,W<<=8;}o.write(&l,4);o.write(t,O)
;o<<C(W>>24)<<C(W>>16)<<C(W>>8)<<C(W);}else{g.read(&l,4);g.read(t,4);for(W=*t<<
24|t[1]<<16|t[2]<<8|t[3];i<l;R*=++a[b]){for(K=b=0;R<1<<24;R<<=8,O++)W=W<<8|g.
get();for(R/=u++;W/R>=K;K+=a[b++]+1);W-=R*(K-a[t[i++]=--b]-1);}o.write(t,l);}}

8行まで縮みました


728 名前: デフォルトの名無しさん 投稿日: 02/03/11 04:37
#include <fstream>
typedef unsigned char C;unsigned W,O,u=256,i,l,K,b,a[256],R=-1;main(int,char**V
){C*t=new C[1<<24];ifstream g(V[2]);ofstream o(V[3]);if(*V[1]-68){for(;(i=g.get
())<256;K=W,l++){for(b=0;b<i;W+=R/u*(a[b++]+1));if(K>W)for(K=O;!++t[--K];);for(
R=R/u++*++a[i];R<1<<24;R<<=8)t[O++]=W>>24,W<<=8;}o.write(&l,4);o.write(t,O);o<<
C(W>>24)<<C(W>>16)<<C(W>>8)<<C(W);}else{g.read(&l,4);g.read(t,4);for(W=*t<<24|t
[1]<<16|t[2]<<8|t[3];i<l;R*=++a[b]){for(K=b=0;R<1<<24;R<<=8)W=W<<8|g.get();for(
R/=u++;W/R>=K;K+=a[b++]+1);W-=R*(K-a[t[i++]=--b]-1);}o.write(t,l);}}

あと69キャラクタですね


729 名前: comp 投稿日: 02/03/11 19:07
>>726
エンコード側は初期化していますし、デコード側も問題ないはずですが・・・

>>727
頻度を0で初期化して、計算時に+1するのは考えていたのですが、実装に手間取っていました。
先を越されてしまいましたね。さすがです。

というわけで、仕様を変更して、標準入出力を使うようにしました。
あと22−1文字です。
% exec < infile > outfile


#include <iostream>
typedef unsigned char C;unsigned W,O,u=256,i,l,K,b,a[256],R=~0,y=1<<24,x=u;main
(int,char**V){C*t=new C[y];if(*V[1]-69){cin>>O;cin.read(t,5);for(W=t[1]*y|t[2]
<<16|t[3]*x|t[4];l<O;R*=++a[b]){for(K=b=0;R<y;R*=x)W=W*x|cin.get();for(R/=u++;W
/R>=K;K+=a[b++]+1);W-=R*(K-a[t[l++]=--b]-1);}}else{for(;~(i=cin.get());K=W,l++)
{for(b=0;b<i;W+=R/u*(a[b++]+1));if(K>W)for(K=O;!++t[--K];);for(R=R/u++*++a[i];R
<y;R*=x)t[O++]=W/y,W*=x;}cout<<l<<C(0);t[O++]=W/y;t[O++]=W>>16;t[O++]=W/x;t[O++
]=W;}cout.write(t,O);}


730 名前: デフォルトの名無しさん 投稿日: 02/03/11 19:25
>>726 エンコード側は初期化していますし、デコード側も問題ないはずですが・・・
デコード側で問題がある。



731 名前: 730 投稿日: 02/03/11 19:29
新しい版では修正されてるようですね
char a[256]で確保して、a[256]を参照していた


732 名前: comp 投稿日: 02/03/11 19:44
>>731
さっぱりわかりません・・・。
デコード側2個目の for で K=b=0 してありますし、
データが正しければその後、b に 256 が入ることはないと思うのですが・・・。
私は、何か勘違いしているんでしょうか?


733 名前: 730 投稿日: 02/03/11 20:00
>>732
スマソ激しく勘違いしてました。
出直してきます


734 名前: comp 投稿日: 02/03/11 20:51
>>733
気にしないでください。
後21文字、頑張りましょう。


735 名前: デフォルトの名無しさん 投稿日: 02/03/11 22:15
#include <iostream>
typedef char C;unsigned W,O,u=256,i,l,K,b,a[256],R=~0,y=1<<24,x=u;main(int,C**V
){C*t=new C[y];if(*V[1]-69){cin>>O;cin.read(t,5);for(W=t[1]*y|t[2]<<16|t[3]*x|t
[4];l<O;R*=++a[b]){for(K=b=0;R<y;R*=x)W=W*x|cin.get();for(R/=u++;W/R>=K;K+=a[b
++]+1);W-=R*(K-a[t[l++]=--b]-1);}}else{for(;~(i=cin.get());K=W,l++){for(b=0;b<i
;W+=R/u*(a[b++]+1));if(K>W)for(K=O;!++t[--K];);for(R=R/u++*++a[i];R<y;R*=x)t[O
++]=W/y,W*=x;}cout<<l<<C(0);t[O++]=W/y;t[O++]=W>>16;t[O++]=W/x;t[O++]=W;}cout.
write(t,O);}

あと12文字。そろそろ限界近いかも


736 名前: 673 投稿日: 02/03/11 22:19
超スゲエ

褒め称えage


737 名前: デフォルトの名無しさん 投稿日: 02/03/11 22:29
#include <iostream>
unsigned W,O,u=256,i,l,K,b,a[256],R=~0,y=1<<24,x=u;main(int,char**V){char*t=new
char[y];if(*V[1]-69){cin>>O;cin.read(t,5);for(W=t[1]*y|t[2]<<16|t[3]*x|t[4];l<O
;R*=++a[b]){for(K=b=0;R<y;R*=x)W=W*x|cin.get();for(R/=u++;W/R>=K;K+=a[b++]+1);W
-=R*(K-a[t[l++]=--b]-1);}}else{for(;~(i=cin.get());K=W,l++){for(b=0;b<i;W+=R/u*
(a[b++]+1));if(K>W)for(K=O;!++t[--K];);for(R=R/u++*++a[i];R<y;R*=x)t[O++]=W/y,W
*=x;}cout<<l<<' ';t[O++]=W/y;t[O++]=W>>16;t[O++]=W/x;t[O++]=W;}cout.write(t,O);}

7行到達&頭が割れそう


738 名前: デフォルトの名無しさん 投稿日: 02/03/11 22:31
あ、一文字オーバーのカウントかな?
最後は改行無しでスマソ


739 名前: デフォルトの名無しさん 投稿日: 02/03/11 22:36
続いてたんだなここ・・・
httpdも算術符号もすごすぎ。



740 名前: デフォルトの名無しさん 投稿日: 02/03/11 22:42
#include <iostream>
unsigned W,O,u=256,i,l,K,b,a[256],R=~0,y=1<<24,x=u;main(int,char**V){char*t=new
char[y];if(*V[1]-69){cin>>O;cin.read(t,5);for(W=t[1]*y|t[2]<<16|t[3]*x|t[4];l<O
;R*=a[b]){for(K=b=0;R<y;R*=x)W=W*x|cin.get();for(R/=u++;W/R>=K;K+=a[b++]+1);W-=
R*(K-++a[t[l++]=--b]);}}else{for(;~(i=cin.get());K=W,l++){for(b=0;b<i;W+=R/u*(a
[b++]+1));if(K>W)for(K=O;!++t[--K];);for(R=R/u++*++a[i];R<y;R*=x)t[O++]=W/y,W*=
x;}cout<<l<<' ';t[O++]=W/y;t[O++]=W>>16;t[O++]=W/x;t[O++]=W;}cout.write(t,O);}

正真正銘到達age
です


741 名前: デフォルトの名無しさん 投稿日: 02/03/11 22:47
って、ダメだ。テキストしか確認してなかった


742 名前: デフォルトの名無しさん 投稿日: 02/03/11 22:50
737さん凄すぎ。縮むもんだねえ。
次のお題は Mersenne Twister でどうでしょ



743 名前: デフォルトの名無しさん 投稿日: 02/03/11 23:00
>>742
ゴメン、737はダメです。
バイナリに適応できません。

現在あと1文字で修正版ができるはずです


744 名前: comp 投稿日: 02/03/11 23:08
鈴木氏の証人喚問をTVで見ていたら、またもや抜かされ・・・。

>>740
セパレータを cout<<l<<' ' から cout<<l<<-1 とすると、
1文字減らせます。
もちろん、デコーダーでは、cin.read(t,6) などとしていきます。



745 名前: デフォルトの名無しさん 投稿日: 02/03/11 23:19
>>744 なるほどぉ出来ました

#include <iostream>
unsigned W,O,u=256,i,l,K,b,a[256],R=~0,y=1<<24,x=u;main(int,char**V){unsigned
char t[y];if(*V[1]-69){cin>>O;cin.read(t,6);for(W=t[2]*y|t[3]<<16|t[4]*x|t[5];l
<O;R*=a[b]){for(K=b=0;R<y;R*=x)W=W*x|cin.get();for(R/=u++;W/R>=K;K+=a[b++]+1);W
-=R*(K-++a[t[l++]=--b]);}}else{for(;~(i=cin.get());K=W,l++){for(b=0;b<i;W+=R/u*
(a[b++]+1));if(K>W)for(K=O;!++t[--K];);for(R=R/u++*++a[i];R<y;R*=x)t[O++]=W/y,W
*=x;}cout<<l<<-1;t[O++]=W/y;t[O++]=W>>16;t[O++]=W/x;t[O++]=W;}cout.write(t,O);}

ってことで7行です。
ロジックを縮めまくったcompさんに拍手


746 名前: comp 投稿日: 02/03/11 23:28
記念上げ!

>>745
とんでもない。最後の大詰めに貴方の大活躍があったならばこそです。



747 名前: デフォルトの名無しさん 投稿日: 02/03/12 00:29
>>742
MTは基幹に関わる定数の数&桁が多いんで、
コード部分でやたらと稼がないとダメ&理論を熟知している人がすくないだろうから、
難易度高いね、ものすごく。


748 名前: デフォルトの名無しさん 投稿日: 02/03/12 01:32
難易度高すぎるかな。


749 名前: デフォルトの名無しさん 投稿日: 02/03/12 02:25
MTできちゃった
#include<stdio.h>
#define T(u,v) ((((u)&0x8000000|(v)&0x7FFFFFFF)>>1)^((v)&1?0x9908b0df:0))
typedef unsigned long L;unsigned long N=623,M=397,K=227,m[624],i;x(L s){m[0]=s;
for(i=1;i<N;i++)m[i]=69069*m[i-1];}ns(){for(i=0;i<K;i++)m[i]=m[i+M]^T(m[i],m[i\
+1]);for(;i<N;i++)m[i]=m[i-K]^T(m[i],m[i+1]);m[N]=m[M-1]^T(m[N],m[0]);i=624;}L
g(){L y;if(!i--)ns();y=m[624-i];y^=y>>11;y^=(y<<7)&0x9d2c5680;y^=(y<<15)&0xefc\
60000;y^=y>>18;return y;}main(){x(4357);while(1){printf("%lx\n",g());}}


750 名前: デフォルトの名無しさん 投稿日: 02/03/12 10:12
完成版。1000個吐いたら止まる

#include<stdio.h>
#define T(u,v) ((((u)&0x8000000|(v)&0x7FFFFFFF)>>1)^((v)&1?0x9908b0df:0))
typedef unsigned long L;unsigned long N=623,M=397,K=227,m[624],i;x(L s){m[0]=s;
for(i=1;i<N;i++)m[i]=69069*m[i-1];}n(){for(i=0;i<K;i++)m[i]=m[i+M]^T(m[i],m[i+1
]);for(;i<N;i++)m[i]=m[i-K]^T(m[i],m[i+1]);m[N]=m[M-1]^T(m[N],m[0]);i=624;}L g(
){L y;if(!i--)ns();y=m[624-i];y^=y>>11;y^=(y<<7)&0x9d2c5680;y^=(y<<15)&0xefc60\
000;return y^(y>>18);}main(){L a=1000;x(4357);while(a--){printf("%lx\n",g());}}


751 名前: デフォルトの名無しさん 投稿日: 02/03/12 14:51
上の方にオセロがあったみたいだから、今度は将棋かチェスよろしく


752 名前: デフォルトの名無しさん 投稿日: 02/03/12 15:05
>>749-750
素晴らしすぎる


753 名前: 750 投稿日: 02/03/12 15:28
ごめんバグあった。これで最終版です。
初期化にKnuthのランダムを使うバージョンです。

#include<stdio.h>
#define T(u,v) ((((u)&0x8000000|(v)&0x7FFFFFFF)>>1)^((v)&1?0x9908b0df:0))
typedef unsigned long L;L N=623,M=397,K=227,m[624],i;x(L s){m[0]=s;for(i=1;i<N;
i++)m[i]=69069*m[i-1];}n(){for(i=0;i<K;i++)m[i]=m[i+M]^T(m[i],m[i+1]);for(;i<N;
i++)m[i]=m[i-K]^T(m[i],m[i+1]);m[N]=m[M-1]^T(m[N],m[0]);i+=2;}L g(){L y;if(!i--
)n();y=m[624-i];y^=y>>11;y^=(y<<7)&0x9d2c5680;y^=(y<<15)&0xefc60000;return y^(y
>>18);}main(){L a=1000;x(4357);while(a--){printf("%08lx\n",g());}}


754 名前: 750 投稿日: 02/03/12 15:30
>>751
将棋は辛そう・・・

>>752
ありがとー!すげえ嬉しい!


755 名前: デフォルトの名無しさん 投稿日: 02/03/12 16:09
>>751
駒の動かし方パターンを持っておくだけで七行になりそうな気がするぞ(w


756 名前: Javaさん 投稿日: 02/03/13 02:05
いまさらながらにHttpd

index.htmlしか返せないのが
//D.java
import java.net.*;import java.io.*;class D extends Thread{OutputStream o;static
void main(String[] s)throws Exception{ServerSocket t=new ServerSocket(80);while(
true){new D(t.accept());}}D(Socket s)throws Exception{int q=s.getInputStream().
read();o=s.getOutputStream();start();}public void run(){try{BufferedReader f=
new BufferedReader(new FileReader("index.html"));o.write(("HTTP/1.1 200 OK\nCon"
+"tent-Type: text/html\n\n").getBytes());while(f.ready()){o.write((f.readLine()+
"\n").getBytes());}o.close();}catch(Exception e){}}}

こんなかんじ?

で、複数ファイル名対応にしようとすると7行の壁が,、、、
//同じくD.javaでスマソ
import java.net.*;import java.io.*;class D extends Thread{OutputStream o;String
v;static void main(String[] s)throws Exception{ServerSocket t=new ServerSocket
(80);while(true){new D(t.accept()).start();}}D(Socket s)throws Exception{o=s.
getOutputStream();v=new BufferedReader(new InputStreamReader(s.getInputStream())
).readLine();v=v.substring(v.indexOf(" ")+2,v.lastIndexOf("H")-1);if(v.endsWith(
"/"))v+="index.html";}public void run(){try{BufferedReader f=new BufferedReader(
new FileReader(v));while(f.ready()){o.write((f.readLine()+"\n").getBytes());}o.
close();}catch(Exception e){}}}

"HTTP/1.1 ..."等のレスポンスまで削ってもきつい。
等幅で見ると余裕がないのが見え見え。。。
しかもカレントより上のディレクトリにもアクセスできる、、、、w

#Javaは板違い?


757 名前: Javaさん 投稿日: 02/03/13 02:09
上のほうの
"HTTP/1.1 200 OK\nCon"+"tent-Type: text/html\n\n"
の部分は、ただ行にぎっしり詰めるためだけの"+"です。
無くても7行で収まるけど、まぁ、ユルシテ、、、、


758 名前: デフォルトの名無しさん 投稿日: 02/03/13 10:06
>>756
言語は問わないから Java でも別にかまわないと思われ
むしろ #include で1行使わされる C/C++ より有利かも


759 名前: デフォルトの名無しさん 投稿日: 02/03/13 10:09
JAVA作品は多いよ7〜10あるんじゃない?

Del坊ガンバレ まだ3作品しかない



760 名前: デフォルトの名無しさん 投稿日: 02/03/14 00:29
>>756
あうー、Threadやめてしまうなりよ

import java.net.*;import java.io.*;class D{OutputStream o;String v;static void
main(String[]a){try{ServerSocket t=new ServerSocket(80);for(;;){Socket s=t.
accept();OutputStream o=s.getOutputStream();String v=new BufferedReader(new
InputStreamReader(s.getInputStream())).readLine();v=v.substring(v.indexOf(" ")+
1,v.lastIndexOf("H")-1);BufferedReader f=new BufferedReader(new FileReader(v));
while(f.ready())o.write((f.readLine()+"\n").getBytes());o.close();}}catch(
Exception e){}}}

どうなりか?7行。


761 名前: デフォルトの名無しさん 投稿日: 02/03/14 00:40
>>760 あうっ! フィールドは使ってなかった...
けずると6行になっちゃうぞ?




762 名前: デフォルトの名無しさん 投稿日: 02/03/14 01:41
塩基配列圧縮記念
http://www.zdnet.co.jp/news/bursts/0203/11/08.html

データの遺伝子を調べるソフトです。
標準入力のデータから塩基配列を調べて、標準出力に出します。
何の工夫も無く、7行です。
% acgt < acgt.c
などとして遊んでください。

acgt.c ------------------------------------------
#include <stdio.h>
int main() {
 char*s="ACGT",c,i;
 while((c=getchar())!=EOF)
  for(i=0;i<4;i++,c>>=2)
   printf("%c",s[c&3]);
}



763 名前: デフォルトの名無しさん 投稿日: 02/03/14 13:19
>>762
う〜ん,気にいった。何の役にも立たないところが良い。


764 名前: デフォルトの名無しさん 投稿日: 02/03/14 16:05
あれ?>762は正しいの?
Cなんて忘れたけどさ、intで受けないと変なとこで終わらない?



765 名前: デフォルトの名無しさん 投稿日: 02/03/14 18:20
つーか、永遠に終わらない


766 名前: デフォルトの名無しさん 投稿日: 02/03/14 20:27
シロウト考えではFFを読み込んだときに終わっちゃいそうにオモタ。



767 名前: デフォルトの名無しさん 投稿日: 02/03/14 21:39
ctrl+Z でも ctrl+C でも終るだろう?


768 名前: デフォルトの名無しさん 投稿日: 02/03/15 10:26
 


769 名前: デフォルトの名無しさん 投稿日: 02/03/15 17:00
#include<stdio.h>
main(){int a[99],c,i,n;for(i=0;i<99;i++)a[i]=0;*a+=1;for(n=256;n>0;n--){for(i=c=
0;i<99;i++){a[i]+=c;c=a[i]%n;a[i]/=n;c*=1000000;}*a+=1;}for(i=0;i<99;i++)printf(
i?"%06d":"%d.",a[i]);printf("\n");}
自然対数の底。既出かね


770 名前: Javaさん 投稿日: 02/03/15 21:16
>>760
なるほど、スレッドを使わないのも簡易HTTPサーバとしてはありですね.
少しでも重いコンテンツを載せると終了しますが、、.
あと、コピペしてコンパイルしてみましたが、そのソースだと動かないようです.
v.indexOf(" ")+1のところは+2でないとダメですね.


スレッドを使用したものも7行に縮めることに成功しました.

import java.net.*;import java.io.*;class D extends Thread{Socket s;static void
main(String[]z)throws Exception{ServerSocket t=new ServerSocket(80);for(;;)new D
(t.accept()).start();}public void run(){try{BufferedReader f=new BufferedReader(
new InputStreamReader(s.getInputStream()));String v=f.readLine();v=v.substring(
v.indexOf(" ")+2,v.lastIndexOf("H")-1);if(v.endsWith("/"))v+="index.html";f=new
BufferedReader(new FileReader(v));while(f.ready())s.getOutputStream().write((f.
readLine()+"\n").getBytes());s.close();}catch(Exception e){}}D(Socket a){s=a;}}



771 名前: デフォルトの名無しさん 投稿日: 02/03/16 22:34
いえーいあげ

次のお題は、RSA暗号でどうよ


772 名前: デフォルトの名無しさん 投稿日: 02/03/17 10:27
このスレすげぇなぁ…。


773 名前: デフォルトの名無しさん 投稿日: 02/03/18 12:16
>>772
同意。
なんか、MSX-FANの一画面プログラムを思い出すなぁ
職人はすごいっすね


774 名前: ◆tAdi.2WY 投稿日: 02/03/18 13:30
perl版の倉庫番は >>120 で出ているけど、今度は C で倉庫番。

#include <stdio.h>
char*strchr(const char*,int),*d="?@` A",*c=" .+*#@",m[768],*p,*q=m,*r,a,j,l;int
i;t(char*x){return strchr(c,*x)-c;}main(){FILE*e=fopen("map","r");for(;i<768;)j
=getc(e),j==10?i|=31:0,m[i++]=j;for(;q<m+768;)r=c+t(q),!r||!*q?r=c:0,r==c+5?p=q
:0,l+=r==c+2,*q++=*r;for(;;l?0:exit(0),i=getchar()-104,i<0|i>4?0:(j=d[i]-64,q=p
+j,r=q+j,t(q)&4?0:(t(q)&2?t(r)>1?0:(l+=(t(q)&1)-t(r),*q=c[t(q)-2],*r=43-t(r)):1
)?*p=c[a],a=t(q),*q=64,p=q:0))for(q=m,i=0;i<792;)putchar(i++%33?*q++:10);}

・ASCIIコード依存な上sizeof(int)>=sizeof(char *)じゃないと動かない…。
・マップはファイル "map" から読み込む(最大31x24)。
・@が自分、+が荷物、.がマーカー、*がマーカー上の荷物、#は壁。
 それ以外は道。
・hjkl + 改行で移動(vi or rogue風)。

サンプルの map ファイル。
x#######
##....x#
###...+###
#xx+#+x+x#
#x++xx#+x#
#xxxx#xxx#
####x@x###
xxx#####



775 名前: デフォルトの名無しさん 投稿日: 02/03/18 20:41
#include <stdio.h>
#define P(A,N,B,M) for(i=0;i<N;i++) putc(A, f); for(i=0;i<M;i++) putc(B, f);
int x,y,k,i;main(){FILE *f=fopen("t.bmp","wb");P(66,1,77,1)P(54,1,132,1)P(3,1,0
,5)P(54,1,0,3)P(40,1,0,3)P(64,1,1,1)P(0,2,240,1)P(0,3,1,1)P(0,1,24,1)P(0,6,132,
1)P(3,1,0,1)P(196,1,14,1)P(0,2,196,1)P(14,1,0,10)for(y=0;y++<240;)for(x=0;x++<
320;)for(k=0;k++<3;)putc(x*y*k/128,f);}

BMPファイル生成;
だれか残りの100文字でおもろいもん描画してみてくれ・・。
ってか、もっとちぢむのかな・・。
再帰の木の描画やろうと思ったんだが7行はムリか・・。


776 名前: arch 投稿日: 02/03/18 23:47
/* ta.cpp -- tar の展開 */
#include <fstream>
main(){char*c,*b=new char[1<<24];for(;cin.read(b,512),*b;){cout<<b<<endl;int i,
s;ofstream o(b);for(c=b+124,s=i=0;i<11;i++,c++)s=s*8+*c-48;cin.read(c,512*(s/
512+1));o.write(c,s);}}

誰か、アーカイバを作ってということだったので、試し。
入力は、標準入力より。
ただし展開のみで、しかもファイルのみ。
ディレクトリの作成は対応したい予定。


777 名前: デフォルトの名無しさん 投稿日: 02/03/19 01:23
BMPをJPGに7行で変換に挑戦してみるか。


778 名前: デフォルトの名無しさん 投稿日: 02/03/19 14:21
>777 になにかを期待してた。そんな俺が悪いのか!


779 名前: デフォルトの名無しさん 投稿日: 02/03/19 15:05
>>778
そんな778にささげる。

#!/bin/sh
convert $1 $2

2行でBMP2JPGコンバータだ。
sh と ImageMagik がインストールされていれば、な。


780 名前: デフォルトの名無しさん 投稿日: 02/03/20 14:54



781 名前: 778 投稿日: 02/03/25 15:04
>779
いや、そういう意味じゃなくてね・・
ほら、ここ「7行プログラミング」でしょ・・




782 名前: デフォルトの名無しさん 投稿日: 02/03/25 15:28
すまん・・・ネタのつもりじゃなかったんだが、どうしても7行には収まらん。
つーか無理っぽい気がしてきた。
7行関数 ってことにしても無理っぽいなぁ。


783 名前: デフォルトの名無しさん 投稿日: 02/03/25 15:50
>>782
途中経過でいいからはっつけちゃえー


784 名前: C_sugar 投稿日: 02/03/26 00:21
<html><head><script>var Ky=-1;var SHP,TId;var SL=1;var SRL=0;var SR=[];var D=
document;function GBP(){do{var BP=Math.floor(Math.random()*400)}while(GI(BP)!=
"□")return BP}function GS(){var F="";for(i=0;i<20;i++){for(j=0;j<20;j++){
var Id="F"+(i*20+j);F+=((i==0)||(i==19)||(j==0)||(j==19))?"<span id="+Id+
">■</span>":"<span id="+Id+">□</span>"}F+="<br>";}SI("EX",F);SHP=GBP();
SI(SHP,"●");SI(GBP(),"▲");SR[0]=SHP;MS()}function MS(){if(Ky!=-1){SRL++;SHP+=
[-1,-20,1,20][Ky];switch(GI(SHP)){case"●":case"■":clearTimeout(TId);alert(
"GameOver");return;case"▲":SL++;SI(GBP(),"▲");}SR[SRL]=SHP;SI(SHP,"●");SI(SR[
SRL-SL],"□")}TId=setTimeout("MS()",100)}function SI(P,H){D.all["F"+P
].innerHTML=H}function GI(P){return D.all["F"+P].innerHTML}</script></head>
<body onLoad="GS()" onKeyDown="javascript:Ky=event.keyCode-37;" Style="
font-family:monospace"><div id=FEX></div></body></html>

Snake Game(JavaScript)

12行が限界でした。

IE5以上、シフトJIS。
カーソルキーで操作します。






785 名前: デフォルトの名無しさん 投稿日: 02/03/26 01:49
>>784
すごい! おもしろい! はまってしまった・・・
なので10行まで縮めてみた。変数名勝手にいじってスマソ。

<html><head><script>var K=-1,P,T,M=1,L=0,Z=[],D=document,B,F,A;function R(){do{
B=Math.floor(Math.random()*400)}while(E(B)!="□")return B}function G(){F="";for
(i=0;i<20;i++){for(j=0;j<20;j++){A="F"+(i*20+j);F+=((i==0)||(i==19)||(j==0)||(j
==19))?"<span id="+A+">■</span>":"<span id="+A+">□</span>"}F+="<br>"}I("EX",F
);P=R();I(P,"●");I(R(),"▲");Z[0]=P;Y()}function Y(){if(K!=-1){L++;P+=[-1,-20,
1,20][K];switch(E(P)){case"●":case"■":clearTimeout(T);alert("Over");return;
case"▲":M++;I(R(),"▲")}Z[L]=P;I(P,"●");I(Z[L-M],"□")}T=setTimeout("Y()",100
)}function I(P,H){D.all["F"+P].innerHTML=H}function E(P){return D.all["F"+P].
innerHTML}</script></head><body onLoad="G()" onKeyDown="javascript:K=event.
keyCode-37;" Style="font-family:monospace"><div id=FEX></div></body></html>



786 名前: デフォルトの名無しさん 投稿日: 02/03/26 01:54
題材キタ━━━( ゚∀゚ )━( ゚∀)━(  ゚)━(  )━(゚  )━(∀゚ )━( ゚∀゚ )━━━!!!!
どうせIE5以上限定であるのなら、<html>とか削っちゃうとかw


787 名前: デフォルトの名無しさん 投稿日: 02/03/26 02:38
>>786
削ってみた。実質9行になた。
●■などを半角にすると、バランス悪いので、やめた。

<script>var K=-1,P,T,M=1,L=0,Z=[],D=document,F="",C="<span id=F";function R(){
while(E(F=Math.ceil(Math.random()*399))!="□");return F}function G(){for(i=0;i<
400;i++){F+=C+i;F+=(i<20||i>380||i%20==0||i%20==19)?">■</span>":">□</span>";
if(i%20==19){F+="<br>"}}I("EX",F);I(P=Z[0]=R(),"●");I(R(),"▲");Y()}function Y
(){if(K!=-1){L++;P+=[-1,-20,1,20][K];switch(E(P)){case"●":case"■":
clearTimeout(T);alert("Over");return;case"▲":M++;I(R(),"▲")}I(Z[L]=P,"●");I(
Z[L-M],"□")}T=setTimeout("Y()",99)}function I(P,H){D.all["F"+P].innerHTML=H}
function E(P){return D.all["F"+P].innerHTML}</script><body onLoad="G()"
onKeyDown="javascript:K=event.keyCode-37;" Style="font-family:monospace"><div
id=FEX>



788 名前: デフォルトの名無しさん 投稿日: 02/03/26 03:02
よく頑張るなぁ。。。


789 名前: 785=787 投稿日: 02/03/26 03:05
>>788
パズルゲームです。はまると怖いです。
眠いです。寝ます。予約語を何とかしてください。お願いします。

<script>var K=-1,M=1,L=0,Z=[],D=document,T="",P="<span id=F";function R(){while
(D.all["F"+(F=Math.ceil(Math.random()*399))].innerHTML!="□");return F}function
G(){for(i=0;i<400;i++){T+=P+i;T+=(i<20||i>380||(i+1)%20<2)?">■</span>":">□"+
"</span>";if(i%20>18){T+="<br>"}}I("EX",T);I(P=Z[0]=R(),"●");I(R(),"▲");Y()}
function Y(){if(K!=-1){L++;P+=[-1,-20,1,20][K];switch(D.all["F"+P].innerHTML){
case"●":case"■":clearTimeout(T);alert("Over");return;case"▲":M++;I(R(),"▲")
}I(Z[L]=P,"●");I(Z[L-M],"□")}T=setTimeout("Y()",99)}function I(P,H){D.all["F"
+P].innerHTML=H}</script><body onLoad="G()" onKeyDown="javascript:K=event.
keyCode-37;" Style="font-family:monospace"><div id=FEX>



790 名前: デフォルトの名無しさん 投稿日: 02/03/26 09:41
<script>var K=-1,M=1,L=0,Z=[],D=document.all,T="",P="<span id=F";function G(){
for(i=0;i<400;i++)T+=P+i+(i<20||i>380||(i+1)%20<2?">■":">□")+"</span>"+(i%20
>18?"<br>":"");I("EX",T);I(P=Z[0]=R(),"●");I(R(),"▲");Y()}function R(){while
(D["F"+(F=Math.ceil(Math.random()*399))].innerHTML!="□");return F}function Y(
){if(K!=-1){P+=[-1,-20,1,20][K];X=D["F"+P].innerHTML;if(X!="□")if(X=="▲"){
M++;I(R(),X)}else{clearTimeout(T);alert("Over");return}I(Z[++L]=P,"●");I(Z[L-
M],"□")}T=setTimeout("Y()",99)}function I(P,H){D["F"+P].innerHTML=H}</script>
<body onLoad="G()" onKeyDown="javascript:K=event.keyCode-37"><tt id=FEX>

うりゃ。8行。


791 名前: デフォルトの名無しさん 投稿日: 02/03/26 11:35
<body onKeyDown="javascript:K=event.keyCode-37"><tt id=FEX><script>var K=-1,M=1,
L=0,Z=[],D=document.all,T="",C="□",F;function R(H){while(D["F"+(F=Math.ceil(399
*Math.random()))].innerHTML!=C);I(F,H)}function I(P,H){D["F"+P].innerHTML=H}for(
i=0;i<400;i++)T+=(i%20?"":"<br>")+"<span id=F"+i+">"+(i>19&&i<379&&(i+1)%20>1?C:
"■")+"</span>";I("EX",T);R("●");P=Z[0]=F;R("▲");Y();function Y(){if(K!=-1){P
+=[-1,-20,1,20][K];X=D["F"+P].innerHTML;if(X!=C)if(X=="▲"){M++;R(X)}else{alert(
"Over");clearTimeout(T);return}I(Z[++L]=P,"●");I(Z[L-M],C)}T=setTimeout("Y()",
99)}</script>

動くかなあ



792 名前: IE限定ですが 投稿日: 02/03/26 11:46
<body onKeyDown="K=event.keyCode-37"><tt id=FEX><script>var K=-1,M=1,L=0,Z=[],D=
document.all,T="",C="□",F;function R(H){while(D["F"+(F=Math.ceil(Math.random()*
399))].innerHTML!=C);I(F,H)}function Y(){if(K+1){P+=[-1,-20,1,20][K];X=D["F"+P].
innerHTML;if(X!=C)if(X!="▲"){clearTimeout(T);alert("Over");return}else{M++;R(X)
}I(Z[++L]=P,"●");I(Z[L-M],C)}T=setTimeout("Y()",99)}function I(P,H){D["F"+P].
innerHTML=H}for(i=0;i<400;i++)T+=(i%20?"":"<br>")+"<span id=F"+i+">"+((i+1)%20>1
&&i>19&&i<379?C:"■")+"</span>";I("EX",T);R("●");P=Z[0]=F;R("▲");Y();</script>


793 名前: デフォルトの名無しさん 投稿日: 02/03/26 12:26
>>792
微妙に1列の文字制限オーバーしてない?


794 名前: 793 投稿日: 02/03/26 12:28
スマソ
改行コードを数えなければぴったり制限内だった


795 名前: 793 投稿日: 02/03/26 12:32
エラーで止またw

ライン:3
文字:70
エラー:'D[...].innerHTML'はオブジェクトではありません

タイミングは「1つ目の▲を取った時」


796 名前: 793 投稿日: 02/03/26 12:34
書き忘れ

IEのバージョンは5.01のSP2


797 名前: デフォルトの名無しさん 投稿日: 02/03/26 12:35
>791は動く。


798 名前: 790 投稿日: 02/03/26 13:31
<body onKeyDown="K=event.keyCode-37"><tt id=F><script>function R(H){while(D["F"
+(S=Math.ceil(Math.random()*399))].innerHTML!=C);I(S,H)}function I(T,H){D["F"+T
].innerHTML=H}function Y(){if(K+1){P+=[-1,-20,1,20][K];X=D["F"+P].innerHTML;if(
X!=C)if(X!="▲"){alert("Over");return}else{M++;R(X)}I(Z[++L]=P,Q);I(Z[L-M],C)}
setTimeout(Y,99)}Q="<font color=green>●</font>",D=document.all,K=-1,M=1,L=0,Z=
[],C="□",S="";for(i=0;i<400;i++)S+=(i%20?"":"<br>")+"<span id=F"+i+">"+((i+1)%
20>1&&i>19&&i<379?C:"■")+"</span>";I("",S);R(Q);P=Z[0]=S;R("▲");Y();</script>

カラー蛇。


799 名前: 785 投稿日: 02/03/26 18:26
24時間と経たずに7行達成されるとは・・・。


800 名前: C_sugar 投稿日: 02/03/26 19:43
いやあ、凄い。
結構削れるものですな。


801 名前: デフォルトの名無しさん 投稿日: 02/03/26 22:46
HALWNULL(*USRCTL)
FHSTTRN IP E DISK
FLOGF O E DISK
C IF *NULLIN(SHTNK) = *ON
C EVAL LSHTNK_IND = *OFF
C EVAL LSHTNK_VAL = 0
C ENDIF


802 名前: 801 投稿日: 02/03/26 22:52
>>801はコンパイルエラーになる。正しくは

HALWNULL(*USRCTL)
FHSTTRN IP E DISK
FLOGF O E DISK
C IF *NULLIN(SHTNK) = *ON
C EVAL LSHTNK_IND = *OFF
C EVAL LSHTNK_VAL = 0
C ENDIF
C WRITE LOGR

だが8行になるので

HALWNULL(*USRCTL)
FHSTTRN IP E DISK
FLOGF O E DISK
C EVAL *IN01= *NULLIN(SHTNK)
C 01 EVAL LSHTNK_IND = *OFF
C 01 EVAL LSHTNK_VAL = 0
C WRITE LOGR
にする。(無理やりだな)


803 名前: デフォルトの名無しさん 投稿日: 02/03/27 12:56
#include <windows.h>
HWND h;HHOOK k;UINT c=0,d=0;EVENTMSG r[500],*y;void u(){UnhookWindowsHookEx(k);
k=0;}long WINAPI p(int n,UINT w,long l){(long)y=l;switch(n){case HC_ACTION:if(c
>498)u();r[c++]=*y;break;case HC_GETNEXT:*y=r[d];break;case HC_SKIP:if(c<++d){
u();d=0;}}return CallNextHookEx(k,n,w,l);}int WINAPI WinMain(HMODULE q,HMODULE,
LPSTR,int){MSG m;if(h=CreateWindow("BUTTON","",WS_VISIBLE,0,0,50,50,0,0,q,0)){k
=SetWindowsHookEx(WH_JOURNALRECORD,&p,q,0);while(GetMessage(&m,0,0,0))switch(m.
message){case WM_CLOSE:case WM_RBUTTONDOWN:return 0;case WM_LBUTTONDOWN:if(!d)k
=SetWindowsHookEx(WH_JOURNALPLAYBACK,&p,q,0);}}}

9行!
ずっと記録し続ける(使えない)Windows用マクロ。左クリックで再生、右クリックで終了です。


804 名前: デフォルトの名無しさん 投稿日: 02/03/27 18:34
縮んでいく過程が見ていて楽しいね
よく7行(しかもカラー!)になるもんだ


805 名前: デフォルトの名無しさん 投稿日: 02/03/27 20:48
>>803
それはもっと縮まりますね。
・ビットサイズによって宣言を統一
・switch:caseは使わない
・HC_ACTIONなどの識別子は数字に置き換える
でどうでしょう?

内容はコンパイルするのがたるいし使い方が解らなさそうなのでパス(^^;


806 名前: 803 投稿日: 02/03/28 17:59
感謝です。>805
ログを参考に少し実用的にしたら10行になってしもた。
Ctrl+Insertでマクロ記録開始、Ctrl+Pauseで記録終了、Ctrl+Deleteで再生です。
#include <windows.h>
HWND g;HHOOK h=0;int m[8],a=0,b;EVENTMSG*t,s[999];void u(){UnhookWindowsHookEx(
h);PostMessage(g,75,0,0);}long WINAPI p(int n,UINT w,long l){(long)t=l;if(!n)if
(a>998||LOBYTE(t->paramL)==3)u();else s[a++]=*t;if(n==1)*t=s[b];if(n==2)if(++b
>=a)u();return CallNextHookEx(0,n,w,l);}void r(int k){RegisterHotKey(g,k,2,k+45
);}int WINAPI WinMain(HMODULE i,HMODULE,LPSTR,int){WNDCLASS w={0,DefWindowProc,
0,0,i,0,0,0,0,"1"};RegisterClass(&w);g=CreateWindow("1",0,268959744,0,0,0,0,0,0
,i,0);r(0);r(1);while(GetMessage((MSG*)m,g,0,0)!=-1){if(m[1]==786&&!h){a*=m[2];
b=0;h=SetWindowsHookEx(m[2],p,i,0);SetWindowText(g,"Active");}else if(m[1]==75)
{h=0;SetWindowText(g,"--");}else DispatchMessage((MSG*)m);}return 0;}


807 名前: C言語超初心者 投稿日: 02/03/28 18:12
>>806
各ボタンに機能を持たせるのではなくて、あるボタンを選び、一律に

例えば、Insertボタンを押すたびに
マクロ記録開始→記録終了→再生→マクロ記録開始→記録終了→・・・
というようなものにすればもっと削れるのではないですか?


808 名前: C言語超初心者 投稿日: 02/03/28 18:15
あっ、すんません最低2つはボタンが必要ですね f^^)
記録開始、記録終了:Insert
再生:Delete
みたいに。


809 名前: 803 投稿日: 02/03/28 18:27
>807,808
どうもありがとうございます。ただCtrl+Pauseは特殊なシーケンスらしく、helpで
推奨されてたのと、ちょっと処理する場所が違うので難しいです。



810 名前: 805 投稿日: 02/03/28 19:36
トリッキーの1の砂嵐プログラムとか、昔のWindows7行を参考にしてみそ。
先人達の偉大な知恵が振り絞られているぞ。
確かDefWindowsProcをプロシージャに割り当てて、
メッセージループの中でコマンドを処理していたはず。

もう少し発想をかえると7行いきそうだな。がんばれ。
7行いったらコンパイルしてみる(笑)


811 名前: デフォルトの名無しさん 投稿日: 02/03/29 00:18
JavaScriptのカラー蛇すげえええ。参りました。


812 名前: 811 投稿日: 02/03/29 04:06
感動したのでライフゲーム作ってみますた

<body><tt id=F><script>function I(T,H){D["F"+T].innerHTML=H}function J(T){
return(T+1)%10>1&&T>9&&T<89&&Z[W+T]==E}function Y(){for(i=0;i<100;i++){X=Z[W+i];
I(i,Z[W+i]);T=J(i-11)+J(i-10)+J(i-9)+J(i-1)+J(i+1)+J(i+9)+J(i+10)+J(i+11);if(X==
E){if(T<=1||4<=T)X=C}else{if(T==3)X=E}Z[500-W+i]=X}W=500-W;setTimeout(Y, 200)}D=
document.all,Z=[],W=0,C="□",E="■",S ="";for(i=0;i<100;i++){S+=(i%10?"":"<br>")
+"<span id=F"+i+">□</span>";Z[i]=Z[500+i]=C}Z[53]=Z[54]=Z[55]=Z[64]=Z[74]=Z[84]
=E;I("",S);Y();</script>



813 名前: デフォルトの名無しさん 投稿日: 02/03/29 04:15
カラー蛇いいね。
暇つぶしのつもりがのめり込んじゃうよ!
マインスイーパより中毒性ある


814 名前: デフォルトの名無しさん 投稿日: 02/03/29 11:28
がんばってパート2まで維持するぞ!



815 名前: デフォルトの名無しさん 投稿日: 02/03/29 18:09
ネタがないので、ライフゲームを縮めてみた。
蛇もそうだが、見た目は <b> の方が良いと自分では思われ。1文字縮むしw

<body><b id=F><script>D=document.all,Z=[],C="□",E="■",S="",W=0;for(i=0;i<100;
i++){S+=(i%10?"":"<br>")+"<span id=F"+i+">□</span>";Z[i]=Z[500+i]=C}Z[53]=Z[54
]=Z[55]=Z[64]=Z[74]=Z[84]=E;I("",S);Y();function J(T){return(T+1)%10>1&&T>9&&T<
89&&Z[W+T]==E}function I(T,H){D["F"+T].innerHTML=H}function Y(){for(i=0;i<100;)
{I(i,X=Z[W+i]);for(j=T=0;j<8;j++)T+=J(i-(j%2?-1:1)*[11,10,9,1][j>>1]);Z[500+i++
-W]=X==E?T<2||T>3?C:X:T==3?E:X}W=500-W;setTimeout(Y,200)}</script>



816 名前: 815 投稿日: 02/03/29 18:29
<span>を使わなくてもいいね。


817 名前: 815 投稿日: 02/03/29 19:03
もっと縮められました。もうすぐ5行。

<body><b id=F><script>function Y(){for(i=0;i<100;){D["F"+i].innerHTML=X=Z[W+i]
for(j=T=0;j<8;j++){A=i-(j%2?-1:1)*[11,10,9,1][j>>1];T+=(A+1)%10>1&&A>9&&A<89&&Z
[W+A]==E}Z[500-W+i++]=X==E?T<2||T>3?C:X:T-3?X:E}W=500-W;setTimeout(Y,99)}C="□"
S="",Z=[],D=document.all,W=0;for(i=0;i<100;Z[i++]=Z[500+i]=C)S+=(i%10?"":"<br>"
)+"<b id=F"+i+">□</b>";D["F"].innerHTML=S;Z[53]=Z[54]=Z[55]=Z[64]=Z[74]=Z[84]=
E="■";Y()</script>



818 名前: 815 投稿日: 02/03/29 19:22
<script>function Y(){for(i=0;i<100;){document.all["F"+i].innerHTML=X=Z[W+i];for
(j=T=0;j<8;j++){A=i-[11,10,9,1,-1,-9,-10,-11][j];T+=(A+1)%10>1&&A>9&&A<89&&Z[W+
A]==E}Z[500-W+i++]=X==E?T<2||T>3?"□":X:T-3?X:E}W=500-W;setTimeout(Y,99)}Z=[];
for(W=i=0;i<100;Z[i++]=Z[500+i]="□")document.write((i%10?"":"<br>")+"<b id=F"+
i+">□</b>");Z[53]=Z[54]=Z[55]=Z[64]=Z[74]=Z[84]=E="■";Y()</script>



819 名前: デフォルトの名無しさん 投稿日: 02/03/29 19:35
(´-`).。oO(ライフゲームって何なんだろう・・・)


820 名前: デフォルトの名無しさん 投稿日: 02/03/29 19:51
http://home.highway.ne.jp/izushi/LifeGame/


821 名前: デフォルトの名無しさん 投稿日: 02/03/29 22:10
初期パターンをエディットできるといいね
2行以上あるから、できるかな


822 名前: 815 投稿日: 02/03/30 21:59
エディット付きライフゲーム
カーソル●を上下左右で移動、スペースで配置のトグル、リターンで実行です
場の大きさも14×14に広げました(端っこは異常地帯のままですが)

<body onKeyDown=K=event.keyCode><script>function Y(){if(G){for(i=0;i<196;Z[500-
W+i++]=X==E?T<2||T>3?"□":X:T-3?X:E)for(V(i,X=Z[W+i]),j=T=0;j<8;T+=(A+1)%14>1&&
A>13&&A<181&&Z[W+A]==E)A=i-[15,14,13,1,-1,-13,-14,-15][j++];W=500-W;}else{if(K
==13){G=1;}else{if(K==32){Z[P]==E?Z[P]="□":Z[P]=E;}else if(K+1){V(P,Z[P]);P+=[
-1,-14,1,14][K-37];V(P,C);}}K=-1;}setTimeout(Y,199)}function V(L,H){D.all["F"+L
].innerHTML=H}D=document,Z=[];for(G=W=i=0;i<196;Z[i++]=Z[500+i]="□")D.write(i%
14?"":"<br>","<b id=F"+i+">□</b>");E="■";K=-1;V(P=91,C="●");Y()</script>



823 名前: デフォルトの名無しさん 投稿日: 02/03/31 18:30
ネタ募集上げ


824 名前: デフォルトの名無しさん 投稿日: 02/03/31 18:49
7行GUIあぷりトカ


825 名前: デフォルトの名無しさん 投稿日: 02/03/31 19:04
>>823
JPEG圧縮つくろうぜ


826 名前: デフォルトの名無しさん 投稿日: 02/03/31 19:17
>>825
JPEG変換は、>>782 さんができているとかいないとか。


827 名前: デフォルトの名無しさん 投稿日: 02/03/31 19:27
>>824
GUIだけなら、今までそれなりにあった。
もうちょっと具体的になると、作品を作りやすいかも。

JavaScript でもぐら叩き、ってどですか?(ネタ)
作り始めてみたんですが、難航中。



828 名前: デフォルトの名無しさん 投稿日: 02/03/31 23:23
テトリス。言語を問わず7行で作れるかな?
Vzのマクロだと可能だけど(笑)


829 名前: デフォルトの名無しさん 投稿日: 02/03/31 23:31
>>828
ぜひあぷしてくれ!


830 名前: デフォルトの名無しさん 投稿日: 02/04/01 10:36
>>829
Vz買ったらテトリスマクロついてくるよ
マスターユーザーならみんな持ってるはず


831 名前: 829 投稿日: 02/04/01 12:03
>>830
Vz持ってないから、しらなかたよ。
調べたらテトリス以外にもいくつかマクロゲームがあたみたいね。
てっきり、>>828 さんが作ったかとおもた。

作成にチャレンジしてみるか・・・
普通に作って10行くらいになれば、きっと縮められる。


832 名前: ネタ 投稿日: 02/04/02 20:20
掲示板を作成して下さい。
仕様はお任せします。


833 名前: デフォルトの名無しさん 投稿日: 02/04/02 21:26
>>832
掲示板作るだけなら、7行で余裕だよね。その辺がネタ?


834 名前: デフォルトの名無しさん 投稿日: 02/04/03 00:03
面白そうなので,参戦.

import java.net.*;import java.io.*;class P extends Thread{public void run(){try{
int d;while((d=i.read())!=-1)o.write(d);}catch(Exception e){}}P(InputStream I,
OutputStream O){i=I;o=O;}OutputStream o;InputStream i;public static void main(
final String[]a)throws Exception{new Thread(){public void run(){try{ServerSocket
s=new ServerSocket(8080);for(;;){Socket n=s.accept(),o=new Socket(a[0],Integer.
parseInt(a[1]));new P(o.getInputStream(),n.getOutputStream()).start();new P(n.
getInputStream(),o.getOutputStream()).start();}}catch(Exception e){}}}.start();}}

うがぁ.あと1文字.
プロキシ.

java P host port



835 名前: 834 投稿日: 02/04/03 00:30
import java.net.*;import java.io.*;class P extends Thread{public void run(){try{
int d;while((d=i.read())!=-1)o.write(d);i.close();o.close();}catch(Exception e){
}}public static void main(final String[]a)throws Exception{ServerSocket s=new
ServerSocket(8080);for(;;){Socket n=s.accept(),o=new Socket(a[0],Integer.
parseInt(a[1]));new P(o.getInputStream(),n.getOutputStream()).start();new P(n.
getInputStream(),o.getOutputStream()).start();}}P(InputStream I,OutputStream O)
{i=I;o=O;}OutputStream o;InputStream i;}

激しく勘違い.
でけた.どないや.


836 名前:        投稿日: 02/04/03 02:15
大体見ればわかるんですが、
言語を書いてくれるとうれしい。


837 名前: デフォルトの名無しさん 投稿日: 02/04/03 09:30
春だねぇ。。


838 名前: 期待あげ   投稿日: 02/04/03 12:46
あげてみる


839 名前: 834 投稿日: 02/04/04 00:09
>>836
Java なり.

import java.net.*;import java.io.*;class P extends Thread{public void run(){try{
for(int d;(d=i.read())!=-1;)o.write(d);i.close();o.close();}catch(Exception e){}
}P(InputStream I,OutputStream O){i=I;o=O;}public static void main(final String[]
a)throws Exception{ServerSocket s=new ServerSocket(a.length>2?Integer.parseInt(a
[2]):8080);for(;;){Socket n=s.accept(),o=new Socket(a[0],Integer.parseInt(a[1]))
;new P(o.getInputStream(),n.getOutputStream()).start();new P(n.getInputStream(),
o.getOutputStream()).start();}}OutputStream o;InputStream i;}

改良版.
> java P host port [local port]
なり.


840 名前: デフォルトの名無しさん 投稿日: 02/04/04 00:21
perl BBS, データファイル d 必要。date 付き。
FreeBSD 4.3 + Apache 1.3.24 で動作確認。
>>832
こんなもんでいいの?

--- a.cgi ---
#!/usr/bin/perl
print"content-type: text/html\n\n<html><form method='GET' action='a.cgi'>\
<input name=t><br>\n";$s=$ENV{"QUERY_STRING"};open(D,"d");@d=<D>;unless($s
eq""){($x,$a)=split("=",$s);
$a=~s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c",hex($1))/ge;
chomp($a);unless($a eq""){open(X,"date|");$x=<X>;open(D,">data");$x.=$a.
"<br>\n";print D "$x@d";}}print"$x@d";



841 名前: デフォルトの名無しさん 投稿日: 02/04/04 08:42
>>832 >>840
漏れもちょっとやってみた。データファイルはa。

#!/usr/bin/perl
$_=$ENV{QUERY_STRING};y/&=/\0\0/;s/%(..)/pack H2,$1/eg;s/\n/<br>/g;y/+/ /;s/</
</g;s/>/>/;s/&//g;print"Content-type:text/html\n\n<html><body>";open
O,'>>a';%h=split/\0/;print O"$h{a}\t$h{b}\n"if$_;close O;open I,a;while(<I>){s
/\t|$/<br>/g;s/^/$. 名前:/;print}print"<form>名前<input value='名無しさん'name=
a><br><textarea name=b></textarea><input type=submit></form><br></body></html>"



842 名前: デフォルトの名無しさん 投稿日: 02/04/04 10:11
7行BBS
その昔、WebProg板で開発された物。
#!/usr/bin/perl
%f=map{tr/+/ /;s/%(..)/pack"H2",$1/eg;s/</</g;s/>/>/g;s/"/"/g;$_}
split/[&=]/,$ENV{QUERY_STRING};$f{n}||='名無し';open F,"+<bbs.dat";flock F,2;
@e=<F>;if($f{m}){seek F,0,0;print F @e=("$f{n}:$f{m}<br>\n",@e)[0..99]}
print qq{content-type:text/html\n\n<title>BBS</title><h1>BBS</h1><form
action="bbs.cgi"><p>名前<input name=n value="$f{n}"><br>記事<input name=m
size=50><br><input type=submit></p></form><hr><p>@e</p><hr>};



843 名前: 投稿日: 02/04/05 19:49
パックマン。
7行なんてとても無理です。というわけで16行。
16行なんて邪道だと思いますが、短くできるところがあったら教えてください。

敵の動きの深いループ文を何とかしたいけど・・・
あとルーチン化できると思うけど、できたとしても5行くらいしか短くならないなぁ・・・

#--- packman.pl ---#
$w="#";$d=".";$s=" ";$p="P";$e="E";$o=$w x10;$m=$d x8;$b="$o\n";for($c=1;$c<=8
;$c++){$b="$b$w$m$w\n";}$b="$b$o\n";$y=0;$c=0;$l=12;$lc=19;P:while($b=~
/[$d]+/og){substr($b,$l,1,$p);substr($b,$lc,1,$e);print$b;print"YOU:$y\n";
print"COM:$c\n";substr($b,$l,1,$s);substr($b,$lc,1,$s);$m=<>;chop($m);if($m eq
"1"){$l=$l-1;$i=substr($b,$l,1);if($i eq$w){$l=$l+1;}}elsif($m eq"2"){if($l<=
86){$l=$l+11;}}elsif($m eq"3"){if($l>=20){$l=$l-11;}}elsif($m eq"4"){$l=$l+1;
$i=substr($b,$l,1);if($i eq$w){$l=$l-1;}}elsif($m eq"e"){last P;}$i=substr($b,
$l,1);if($i eq$d){$y=$y+1;}elsif($i eq$e){last P;}$r=int(rand(4));if($r<=2){$v
=$lc-1;$i=substr($b,$v,1);if($i eq$d){$lc=$v;}else{$v=$lc+1;$i=substr($b,$v,1)
;if($i eq$d){$lc=$v;}else{$v=$lc-11;$i=substr($b,$v,1);if($i eq$d){$lc=$v;}
else{$lc=$lc+11;$i=substr($b,$lc,1);if($i ne$d){$lc=$lc-11;$r=3;}}}}}if($r==3)
{$m=int(rand(6));if($m>=4){$lc=$lc-1;$i=substr($b,$lc,1);if($i eq$w){$lc=$lc+2
;}}elsif($m<=3&&$m>=2){if($lc>=86){$lc=$lc-11;}else{$lc=$lc+11;}}elsif($m==1){
if($lc<=19){$lc=$lc+11;}else{$lc=$lc-11;}}elsif($m==0){$lc=$lc+1;$i=substr($b,
$lc,1);if($i eq$w){$lc=$lc-2;}}}$i=substr($b,$lc,1);if($i eq$d){$c=$c+1;}elsif
($i eq$p){last P;}}

########################################
操作方法
1:左、2:下、3:上、4:右、e:終わる
で、敵に当たったら終わり。
########################################


844 名前: デフォルトの名無しさん 投稿日: 02/04/06 00:14
13行(詰めて書いただけ)

$w="#";$d=".";$s=" ";$o=$w x10;$m=$d x8;$b="$o\n";for($c=0;$c<8;$c++){$b.="$w".
"$m$w\n";}$b.="$o\n";$y=$c=0;P:while($b=~/[$d]+/og){substr($b,$l=12,1,"P");
substr($b,$k=19,1,"E");print$b;print"YOU:$y\n";print"COM:$c\n";substr($b,$l,1,
$s);substr($b,$k,1,$s);$m=<>;chop$m;if($m==1){$i=substr($b,--$l,1);$l++if($i eq
$w);}if($m==2){$l+=11if($l<87);}if($m==3){$l-=11if($l>19);}if($m==4){$i=substr(
$b,++$l,1);$l--if($i eq$w);}last P if($m eq"e");$i=substr($b,$l,1);$y++if($i eq
$d);last P if($i eq"E");$r=int(rand(4));if($r<3){if(substr($b,$v=$k-1,1)eq$d){
$k=$v;}else{if(substr($b,$v=$k+1,1)eq$d){$k=$v;}else{if(substr($b,$v=$k-11,1)eq
$d){$k=$v;}else{if(substr($b,$k+=11,1)ne$d){$k-=11;$r=3;}}}}}if($r==3){$m=int(
rand(6));if($m>=4){$i=substr($b,--$k,1);$k+=2if($i eq$w);}elsif($m<=3&&$m>=2){
if($k>=86){$k-=11;}else{$k+=11;}}elsif($m==1){if($k<=19){$k+=11;}else{$k-=11;}}
elsif($m==0){$i=substr($b,++$k,1);$k-=2if($i eq$w);}}$i=substr($b,$k,1);$c++if(
$i eq$d);last P if($i eq"P");}


845 名前: デフォルトの名無しさん 投稿日: 02/04/06 00:24
↑最後の最後で間違った、鬱だ・・・

$w="#";$d=".";$s=" ";$o=$w x10;$m=$d x8;$b="$o\n";for($c=0;$c<8;$c++){$b.="$w".
"$m$w\n";}$b.="$o\n";$y=$c=0;$l=12;$k=19;P:while($b=~/[$d]+/og){substr($b,$l,1,
"P");substr($b,$k,1,"E");print$b;print"YOU:$y\n";print"COM:$c\n";substr($b,$l,1
,$s);substr($b,$k,1,$s);$m=<>;chop$m;if($m==1){$i=substr($b,--$l,1);$l++if($i
eq$w);}if($m==2){$l+=11if($l<87);}if($m==3){$l-=11if($l>19);}if($m==4){$i=
substr($b,++$l,1);$l--if($i eq$w);}last P if($m eq"e");$i=substr($b,$l,1);$y++
if($i eq$d);last P if($i eq"E");$r=int(rand(4));if($r<3){if(substr($b,$v=$k-1,1
)eq$d){$k=$v;}else{if(substr($b,$v=$k+1,1)eq$d){$k=$v;}else{if(substr($b,$v=$k-
11,1)eq$d){$k=$v;}else{if(substr($b,$k+=11,1)ne$d){$k-=11;$r=3;}}}}}if($r==3){
$m=int(rand(6));if($m>=4){$i=substr($b,--$k,1);$k+=2if($i eq$w);}elsif($m<=3&&
$m>=2){if($k>=86){$k-=11;}else{$k+=11;}}elsif($m==1){if($k<=19){$k+=11;}else{$k
-=11;}}elsif($m==0){$i=substr($b,++$k,1);$k-=2if($i eq$w);}}$i=substr($b,$k,1);
$c++if($i eq$d);last P if($i eq"P");}


846 名前: 現在10行 投稿日: 02/04/06 02:30
ヽ(`Д´)ノ 今日のところはこのくらいで勘弁しておいてやる

sub v{substr$b,$_[0],1}sub u{substr$b,$_[0],1,$_[1]}@f=(sub{exit},sub{$i=v--$l;
$l++if"#"eq$i},sub{$l+=11if$l<87},sub{$l-=11if$l>19},sub{$i=v++$l;$l--if"#"eq$i
});$o="#"x10;$m="."x8;$b="$o\n".("#$m#\n"x8)."$o\n";$y=$c=0;$l=12;$k=19;while(
$b=~/[.]+/g){u$l,"P";u$k,"E";print"${b}YOU:$y\nCOM:$c\n";u$l," ";u$k," ";$f[<>%
5]();$i=v$l;$y++if"."eq$i;exit if"E"eq$i;$r=int rand 4;if($r<3){if("."eq v$v=$k
-1){$k=$v}else{if("."eq v$v=$k+1){$k=$v}else{if("."eq v$v=$k-11){$k=$v}else{if(
"."eq v$k+=11){$k-=11;$r=3}}}}}if($r==3){$m=int rand 6;if($m>3){$i=v--$k;$k+=2
if("#"eq$i)}elsif($m>1){if($k>85){$k-=11}else{$k+=11}}elsif($m==1){if($k<20){$k
+=11}else{$k-=11}}elsif($m==0){$i=v++$k;$k-=2if"#"eq$i}}$i=v$k;$c++if"."eq $i;
exit if"P"eq$i}


847 名前: デフォルトの名無しさん 投稿日: 02/04/06 03:01
9行、おやすみなさい

$w='#';$d='.';$s=' ';$p='P';$e='E';$o=$w x10;$m=$d x8;$b="$o\n".("$w$m$w\n" x8)
."$o\n";$y=$c=0;$l=12;$k=19;while($b=~/[$d]+/){t($l,$p);t($k,$e);print$b."YOU:".
"$y\nCOM:$c\n";t($l,$s);t($k,$s);chop($m=<>);$l+=u(--$l)eq$w if$m==1;$l+=$l<87?
11:0if$m==2;$l-=$l>19?11:0if$m==3;$l-=u(++$l)eq$w if$m==4;exit if$m eq'e';$i=u(
$l);$y++if$i eq$d;exit if$i eq$e;if(int rand 4!=3){if(u($k-1)eq$d){$k--;}elsif(u
($k+1)eq$d){$k++;}elsif(u($k-11)eq$d){$k-=11;}elsif(u($k+11)eq$d){$k+=11;}}else{
$m=int rand 6;$k-=u(++$k)eq$w?2:0if$m==0;$k+=$k<20?11:-11if$m==1;$k+=$k>85?-11:
11if$m==2||$m==3;$k+=u(--$k)eq$w?2:0if$m>=4;}$i=u($k);$c++if$i eq$d;exit if$i eq
$p;}sub u{substr$b,$_[0],1;}sub t{substr$b,$_[0],1,$_[1]}


848 名前: ↑文字数間違えた(鬱) 投稿日: 02/04/06 03:04
でも、9行です

$w='#';$d='.';$s=' ';$p='P';$e='E';$o=$w x10;$m=$d x8;$b="$o\n".("$w$m$w\n" x8)
."$o\n";$y=$c=0;$l=12;$k=19;while($b=~/[$d]+/){t($l,$p);t($k,$e);print$b."YOU:"
."$y\nCOM:$c\n";t($l,$s);t($k,$s);chop($m=<>);$l+=u(--$l)eq$w if$m==1;$l+=$l<87
?11:0if$m==2;$l-=$l>19?11:0if$m==3;$l-=u(++$l)eq$w if$m==4;exit if$m eq'e';$i=u
($l);$y++if$i eq$d;exit if$i eq$e;if(int rand 4!=3){if(u($k-1)eq$d){$k--;}elsif
(u($k+1)eq$d){$k++;}elsif(u($k-11)eq$d){$k-=11;}elsif(u($k+11)eq$d){$k+=11;}}
else{$m=int rand 6;$k-=u(++$k)eq$w?2:0if$m==0;$k+=$k<20?11:-11if$m==1;$k+=$k>85
?-11:11if$m==2||$m==3;$k+=u(--$k)eq$w?2:0if$m>=4;}$i=u($k);$c++if$i eq$d;exit
if$i eq$p;}sub u{substr$b,$_[0],1;}sub t{substr$b,$_[0],1,$_[1]}


849 名前: 846 投稿日: 02/04/06 03:29
後半の敵アルゴリズムを整理したら簡単に達成できちゃったよ ヽ(`Д´)ノ ウワァァン
あと>>846でしちゃったエンバグも潰した

sub v{substr$b,$_[0],1}sub u{substr$b,$_[0],1,$_[1]}$o="#"x10;$m="."x8;$y=$c=0;
@f=map{eval"sub{$_}"}qw/exit $i=v--$l;$l++if"#"eq$i $l+=11if$l<87 $l-=11if$l>19
$i=v++$l;$l--if"#"eq$i/;$b="$o\n".("#$m#\n"x8)."$o\n";$l=12;$k=19;while($b=~/\.
/x){u$l,"P";u$k,"E";print"${b}YOU:$y\nCOM:$c\n";u$l," ";u$k," ";$f[<>%5]();$i=v
$l;$y++if"."eq$i;exit if"E"eq$i;if((int rand 4)<3and("."eq v$v=$k-1or"."eq v$v=
$k+1or"."eq v$v=$k-11or"."eq v$v=$k+11)){$k=$v;}else{$d=(1,-11,11,11,-1,-1)[int
rand 6];$k+=v($k+$d)eq"#"?-$d:$d;}$i=v$k;$c++if"."eq $i;exit if"P"eq$i}


850 名前: デフォルトの名無しさん 投稿日: 02/04/06 06:43
このスレの人達ってすごい。尊敬。


851 名前: デフォルトの名無しさん 投稿日: 02/04/06 10:24
すごい!age です。
私も JS にて参加しようかな。


852 名前: 846 投稿日: 02/04/06 15:22
6行。粘着でゴメン ヽ(`Д´)ノ ウワァァン
でも表示と終了判定のタイミングを変えたので遊びやすくなった。

sub v{substr$b,$v=$_[0],1}sub u{substr$b,$_[0],1,$_[1]}$y=$c=0;$l=12;$k=19;@n=(
-1,11,-11,1,1,-11);$o="#"x10;$m="."x8;$b="$o\n".("#$m#\n"x8)."$o\n";while(){u$l
,"P";u$k,"E";print"${b}YOU:$y\nCOM:$c\n";exit if$l==$k or$b!~/\./;u$l," ";$m=<>
%5;exit if!$m;$l=$v if"#"ne v$l+$n[$m-1];$y++if"."eq v$l;u$k," ";next if$l==$k;
if((int rand 4)<3and("."eq v$k-1or"."eq v$k+1or"."eq v$k-11or"."eq v$k+11)){$k=
$v;}else{$d=$n[int rand 6];$k+=v($k+$d)eq"#"?-$d:$d;}$c++if"."eq v$k;}


853 名前: 任意たん 投稿日: 02/04/06 19:03
>>852
ヘタレなので20byte縮めるのがやっとです。

sub v{substr$b,$v=$_[0],1}sub u{substr$b,$_[0],1,$_[1]}$y=$c=0;$l=12;$k=19;@n=(
-1,11,-11,1,1,-11);$o='#'x10 ."\n";$m='.'x8;$b=$o.("#$m#\n"x8).$o;while(){u$l,
'P';u$k,'E';print"${b}YOU:$y\nCOM:$c\n";exit if$l==$k||$b!~/\./;u$l,' ';$m=<>%5
||exit;$l=$v if'#'ne v$l+$n[$m-1];$y++if'.'eq v$l;u$k,' ';$l==$k&&next;$c++if v
((int rand 4)<3&&('.'eq v$k-1or'.'eq v$k+1or'.'eq v$k-11or'.'eq v$k+11)?($k=$v)
:($k+=v($k+($d=$n[int rand 6]))eq'#'?-$d:$d))eq'.'}

2行目勿体ない。


854 名前: デフォルトの名無しさん 投稿日: 02/04/06 19:09
7行プログラミング
端から見てるとすごそうだけど、実は全然すごくない罠
by過去参加者


855 名前: デフォルトの名無しさん 投稿日: 02/04/06 20:46
>>854
参加者なのに?

わちきは、もう感激だらけですよ。
「もうだめだ縮まらない」ってときにその解法が見える瞬間や、
「ほら」と解を出されたときなんか。


856 名前: デフォルトの名無しさん 投稿日: 02/04/06 21:08
>>853からさらに-12bytes

sub v{substr$b,$v=$_[0],1}sub u{substr$b,$_[0],1,$_[1]}sub f{'.'eq v$_[0]}$y=$c
=0;$l=12;$k=19;@n=(-1,11,-11,1,1,-11);$o='#'x10;$m='.'x8;$b="$o\n".("#$m#\n"x8)
."$o\n";while(){u$l,'P';u$k,'E';print"${b}YOU:$y\nCOM:$c\n";exit if$l==$k||$b!
~/\./;u$l,' ';exit if!($m=<>%5);$l=$v if'#'ne v$l+$n[$m-1];$y++if f$l;u$k,' ';
next if$l==$k;$c++if f($k=int rand 4<3&&(f$k-1||f$k+1||f$k-11||f$k+11)?$v:$k+(v
($k+($d=$n[int rand 6]))eq'#'?-$d:$d));}


857 名前: 846 投稿日: 02/04/06 23:23
あとちょっとで5行に入れそうなんだけど
もうやめようっと… ヽ(`Д´)ノ

sub u{@b[$l,$k]=@_}sub v{$b[$v=$_[0]]}sub w{'.'eq&v}$y=$c=0;$l=12;$k=19;@n=(-1,
11,-11,1,1,-11);$o="#"x10 ."\n";$m="."x8;@b=split"",$o.("#$m#\n"x8).$o;while(){
u"P","E";print($b=join("",@b)."YOU:$y\nCOM:$c\n");exit if$l==$k||$b!~/\./;u" ",
" ";$m=<>%5||exit;$y++if'#'ne v($l+$n[$m-1])&&w$l=$v;w($k=int rand 4<3&&(w$k-1
or w$k+1or w$k-11or w$k+11)?$v:$k+(v($k+($d=$n[int rand 6]))eq'#'?-$d:$d))&&$c
++if$l!=$k} 


858 名前: デフォルトの名無しさん 投稿日: 02/04/06 23:50
Cはきついな。
#includeでどうしても改行しないといけないから。


あ、そうだ。プログラムを他のファイルに書いて、それをインクルードするってのはどうだ?1行で済むぞ(ワラ
.cファイルをインクルードするのはよくないけど。


859 名前: デフォルトの名無しさん 投稿日: 02/04/06 23:52
>>858
インクルードしなくてもいい例は過去に出てるだろ


860 名前: デフォルトの名無しさん 投稿日: 02/04/06 23:55
>>859
標準ライブラリを使えないじゃん・・・・


861 名前: デフォルトの名無しさん 投稿日: 02/04/06 23:56
>>858
#include 含めると6行以下になってきますが、
その制限によって多言語よりもすごいプログラムが出現するのだと思われ
正直ハフマン符号や、range encoder を6行+1で作る人がいるとは思わなんだ


862 名前: デフォルトの名無しさん 投稿日: 02/04/06 23:57
>>860
プロトタイプを自分で書くんだよ。
>>537にある


863 名前: デフォルトの名無しさん 投稿日: 02/04/06 23:58
>>862
なるほど。
なんちゅう荒技だ。
荒技を使わないとできないことだろうけど。


864 名前: 843 投稿日: 02/04/07 01:06
>>844 >>845 >>846 >>847 >>848 >>849 >>852 >>853 >>856 >>857
うわっ!すごいレス。
ちょっとがんばってみたけど、
僕の実力はまだまだこんなものです。
みなさんありがとうございました。
すごく勉強になりました。


865 名前: 843 投稿日: 02/04/07 01:09
すいません、あと少し。

>>844さんが詰めて書いただけでも、
3行縮まってる時点で僕はまだ甘いです。


866 名前: 853 投稿日: 02/04/07 01:15
>>857
やっぱりマップを配列にしたのね。同じ事考えてた。

sub u{@b[$l,$k]=@_}sub v{$b[$v=$_[0]]}sub w{'.'eq&v}$y=$c=0;$l=12;$k=19;$o='#'x
10 ."\n";$m='.'x8;@b=split'',$o.("#$m#\n"x8).$o;while(@n=(-1,11,-11,1,1,-11)){u
'P','E';print@b,"YOU:$y\nCOM:$c\n";exit if$l==$k||$y+$c>61;u' ',' ';$m=<>%5||
exit;$y++if'#'ne v($l+$n[$m-1])&&w$l=$v;w($k=int rand 4<3&&(w$k-1or w$k+1or w$k
-11or w$k+11)?$v:$k+(v($k+($d=$n[int rand 6]))eq'#'?-$d:$d))&&$c++if$l!=$k}

5 行できたよー。


867 名前: デフォルトの名無しさん 投稿日: 02/04/07 05:19
がいしゅつ?

http://www.geocrawler.com/archives/3/2311/2002/2/200/7793896/ から
/*****************************************************************************
Decode DVD's in a few lines of C .....
******************************************************************************/
/* efdtt.c Author: Charles M. Hannum <<EMAIL: PROTECTED>> */
/* */
/* Usage is: cat title-key scrambled.vob | efdtt >clear.vob */

#define K(i)(x[i]^s[i+84])<
unsigned char x[5],y,z,s[2048];main(n){for(read(0,x,5);read(0,s,n=2048);write(1
,s,n))if(s[y=s[13]%8+20]/16%4==1){int i=K(1)17^256+K(0)8,k=K(2)0,j=K(4)17^K(3)9
^k*2-k%8^8,a=0,b=0,c=26;for(s[y]-=16;--c;i/=2,j/=2)a=a*2^i&1,b=b*2^j&1;for(j=
127;++j<n;c=z+c>y)a^=a>14,a=a>8^(y=a^a*8^a<6)<9,b=b>8^(z=b^b/8^b>4^b>12)
<17,i=s[j],i="7Wo~'G_\216"[i&7]+2^"cr3sfw6v;*k+>/n."[i>4]*2^i*257/8,s[j]=i^(i
&i*2&34)*6^z+c+~y;}}




868 名前: デフォルトの名無しさん 投稿日: 02/04/07 09:39
暇つぶしに上のソースを眺めてみたんだが、得体の知れないとこを見つけてしまった。
知ってる奴がいたら教えてくれ。
上のソースで「i>4」となっている所って、16バイトの配列の添字に1ビット分しか
使用していないみたいなんだけど、どーして? i>>4 の typo ?


869 名前: 857 投稿日: 02/04/07 11:51
>>866
試したんだけど自分のPerl 5.6だとこう修正しないと動かなかったYO ヽ(`Д´)ノ
でも5行は変わらず。後半3行はもったいないけど、まぁ4行は流石に無理だよね

sub u{@b[$l,$k]=@_}sub v{$b[$v=$_[0]]}sub w{'.'eq&v}$y=$c=0;$l=12;$k=19;$o='#'x
10 ."\n";$m='.'x8;@b=split'',$o.("#$m#\n"x8).$o;while(@n=(-1,11,-11,1,1,-11)){u
"P","E";print@b,"YOU:$y\nCOM:$c\n";exit if$l==$k||$y+$c>61;u" "," ";$m=<>%5||
exit;$y++if'#'ne v($l+$n[$m-1])&&w$l=$v;w($k=int rand 4<3&&(w$k-1or w$k+1or w
$k-11or w$k+11)?$v:$k+(v($k+($d=$n[int rand 6]))eq'#'?-$d:$d))&&$c++if$l!=$k}


870 名前: デフォルトの名無しさん 投稿日: 02/04/07 13:54
全行きっちり使い果たして>>869から-5bytes

sub u{@b[$l,$k]=@_}sub v{$b[$v=$_[0]]}sub w{'.'eq&v}$y=$c=0;$l=12;$k=19;$o='#'x
10 ."\n";$m='.'x8;@b=split'',$o.("#$m#\n"x8).$o;while(@n=(-1,11,-11,1,1,-11)){u
"P","E";print@b,"YOU:$y\nCOM:$c\n";exit if$l==$k||$y+$c>61;u" "," ";$y++if'#'ne
v($l+$n[($m=<>%5||exit)-1])&&w$l=$v;w($k=int rand 4<3&&(w$k-1||w$k+1||w$k-11||w
$k+11)?$v:$k+(v($k+($d=$n[int rand 6]))eq'#'?-$d:$d))&&$c++if$l!=$k}


871 名前: デフォルトの名無しさん 投稿日: 02/04/07 14:04
素朴な疑問なんですが、

$a=$b?$c:-$c; # $bが真のとき $a=$c, $bが偽のとき $a=-$c

こういうロジック部分を1byteでも縮めて書けないですかね?


872 名前: 869 投稿日: 02/04/07 14:44
>>870
それだとオリジナルプログラムの意味が違ってきちゃう ヽ(`Д´)ノ

> rand 4<3&&(w$k-1||w$k+1||w$k-11||w$k+11)

の部分が正しく動かない。rand 4<3となってる3を4にして、敵の挙動を比較してみて
よ。気持ちはわかるけど最低限次のように書く必要が(今のところ)ある。

> rand 4<3&&(w$k-1or w$k+1or w$k-11or w$k+11)


873 名前: 870 投稿日: 02/04/07 14:58
>>872
スマソ。実をいうと全くのPerl初心者です。
or と || は同値だと思ってました。


874 名前: デフォルトの名無しさん 投稿日: 02/04/07 20:56
>>871
そういう局所的な短縮ができる例はあまり無いだろ


875 名前: デフォルトの名無しさん 投稿日: 02/04/07 21:15
Private Declare Function GetAsyncKeyState% Lib "user32" (ByVal k&)
Private Declare Function GetTickCount& Lib "kernel32" ()
Private Declare Function BitBlt& Lib "gdi32" (ByVal a&,ByVal x&,ByVal y&,ByVal w&,ByVal h&,ByVal b&,ByVal c&,ByVal d&,ByVal r&)
Private Sub Form_Paint()
g=32768:Me.Cls:Me.ScaleMode=3:Me.Scale (0,0)-(320,280):Me.Line (0,0)-(320,30),_
g,BF:Me.Line (0,250)-(320,280),g,BF:Randomize
a:
y=140:Do:DoEvents:If GetTickCount()-t<15 Then GoTo a:
i=i+1:If i <= 50 Then y=140:b=0:c=0:d=30:e=d
r=r+1:j=j+1:f=f+1:h=h+1:t=GetTickCount()
BitBlt Me.hDC,0,0,319,280,Me.hDC,1,0,vbSrcCopy
If GetAsyncKeyState(vbKeyEscape) Then End
If GetAsyncKeyState(vbKeySpace) Then c=c+2:k=c/40*1.5:b=b+k Else c=c-2:_
k=c/40*1.5:b=b+k
y=y-b:If f=100 Then e=d:d=Int(Rnd()*40)+20:f=0
l=(d-e)/100*f+e:Me.Line (319,0)-(320,l),g,BF
Me.Line (319,220+l)-(320,280),g,BF:p=150-Int(i/80):If p<30 Then p=30
If h=p Then s=Int(Rnd()*130)+l
If h>p Then Me.Line (319,s)-(320,s+90),g,BF
If h>p+8 Then h=0
If Point(160,y)=g Then MsgBox r:Form_Paint
If Point(161,y)=g Then MsgBox r:Form_Paint
If Point(162,y)=g Then MsgBox r:Form_Paint
Me.Line (160,y)-(162,y+2),vbWhite,BF:If j=2 Then j=0:Me.Caption="Score :" & r _
& " pts."
Loop
End Sub

VBだと全然縮まんない。1236バイト。よくあるゲームです。
鬱だ死のう


876 名前: デフォルトの名無しさん 投稿日: 02/04/07 21:28
↑:Spaceキーで上に上がります。Escで終了です。


877 名前: デフォルトの名無しさん 投稿日: 02/04/07 21:39
#!/usr/bin/perl
open(A,"+<a.log");$a=<A>;++$a;seek(A,0,0);print A $a;
print"Content-type: text/html\n\n";print $a;exit;

もとが短いから


878 名前: デフォルトの名無しさん 投稿日: 02/04/07 21:40
そういえばa.log用意しておいて下さい


879 名前: 853 投稿日: 02/04/08 01:54
しつこいがパックマンを一から作り直してみた。
操作方法は上のと一緒。

Usage: perl pacman map.txt

sub u{$m[$_[0]]=$_[1]}sub w{$_[0]+=$c if$_[1]==1&&$_[0]%$c==1;$_[0]-=$c if$_[1]
==4&&$_[0]%$c==0;$m[$_[0]+$n[$_[1]]]eq'#'or$_[0]+=$n[$_[1]]}@e=(25,45,439,459);
$p=357;@g=('.')x4;@m=('',map{chomp;split//}<>);$c=23;$l=21;sub e{exit}while(@n=
(0,-1,$c,-$c,1)){u$p,'P';u$e[$_],'E'for 0..3;$e=grep/\./,@m;print$m[$_],($_%$c?
'':"\n")for 1..@m;print"REST:$e\n> ";e if!$e;$p==$_&&e for @e;u$p,' ';u$e[$_],
$g[$_]for 0..3;$g=<>%5||e;w($p,$g);for(0..3){$p==$e[$_]&&next;w($e[$_],1+int
rand 4);$g[$_]=$m[$e[$_]]}}

---map.txt----
#######################
#..........#..........#
#.###.####.#.####.###.#
#.....................#
#.###.#.#######.#.###.#
#.....#....#....#.....#
#####.#### # ####.#####
#.# #.#
#####.# ####### #.#####
. # # .
#####.# ####### #.#####
#.# #.#
#####.# ####### #.#####
#..........#..........#
#.###.####.#.####.###.#
#...#.............#...#
###.#.#.#######.#.#.###
#.....#....#....#.....#
#.########.#.########.#
#.....................#
#######################



880 名前: 853 投稿日: 02/04/08 07:12
ちょこっと改良。
http://boobar.hoops.ne.jp/pacmaso.tar.gz
まだ余裕あるんで、パワーエサ付けるなり敵のルーチンいぢるなり、
他言語でやるなり、よろ。


881 名前: SYN ◆mMJ0UaoA 投稿日: 02/04/11 05:21
7行を遥かにオーバー(13行)しているSHA1です。誰か最適化して〜。言語はVC++。

#include <string>
typedef size_t D;typedef char C;C z,y,i,b,n=0,c[8];D l=0,h=0,*p,B[16],W[80],I[5
]={0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0},H[85];E(C*d,C*s){z=4
;while(z--)*d++=*(s--+3);}D R(D a,D s){return(a<<s)|(a>>32-s);}X(D k){*p+=R(p[1
],5)+p[5]+W[i]+k;p[2]=R(p[2],30);p--;}Y(D k){*p=p[2]^p[3]^p[4];X(k);}G(){for(i=
0;i<16;i++)E((C*)&W[i],(C*)&B[i]);for(i=16;i<80;i++)W[i]=R(W[i-3]^W[i-8]^W[i-14
]^W[i-16],1);for(i=0;i<5;i++)H[80+i]=I[i];p=&H[79];for(i=0;i<20;i++)*p=(p[2]&(p
[3]^p[4]))^p[4],X(0x5a827999);for(i=20;i<40;i++)Y(0x6ed9eba1);for(i=40;i<60;i++
)*p=(p[2]&(p[3]|p[4]))|(p[3]&p[4]),X(0x8f1bbcdc);for(i=60;i<80;i++)Y(0xca62c1d6
);for(i=0;i<5;i++)I[i]+=p[i+1];}L(C c){l+=8;if(!l)h++;*((C*)B+n)=c;n++;if(!(n&=
63))G();}main(C a,C**v){FILE*f=fopen(v[1],"rb");while(fread(&b,1,1,f))L(b);E(c,
(C*)&h);E(c+4,(C*)&l);L(128);while(n!=56)L(0);y=8;while(y--)L(c[7-y]);z=5;while
(z--)printf("%08x",I[4-z]);}



882 名前: デフォルトの名無しさん 投稿日: 02/04/11 21:06
>>881
小手先の技で70字ちょい削減…っつーか改悪しまくっちゃった。スマソ。

#include <stdio.h>
typedef size_t D;typedef char C;C z,i=0,n=0,c[8];D*p,l=0,h=0,B[16],W[80],H[85],
I[]={0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0};E(C*d,C*s){for(z=4
;z--;)*d++=*(s--+3);}D R(D a,D s){return a<<s|a>>32-s;}L(C c){(*((C*)B+n++)=c,l
+=8)?h:h++;if(!(n&=63)){for(;i<16;i++)E((C*)&W[i],(C*)&B[i]);for(;i<80;i++)W[i]
=R(W[i-3]^W[i-8]^W[i-14]^W[i-16],1);for(i=6;--i;)H[79+i]=I[i-1];for(p=H+79;i<20
;X(0x5a827999))*p=p[2]&(p[3]^p[4])^p[4];for(;i<40;)Y(0x6ed9eba1);for(;i<60;)*p=
p[2]&(p[3]|p[4])|p[3]&p[4],X(0x8f1bbcdc);for(;i<80;)Y(0xca62c1d6);for(i=6;--i;)
I[i-1]+=p[i];}}X(D k){*p+=R(p[1],5)+p[5]+W[i++]+k;p[2]=R(p[2],30);p--;}Y(D k){*
p=p[2]^p[3]^p[4];X(k);}main(D a,C**v){FILE*f=fopen(v[1],"rb");for(;(a=getc(f))+
1;)L(a);E(c,(C*)&h);E(c+4,(C*)&l);for(L(128);n-56;)L(0);for(a=8;a--;)L(c[7-a]);
for(a=5;a--;)printf("%08x",I[4-a]);}


883 名前: デフォルトの名無しさん 投稿日: 02/04/11 22:04
>>881
おいおい、本当に縮めるつもりがあるのか?
7行になったところを見たいだけちゃうんかと・・・


884 名前: 843 投稿日: 02/04/12 09:44
僕が言うのもなんですが、
>>883さんに激しく同意。

前に作ったパックマンですが、
皆さんからヒントを得て、現在11行(W


885 名前: 853 投稿日: 02/04/12 13:10
>>880
パワーエサ(つうかただの無敵)と上下通り抜け付けて 7 行。
http://boobar.hoops.ne.jp/pacmaso.tar.gz

($d,$p,@e)=split/,/,<>;chomp($_=<>);$c=@m=split//;@m=(0,@m,map{chomp;split//}<>
);sub u{@m[@e,$p]=@_}sub w{($g,*z)=@_;$z+=$g==1&&$z%$c==1?$c:$g==2&&$z+$c>$#m?-
$#m:$g==3&&$z-$c<1?$#m:$g==4&&$z%$c==0?-$c:0;$m[$z+$n[$g]]eq'#'or$z+=$n[$g]}@g=
('.')x@e;$t=0;while(@n=(0,-1,$c,-$c,1)){u(('E')x@e,'P');print$m[$_],($_%$c?'':"
")for 1..@m;$e=grep/[.o]/,@m;print"R:$e P:$t >";$e&&($t||$p!=$_)or exit for@e;u
@g,' ';$t--if$t;$g=<>%5||exit;w $g,*p;for(0..$#e){$p==($b=$e[$_])&&next;w 1+int
rand 4,*b while$b==$e[$_];$g[$_]=$m[$e[$_]=$b]}$t+=$d if$m[$p]eq'o'}

改行位置注意な。(w


886 名前: デフォルトの名無しさん 投稿日: 02/04/12 19:41
間違ってたらスマソ

#include <stdio.h>
char c[8];size_t I[]={0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0,z,
i,n,h,l,*p,B[16],W[80],H[85]};X(int k){*p+=p[5]+W[i++]+k+(p[1]<<5|p[1]>>27);2[p
--]=p[2]<<30|p[2]/4;}Y(){*p=p[2]^p[3]^p[4];}L(int x){l+=8;*((char*)B+n++)=x;if(
n&=63)return;for(i=0;i<16;i++)for(h=B[i],x=4;x--;h>>=8)W[i]=W[i]<<8|h&255;for(;
i<80;W[i++]=h)h=W[i-3]^W[i-8]^W[i-14]^W[i-16],h=h*2|h>>31;for(i=5;i--;H[80+i]=I
[i])p=H+79;for(i=0;i<20;X(0x5a827999))*p=(p[2]&(p[3]^p[4]))^p[4];for(;i<40;X(
0x6ed9eba1))Y();for(;i<60;X(0x8f1bbcdc))*p=(p[2]&(p[3]|p[4]))|(p[3]&p[4]);for(;
i<80;X(0xca62c1d6))Y();for(i=5;i--;I[i]+=p[i+1]);}main(){while(~(h=getchar()))L
(h);for(h=l,z=4;z--;h>>=8)c[4+z]=h;for(L(128);n<56;L(0));for(z=8;z--;L(c[7-z]))
;for(z=5;z--;printf("%08x",I[4-z]));}



887 名前: 縮め中毒患者 投稿日: 02/04/12 23:58
>>883
プログラムのネタであれば何でもいい
とにかく縮められるものを come on !


888 名前: デフォルトの名無しさん 投稿日: 02/04/13 00:52
SHA1触ってみたんだけど、
全然ちぢまねえよマジで


889 名前: デフォルトの名無しさん 投稿日: 02/04/13 07:54
ああ


890 名前: デフォルトの名無しさん 投稿日: 02/04/13 08:03
いい


891 名前: デフォルトの名無しさん 投稿日: 02/04/13 13:13
うう


892 名前: デフォルトの名無しさん 投稿日: 02/04/13 15:54
ええっ!?


893 名前: デフォルトの名無しさん 投稿日: 02/04/13 15:57
おお〜☆


894 名前: S 投稿日: 02/04/13 22:13
JavaScript スロットゲーム
現在9行ちょい。7行は容易?

<body onKeyDown=K=event.keyCode><form name=a><input name=b></form><script>R=7;P
=45;C=[];D=document;S="7□=○∴|¥$";A=[0x3EE2E4CC,0x1DCC2C65,0x385CD9A0];T
=[100,5,10,15,20,30,45,60];function Y(){D.a.b.value=P;if(K==13){R>>=1;if(!R){o=
A[0]>>3&7;if(o==(A[1]>>3&7)&&o==(A[2]>>3&7)){alert("賞金 "+T[o]);P+=T[o]}else{
alert("残念");if(P<5){alert("OVER");return}}P-=5;R=7}K=0}for(i=0;i<3;C[i]=A[i++
])if(R&(4>>i))A[i]=A[i]>>27|(A[i]&0x7FFFFFF)<<3;for(i=0;i<3;i++)for(j=0;j<3;C[j
]=B<<27|C[j++]>>3)D.all["F"+(i*3+j)].innerHTML=S.charAt(B=C[j]&7);setTimeout(Y,
99);}for(K=i=0;i<9;)D.write(i%3?"":"<br>","<tt id=F"+i+">",i++," </tt>");for(i=
0;i<8;)D.write("<br><tt>   ",S.charAt(i)," : ",T[i++]);D.a.b.value=P;Y()
</script>



895 名前: S ◆Q14CxNhI 投稿日: 02/04/13 22:20
<<894


896 名前: S ◆Q14CxNhI 投稿日: 02/04/13 22:34
<<894
遊び方:
リターンキーで1カラムずつ停止、中央を揃えてください


897 名前: S ◆Q14CxNhI 投稿日: 02/04/13 22:57
ドラムの配置がダメダメでした。反省。
ついでにちょっと縮めました。

<body onKeyDown=K=event.keyCode><form name=a><input name=b><script>T=[100,5,10,
15,20,30,P=45,60];A=[0x16E29519,0x1DCC2E65,0x384CD988];S="7□=○∴|¥$";R=7
C=[];D=document;function Y(){D.a.b.value=P;if(K==13){R>>=1;if(!R){o=A[0]>>3&7;
if(o==(A[1]>>3&7)&&o==(A[2]>>3&7))alert("賞金 "+T[o]),P+=T[o];else{alert("残念"
);if(P<5){alert("OVER");return}}P-=5;R=7}K=0}for(i=0;i<3;C[i]=A[i++])if(R&4>>i)
A[i]=0x3FFFFFF8&A[i]<<3|A[i]>>27;for(i=0;i<3;i++)for(j=3;j--;C[j]>>=3)D.all["F"
+(i*3+j)].innerHTML=S.charAt(B=C[j]&7);setTimeout(Y,99);}for(K=i=0;i<9;)
D.write(i%3?"":"<br>","<tt id=F",i++,"> </tt>");for(i=8;i--;)
D.write("<br><tt>   ",S.charAt(i)," : ",T[i]);Y()</script>



898 名前: デフォルトの名無しさん 投稿日: 02/04/14 00:00
>>897
一列目が揃ったけど、結果は「残念」でした。報告。


899 名前: S ◆Q14CxNhI 投稿日: 02/04/14 00:35
>>898
現在判定しているのは、真ん中の列だけです。
全列を対象とした方が良いですかね?


900 名前: S ◆Q14CxNhI 投稿日: 02/04/14 00:37
「列」ではなくて「行」ですね。鬱だ・・・。
テストプレイのときは、setTimeout(Y,99) を 300 くらいにしてみてください。


901 名前: S ◆Q14CxNhI 投稿日: 02/04/14 00:51
<body onKeyDown=K=event.keyCode><form name=a><input name=b><script>T=[100,5,10,
15,20,30,P=45,60];A=[0x16E29519,0x1DCC2E65,0x384CD988];S="7□=○∴|¥$";R=7
function Y(){D.a.b.value=P;if(K==13){R>>=1;if(!R){o=A[0]&56;if(o-(A[1]&56)||o-(
A[2]&56)){alert("残念");if(P<5){alert("終了");return}}else alert("賞金 "+T[o>>=
3]),P+=T[o];P-=5;R=7}K=0}for(i=0;i<3;C[i]=A[i++])if(R&4>>i)A[i]=A[i]%(1<<27)<<3
|A[i]>>27;for(i=0;i<9;C[i%3]>>=3,i++)D.all["F"+i].innerHTML=S.charAt(C[i%3]&7);
setTimeout(Y,99)}D=document;for(K=i=0;i<9;)D.write(i%3?"":"<br>","<tt id=F",i++
,"> </tt>");for(i=8;i--;)D.write("<br><tt>   ",S.charAt(i)," : ",T[i]);C=[]
Y()</script>



902 名前: デフォルトの名無しさん 投稿日: 02/04/14 02:04
>>910の人、新スレ立ててね。
>>920の人、このスレの名作をまとめてね


903 名前: デフォルトの名無しさん 投稿日: 02/04/14 03:12
名作候補作品、勝手に選択
選定に当たっては、7行達成を厳格なルールとしました
>>52>>89
>>101>>105>>125>>150>>153>>161>>167
>>319>>320>>337(>>372)>>397
>>402>>428>>430>>494
>>526
>>612>>631>>655
>>745>>753>>770>>774>>798
>>822>>839>>842>>880


904 名前: デフォルトの名無しさん 投稿日: 02/04/14 04:09
初参加。カレンダ生成プログラムです。多分もっと縮められると思います。
使い方:a.exe 月 年(4桁)

#include <stdio.h>
#include <stdlib.h>
int i=0,d,y,m;void c(int s,int a){while(i<s)printf(" "),i++;for(i=1;i<=a;i++)
printf("%3d%s",i,((s+i)%7)?"":"\n");puts("");}int l(){return((y%400==0)?1:(0==y
%100)?0:(y%4==0));}int w(){return y-=m<3,(y+y/4-y/100+y/400+".#&%(#&($')%'"[m]-
34)%7;}int main(int h,char *v[]) {y=atoi(v[2]);m=atoi(v[1]);d=".&#&%&%&&%&%&"[m
]-7+((m-2)?0:l()&1);printf("%11d %4d\n Su Mo Tu We Th Fr Sa\n",m,y);c(w(),d);}



905 名前: 853 投稿日: 02/04/14 06:11
同じ軸上に居たら敵が追いかけてくるよう改良。
http://boobar.hoops.ne.jp/pacmaso.tar.gz

($n,$p,@e)=split/,/,<>;$c=@m=split//,<>;push@m,map{split//}<>;sub w{(*z,$g)=@_;
$z+=(0,!($z%$c)?$c-1:0,$z+$c>$#m?-$#m-1:0,$z-$c<1?$#m+1:0,$z%$c==$c-2?-$c+1:0)[
$g];$m[$z+$n[$g]]eq'#'or$z+=$n[$g]}sub u{@m[@e,$p]=@_}@n=($t=0,-1,$c,-$c,1);@g=
('.')x@e;while($m[$p]ne'o'or$t+=$n){u(('m')x@e,$d?'D':'C');$e=grep/[.o]/,@m,@g;
print@m,"R:$e P:$t >";$e&&($t||!$d)||exit;u @g,' ';w *p,<>%5||exit;for(@e){($w=
$_)==$p&&next;int$w/$c==int$p/$c&&w *w,$w<$p?4:1;$w%$c==$p%$c&&w *w,$w<$p?2:3;w
*w,1+int rand 4while grep$w==$_,@e;$_=$w}@g=@m[@e];$d=grep $p==$_,@e;$t--if$t}

この辺が限界かな?


906 名前: デフォルトの名無しさん 投稿日: 02/04/14 08:54
>903
をを、お疲れ。懐かしいね。
マインスイーパや砂嵐が無いんじゃない?


907 名前: 903 投稿日: 02/04/14 17:01
候補にもれがあれば、追加よろしくです
あるいは、投票と考えればよいかな?


908 名前: 904 投稿日: 02/04/14 22:44
バグ取り、圧縮して、月を英語名表示にしました。使い方は>>904と同じです。
※ASCIIコードに激しく依存。入力値チェック無しです。

<calender.c>-------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int i=0,y,m,s,d;main(int h,char **v){m=atoi(v[1]);y=atoi(v[2]);printf("%11s %4"
"d\n Su Mo Tu We Th Fr Sa\n","Jan\0Feb\0Mar\0Apr\0May\0Jun\0Jul\0Aug\0Sep\0Oct"
"\0Nov\0Dec"+m*4-4,y);d=".&#&%&%&&%&%&"[m]-7+((m-2)?0:((y%400)?((y%100)?((y%4)?
0:1):0):1));s=(y-=m<3,(y+y/4-y/100+y/400+".#&%(#&($')%'"[m]-34)%7);while(i++<s)
printf("   ");for(i=1;i<=d;i++)printf("%3d%s",i,((s+i)%7)?"":"\n");puts("");}
-------------------------------------------------------------------------------



909 名前: デフォルトの名無しさん 投稿日: 02/04/15 00:03
[HTTP鯖] >>706 >>760 >>770
[DNA] >>762
[e] >>769
[mersenne twister] >>749(>>750 >>753)
[BMPGEN] >>775
[tar -xvzf] >>776
[蛇] >>792 >>798
[proxy] >>835(>>839)
[BBS] >>840 >>841 >>842 >>877
[pac-man] >>849 >>852 >>853 >>856 >>866 >>869(>>870) >>879 >>885 >>905
[calendar] >>904

[再帰アフォ] >>646
[BASIC(7行じゃないけど、感動的] >>448 >>497 >>498 >>510 >>511 >>514


910 名前: ヨ?リ^ 投稿日: 02/04/15 00:04
[砂嵐] >>52 >>75 >>76 >>78 >>89
[ラスタスクロール] >>105 >>125 >>129
[インデント揃え] >>116(>>126 >>138) >>688
[圧縮] >>101 >>135 >>146 >>153(>>154) >>696 >>737 >>740 >>744
[倉庫番] >>118(>>120) >>150(>>148) >>179(>>180) >>774
[HTTPクライアント] >>161
[動画再生?] >>205
[レイトレ] >>170 >>209
[迷路(模様?)] >>283 >>285 (>>287) >>305
[ツール] >>319
[ライフゲェム] >>320 >>812 >>815(>>817 >>818) >>822
[オセロ] >>336 >>337 >>352 >>372
[四則演算] >>396(>>397) >>402 >>424 >>430



911 名前: デフォルトの名無しさん 投稿日: 02/04/15 00:05
本文が長すぎるって蹴られた・・・チクショー


[nCr(重複組み合わせ)] >>486
[BASE64] >>488 >>493 >>494
[マインスイーパ] >>385 >>537 >>540
[tic-tac-toe] >>336 >519 >>526
[high&low] >>530
[printf] >>425 >>428
[素因数分解] >>573(>>574)
[dump] >>609 >>612
[起動時間表示] >>623(>>624) >>625 >>627 >>630 >>631
[MIDIピアノ] >>687


912 名前: デフォルトの名無しさん 投稿日: 02/04/15 01:13
<<910
910は新スレ立てるそうです


913 名前: デフォルトの名無しさん 投稿日: 02/04/15 01:39
910はまとめてくれたから、スレ立ては>>920にお願いしようか。
それまでに誰かテンプレートまとめて。


914 名前: デフォルトの名無しさん 投稿日: 02/04/15 01:43
>>909-911
ありがとう、長くて探すきしなかったけどこれで一発だ。


915 名前: ◆tAdi.2WY 投稿日: 02/04/15 02:35
>>909 を見ていて、>>776 は tar -xvzfじゃなくて tar -xv だなあと思ったので…

#include <stdio.h> /* tar.gzアーカイブ内のファイルとディレクトリだけ展開する */
#include <zlib.h> /* zlib が必要。gcc -Wall -ansi -lz -o tar-xvzf tar-xvzf.c */
char c[512];int a=512,s,t,mkdir(const char*,int),strtol(const char*,char**,int)
,fileno(FILE*);void*p,*q,*r;void x(){fclose(p),p=NULL;}int main(int n,char**b){
r=stdin,q=n>1?gzopen(b[1],"rb"):gzdopen(fileno(r),"rb");while(q&&gzread(q,c,a)>
0)p?t-=s=t>a?a:t,fwrite(c,1,s,p),t?0:x():*c?puts(c),c[156]!=53?p=fopen(c,"wb"),
t=strtol(c+124,NULL,8),(p&&!t)?x():0:mkdir(c,511):0;return!q;}

tar-xvzf hoge.tar.gz か tar-xvzf < hoge.tar.gzで展開。
外部ライブラリに頼る時点でちょっと弱いかな。


916 名前: デフォルトの名無しさん 投稿日: 02/04/15 03:03
そろそろpart2突入ですか。次スレも良スレになることを願ってやみません。


917 名前: デフォルトの名無しさん 投稿日: 02/04/15 10:42
漏れの環境C++入ってないから、
始めのほうのC++のやつが見れん。
だれかコンパイルしたやつくれ〜。
つーかC++なのかも分からん。
とにかく実行してみたい。
お願いします。

    _
┌─┴┴─┐
│ 良 ス レ │
└─┬┬─┘
    ││ 
   ゛゛'゛'゛


918 名前: デフォルトの名無しさん 投稿日: 02/04/15 10:47
bccいれろや。


919 名前: 917 投稿日: 02/04/15 11:30
>>918
そんなのがあるなんて知らなかった。
マジ、サンクス。


920 名前: デフォルトの名無しさん 投稿日: 02/04/15 12:12
七行プログラミング part2
http://pc.2ch.net/test/read.cgi/tech/1018840143/


921 名前: デフォルトの名無しさん 投稿日: 02/04/16 08:33
お疲れ。いいスレだった


922 名前: デフォルトの名無しさん 投稿日: 02/04/20 16:20
>>372
恐れ多く、申し訳ないけど、指摘させてください。。
オセロって先手●では???


923 名前: デフォルトの名無しさん 投稿日: 02/04/20 18:58
>>992
ttp://www.othello.org/nakaji/lesson/lesson/rulej.html
うむ。


924 名前: デフォルトの名無しさん 投稿日: 02/04/20 19:04
>922
画面を白黒反転すれば解決!w


925 名前: デフォルトの名無しさん 投稿日: 02/04/20 23:18
>>922
ソースの○●を●○に変えれば解決?


926 名前: デフォルトの名無しさん 投稿日: 02/04/20 23:42
>>922
ルールを変えれば解決・・・


927 名前: デフォルトの名無しさん 投稿日: 02/04/21 00:20
プラパズルNo5とかどうでしょうか。
全組み合わせを探し出し、できれば表示する。
ルール
正方形が5つ集まってできたコマが
12種類(5つの正方形を組み合わせて出きる全通りです)あります。
これを6*10マスに収まるように並べる並べ方をしらべます。
ちなみに組み合わせは全部で2339通りあります。
もちろんコードが短ければ短いほど、前途売りの検出が速ければ速いほど イイ! ってかんじで。


928 名前: デフォルトの名無しさん 投稿日: 02/04/21 00:22
このスレ終わってるから、ぜひ次スレで披露してください
http://pc.2ch.net/test/read.cgi/tech/1018840143/


929 名前: 三村 投稿日: 02/04/29 22:00
終わってるのかよ!


930 名前: デフォルトの名無しさん 投稿日: 02/05/18 01:27
age


931 名前: デフォルトの名無しさん 投稿日: 02/06/05 21:56
sage


932 名前: デフォルトの名無しさん 投稿日: 02/06/30 11:40
もうそろそろ1000取り合戦だな。


933 名前: デフォルトの名無しさん 投稿日: 02/06/30 23:08
何だかパート2が荒れ出し模様



934 名前: hage 投稿日: 02/07/01 10:06
七行プログラムはpart2で終わりにしよう。
part1が良スレ過ぎたので、part2が糞スレに見える。
と、愚痴ってみるテスト。


935 名前: 933 投稿日: 02/07/01 18:45
>>934
板全体から見ると、part2も悪くないんだけどね。
part3を作りたいと思わないのは、
激しく同意


936 名前: デフォルトの名無しさん 投稿日: 02/07/07 01:14
>>935
トリッキーすれも part2 無くして終わったし、さびしいね
7行part3 も作るだけ作ってみれば、ネタはあとから来るんじゃないかな、
と期待してみる


937 名前: 933 投稿日: 02/07/07 02:09
>>936
そだね。最近はDCTとかで復活の兆しが。
ただ、単体では動かない七行プログラミングモジュールを集めて・・・、
という方向には賛同しかねるとか、言ってみるテスト


938 名前: 936 投稿日: 02/07/10 21:38
>>937
同じく。モジュールを集めるのには、必ずしも賛成できません。
DCT や CRC のような単品でも十分実用(あるいは縮めが面白そう)ならばいいけど、
JPEG の全工程をモジュール化しても、それって意味あるのだろうかと。
お前単に長いプログラムを分割して持ってきただけじゃないかと、小一時間・・・


939 名前: デフォルトの名無しさん 投稿日: 02/07/13 21:35
まだ生きてたんだ!!このスレッド。
去年の夏頃読んでたんだけど、無くなったのかと思ってた。


940 名前: デフォルトの名無しさん 投稿日: 02/07/14 02:08
>>939
旧スレをageるのはどうかと・・・


941 名前: デフォルトの名無しさん 投稿日: 02/07/14 03:38
>>939
去年の夏?! ちゃんと続きも読んでおけよ。

七行プログラミング part2
http://pc.2ch.net/test/read.cgi/tech/1018840143/


942 名前: デフォルトの名無しさん 投稿日: 02/07/17 00:38
芸術だ


943 名前: デフォルトの名無しさん 投稿日: 02/07/17 09:56
爆発だ


944 名前: デフォルトの名無しさん 投稿日: 02/07/17 10:48
顔があってもいいじゃないか


945 名前: デフォルトの名無しさん 投稿日: 02/07/17 11:20
スレの底に >>944

というわけで、>>1000の人は芸術的な顔を書いて下さい


946 名前: デフォルトの名無しさん 投稿日: 02/07/17 21:55
(~~~ ゚ ∀~)~~~ ゚ メダマ ボーン
これは、芸術ですか? 爆発して、顔がありますが?


947 名前: デフォルトの名無しさん 投稿日: 02/07/24 00:53
>>946
1000じゃないからだめーーー


948 名前: デフォルトの名無しさん 投稿日: 02/07/28 15:43
part2 が激しいね〜
こっちはまたーりと dat 落ちかな


949 名前: デフォルトの名無しさん 投稿日: 02/07/31 22:35
1000取りには少し遠いしなぁ


950 名前: デフォルトの名無しさん 投稿日: 02/08/10 14:48
うっとり。


951 名前: デフォルトの名無しさん 投稿日: 02/08/13 14:29



952 名前: デフォルトの名無しさん 投稿日: 02/08/13 15:00
dat落ちしないために1000取りしてないのですよ
良スレが読めなくなっても1000取りしたいかい?


953 名前: デフォルトの名無しさん 投稿日: 02/08/13 19:24
圧縮前に落とすように調整すること。


954 名前: デフォルトの名無しさん 投稿日: 02/08/13 23:35
webarchive使えばいんでないの?


955 名前: プディング  ◆sBTiERL2 投稿日: 02/08/14 01:21
すみません・・・
バイオとかNECとかのキーボードの上についてるボタンはキーコードを吐き出しますか?
どうも読み取れません。


956 名前: プディング  ◆sBTiERL2 投稿日: 02/08/14 01:40
┌───────┐      ┏━━━━━━━━━━━┓
│WinMXツアー. │      ┃                ┃
│(株)プディング.   │      ┣━━━━━━━━━━━┫
└───────┤      ┃                ┃
                │ ∧ ∧   .┃┏━┓          ┏━┓┃=
                │(・∀・) ’ ┗┛●┗━━━━━┛●┗┛
                ⊂   ∪
         ___/\__
       /          \
       | では参りませう! |
       \_______/


957 名前: デフォルトの名無しさん 投稿日: 02/08/21 09:27
http://www.ioccc.org/

Check out.



958 名前: デフォルトの名無しさん 投稿日: 02/08/21 09:55
part2もうdatオチかとおもったじゃねーか
http://pc3.2ch.net/test/read.cgi/tech/1018840143/


959 名前: デフォルトの名無しさん 投稿日: 02/09/03 18:13
こっちにこっそりすごい7行プログラムをうpしたりしてみる












といってみただけ


960 名前: デフォルトの名無しさん 投稿日: 02/09/13 10:09
10 cls
20 print "Baka";
30 goto 20


961 名前: デフォルトの名無しさん 投稿日: 02/09/29 04:41
Part3誕生したけど、激しく荒れ模様


962 名前: デフォルトの名無しさん 投稿日: 02/09/29 11:48
保守しておくか。一応。


963 名前: デフォルトの名無しさん 投稿日: 02/09/29 21:38
Part2が先に1000到達しました


964 名前: デフォルトの名無しさん 投稿日: 02/10/03 23:14
ホシュ


965 名前: デフォルトの名無しさん 投稿日: 02/10/03 23:14
保守はさげでも可です。


966 名前: デフォルトの名無しさん 投稿日: 02/10/05 01:08
>>961
> Part3誕生したけど、激しく荒れ模様

さっき見たら、まともになってきた模様。ソースが出てくると、厨房は口はさめなくなるから...。


967 名前: デフォルトの名無しさん 投稿日: 02/10/06 06:01
sage



968 名前: デフォルトの名無しさん 投稿日: 02/10/22 12:38
ほしゅ


969 名前: デフォルトの名無しさん 投稿日: 02/11/09 12:54
ほす


970 名前: 保守ついで 投稿日: 02/11/09 14:07
>>966
同意。
if ( ソースの出が悪い && 休日祭日週末 )
{
     printf("厨房を生産します。\n");
     make_CHUBO(300);   //無駄に使うレス数
}


971 名前: デフォルトの名無しさん 投稿日: 02/11/22 16:16
↑shine


972 名前: デフォルトの名無しさん 投稿日: 02/11/22 22:34



973 名前: デフォルトの名無しさん 投稿日: 02/12/08 02:40



974 名前: デフォルトの名無しさん 投稿日: 02/12/08 02:40



975 名前: デフォルトの名無しさん 投稿日: 02/12/08 02:40



976 名前: デフォルトの名無しさん 投稿日: 02/12/09 01:44
という事で、こっちはとっとと埋めちまうかな。



977 名前: デフォルトの名無しさん 投稿日: 02/12/09 01:45
埋め


978 名前: デフォルトの名無しさん 投稿日: 02/12/09 23:28
うめ


979 名前: デフォルトの名無しさん 投稿日: 02/12/10 16:14



980 名前: デフォルトの名無しさん 投稿日: 02/12/11 00:57
うめうめ〜!


981 名前: デフォルトの名無しさん 投稿日: 02/12/11 12:51
ume




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