278 :
デフォルトの名無しさん :
02/09/29 00:20 270以上スレが伸びてるのに、漏れが最初? C#で適当に書いてみた画像ビューア using System.Drawing;using System.Drawing.Imaging;using System.Windows.Forms; using System;class B:Form{Image i=null;public static void Main(){Application. Run(new B());}public B(){Menu=new MainMenu(new MenuItem[]{new MenuItem("&File" ,new MenuItem[]{new MenuItem("&Open...",new EventHandler(fo))})});}protected override void OnPaint(PaintEventArgs e){if(i!=null)e.Graphics.DrawImage(i,0,0 );}void fo(object o,EventArgs e){OpenFileDialog d = new OpenFileDialog();if(d. ShowDialog()==DialogResult.OK){i=Image.FromFile(d.FileName);Invalidate();}}}
>>278 やっと神キターー。乙。
でも、C#分からないっす。スマソ。
>>278 [STAThread]が抜けてるのでd.ShowDialog()が失敗する・・・
>>281 あれ、漏れのところでは別に問題ないけどなぁ
仕切り厨うざいがうざいんだけど。 別居してくれない?
1人粘着してるの居てが非常にウザイ。
>>285 あなたも含めてべとべとです。
7行スレで7行以外のネタを出して居直る神経がわからんよ、ホント。
おれかよ。
いや、VS.NET入れてあるし、フレームワークはV1.03705。 OpenFileDialogはコモンダイアログコントロールだから、 COMじゃないと思うけど・・・
290=278です。 GDI+ってCOMかなぁ?
usingが抜けてるとか…じゃないよね。C#しらないのでスマソ
初めて作ってみたけど、7行ってむずかしい。 9行になってしまいまつた。 #include <windows.h> int mx=200,my=200;typedef struct{char f[40000];}F;static F n,t;int WINAPI WinMain(HINSTANCE q,HINSTANCE w,PSTR e,int r){HDC a=CreateDC("DISPLAY",0,0,0); long i,x,y,p;int c=0,s;for(i=0;i<mx*my;i++) n.f[i]=rand()%2;while(c<100){for( y=0;y<my;y++){for(x=0;x<mx;x++){s=0;for(i=0;i<9;i++)if (i!=4 && n.f[((y+(i/3-1 )+my)%my)*mx+((x+(i%3-1)+mx)%mx)]==1)s++;t.f[x+y*mx]=s;}}for(y=0;y<my;y++){for (x=0;x<mx;x++){p=x+y*my;if(t.f[p]==3)n.f[p]=1;else if(t.f[p]==2);else n.f[p]= 0;if (n.f[p])SetPixel(a,x,y,RGB(255,0,0));else SetPixel(a,x,y,RGB(0,0,0));}} c++;}DeleteDC(a);}
>>278 つーか自分の環境でちゃんと動いてるの?
>>290 うちも同バージョン。[STAThread]入れれば動いたんで、
コモンダイアログコントロールがCOMをラップしてるのかもとオモタ。
ildasmで実装がどうなってるのかぼちぼち調べてみるナリ。
>>278 W2K+VS.NETのコマンドラインからcscでコンパイルしたけどちゃんと動いたよ。
ホントだ。cscからコンパイルで動作確認。吊ってくる。
すまん
>>278
>>297 普通になんで動かなかったのか知りたい(w
>>293 後は任せとけ。これなら余裕で7行にしてやれる
厨な質問で悪いんだが、 C#の行連結子みたいなの誰か知らない? [STAthread]を入れようと思うのだが、微妙に足りなくて・・・
>>278 オーバーしたバージョンを出したら、誰かが縮めると思うぞ
>>297 VS.NETからコンパイルしていたのかしら?。だとしたら
なにか怪しいコンパイルオプションは付いていない?。
>>299 散々偉そうなセリフを吐いたんだから実力を見せつけろよ
[STAThread]バージョンできました。 行をつなげられたらFileも救えたんだが・・・ using System.Drawing;using System.Drawing.Imaging;using System.Windows.Forms; using System;class B:Form{[STAThread]static void Main(){Application.Run(new B( ));}public B(){Menu=new MainMenu(new MenuItem[]{new MenuItem("&F",new MenuItem []{new MenuItem("&Open...",new EventHandler(c))})});}protected override void OnPaint (PaintEventArgs e){if(i!=null)e.Graphics.DrawImage(i,0,0);}Image i= null;void c (object o,EventArgs e){OpenFileDialog d=new OpenFileDialog();if(d. ShowDialog()==DialogResult.OK){i=Image.FromFile(d.FileName);Invalidate();}}}
変数名とか変えて8行に。自分ではこれが限界かも。 #include <windows.h> int X=200,Y=200;typedef struct{char f[40000];}F;static F n,t;int WINAPI WinMain(HINSTANCE q,HINSTANCE w,PSTR e,int r){HDC a=CreateDC("DISPLAY",0,0,0); long i,x,y,p,c=0,s;for(i=0;i<X*Y;i++) n.f[i]=rand()%2;while(c<100){for(y=0;y<Y ;y++){for(x=0;x<X;x++){s=0;for(i=0;i<9;i++)if (i!=4&&n.f[((y+(i/3-1)+Y)%Y)*X+( (x+(i%3-1)+X)%X)]==1)s++;t.f[x+y*X]=s;}}for(y=0;y<Y;y++){for(x=0;x<X;x++){p=x+ y*Y;if(t.f[p]==3)n.f[p]=1;else if(t.f[p]==2);else n.f[p]=0;if (n.f[p])SetPixel (a,x,y,RGB(255,0,0));else SetPixel(a,x,y,RGB(0,0,0));}}c++;}DeleteDC(a);}
>>306 パート1の砂嵐やパート2の時計を参考に、
WinMainの引数を減らすと良いと思われ
>>305 3行目の
>public B()
は
B()
に可能。これでFileも救済できると思われ。
>>308 ホントだ。
こんなところを見逃してたなんて・・・Thx!
>>306 RGBはCOLORREFにするためのマクロだけど、
COLORREFはDWORDだから、即値にするとさらに減る
>>293 7行にしてみすた。
#include <windows.h>
int i,x,y,s,X=200,Y,c=0;struct{int f[40000];}n,t;WINAPI WinMain(HINSTANCE q,
HINSTANCE w,PSTR e,int p){HDC a=CreateDC("DISPLAY",0,0,0);Y=X;for(i=X*Y;i--;)n
.f[i]=rand()%2;c=0;while(c++<99){for(y=Y;y--;)for(x=X;x--;)for(i=s=0;i<9;t.f[x
+y*X]=s,i++)if(i!=4&&n.f[((y+i/3-1+Y)%Y)*X+((x+i%3-1+X)%X)]==1)s++;for(y=Y;y--
;)for(x=X;x--;){p=x+y*Y;s=t.f[p];if(s-3){if(s-2)n.f[p]=0;}else n.f[p]=1;
SetPixel(a,x,y,255*!!n.f[p]);}}DeleteDC(a);}
>>311 甘いな。
>>304 どーよ?とはいってもほとんど先人達の技のパクリだけどな。
#include <windows.h>
#include <stdlib.h>
int WINAPI WinMain(HINSTANCE q,HINSTANCE w,PSTR e,int r){const int a=200,b=200
;HDC d=CreateDC("DISPLAY",0,0,0);int n[a*b],t[a*b],y,p;for(r=p=0;p<a*b;n[p++]=
rand()%2);for(;r<200;r++){for(y=0;y<a*b;y++)if(r%2)(t[y]==3)?n[y]=1:(t[y]==2)?
0:(n[y]=0),SetPixel(d,y%a,y/a,RGB(255,0,0)*n[y]);else for(t[y]=p=0;p<9;p++)t[y
]+=(p-4)?n[y+(p%3-1)*a+p/3-1]:0;}DeleteDC(d);InvalidateRect(0,0,0);return 0;}
描画領域は自由に変えれるし(a,b)、後かたづけはやってるし(InvalidateRect)、
intとか一切省略してないし、#includeは全てつけているし、returnもしている
文句つける場所あるか?
>>312 窓の中でおながいします・・・
>>308 これで最後にして寝ます
using System.Drawing;using System.Drawing.Imaging;using System.Windows.Forms;
using System;class B:Form{[STAThread]static void Main(){Application.Run(new B(
));}B(){Menu=new MainMenu(new MenuItem[]{new MenuItem("&File",new MenuItem[]{
new MenuItem("&Open...",new EventHandler(c))})});}protected override void
OnPaint(PaintEventArgs e){if(i!=null)e.Graphics.DrawImage(i,0,0);}Image i=null
;void c(object o,EventArgs e){OpenFileDialog d=new OpenFileDialog();if(d.
ShowDialog()==DialogResult.OK){i=Image.FromFile(d.FileName);Invalidate();}}}
>甘いな なんだかなぁ…
>>313 ・・・その挑戦はきつい・・・
&File復活おめ
>>314 お前らみたいに凄いのを凄いと素直に言えない奴らが厨房なんだよ。
>>317 なんで匿名掲示板で礼儀正しくしてなきゃいけねぇんだよ。
つーかプログラム叩いてくれよ。
>>318 スマソ・・
元のプログラムはCなのにCPPにするわけ?
>>316 だからといって、その前に出した311を蔑む必要があるか?
>322 被害妄想。甘いものは甘い。自分よりレベルの低いコードだから指摘しましたが何か?
とはいえ、蔑むつもりは毛頭なかったことを補足しておく。 7行化に協力してくれてthx>311
>>312 > 文句つける場所あるか?
だめ、
> for(t[y]=p=0;p<9;p++)
> t[y]+=(p-4)?n[y+(p%3-1)*a+p/3-1]:0;
y = 0; p = 0 の時に n[] の範囲外をアクセスするぞ。元のプログラムが、
n.f[((y+i/3-1+Y)%Y)*X+((x+i%3-1+X)%X)]
とまだるっこしいことをやってる意味を考えろ。
窓にしてみた。part1のソースコードを引っ張ってきたがいまいち意味がわからん。
#include <windows.h>
int WINAPI WinMain(HINSTANCE i,HINSTANCE,PSTR,int){int a=120,n[a*102],t[a*102],
y,p,c,m[8],r;WNDCLASS w={67,DefWindowProc,0,0,i,0,0,0,0,"a"};RegisterClass(&w);
HWND g;HDC d=GetDC(g=CreateWindow("a","life game",513<<19,1<<31,1<<31,a,100,0,0
,i,0));for(c=p=0;p<a*102;n[p++]=((y=y*9+5)
>>12 )%2);while(GetMessage((MSG*)m,g,0
,0)!=-1){if(m[1]==15){for(c++,y=a;y<a*101;y++)if(c%2)for(t[y]=p=0;p<9;p++)t[y]
+=(p-4)?n[y+(p%3-1)*a+p/3-1]:0;else(t[y]==3)?n[y]=1:(t[y]==2)?0:(n[y]=0),SetPi\
xel(d,y%a,y/a-1,255*n[y]);}DispatchMessage((MSG*)m);InvalidateRect(g,0,0);}ret\
urn 0;}
境界条件が嘘だけどまあいいだろう。
今9行。Cで書いたら7行はすぐだろうな。
WinMainの引数型はWINAPIだから省略しても問題ない。
>>311 のコードから。
#include <windows.h>
int i,x,y,s,X=200,Y,c=0;struct{int f[40000];}n,t;WINAPI WinMain(q,w,e,p){HDC a
=CreateDC("DISPLAY",0,0,0);Y=X;for(i=X*Y;i--;)n.f[i]=rand()%2;c=0;while(c++<99
){for(y=Y;y--;)for(x=X;x--;)for(i=s=0;i<9;t.f[x+y*X]=s,i++)if(i!=4&&n.f[((y+i/
3-1+Y)%Y)*X+((x+i%3-1+X)%X)]==1)s++;for(y=Y;y--;)for(x=X;x--;){p=x+y*Y;s=t.f[p
];if(s-3){if(s-2)n.f[p]=0;}else n.f[p]=1;SetPixel(a,x,y,255*!!n.f[p]);}}
DeleteDC(a);}
もう100こなくていいよ。気分悪い。
最後のif文を?へ。
これで6行。
>>328 から。
#include <windows.h>
int i,x,y,s,a,X=200,Y,c=0;struct{int f[40000];}n,t;WINAPI WinMain(q,w,e,p){Y=X
;a=CreateDC("DISPLAY",0,0,0);for(i=X*Y;i--;)n.f[i]=rand()%2;c=0;while(c++<99){
for(y=Y;y--;)for(x=X;x--;)for(i=s=0;i<9;t.f[x+y*X]=s,i++)if(i!=4&&n.f[((y+i/3-
1+Y)%Y)*X+((x+i%3-1+X)%X)]==1)s++;for(y=Y;y--;)for(x=X;x--;){p=x+y*Y;s=t.f[p];
n.f[p]=(s-3)?(s-2)?0:n.f[p]:1;SetPixel(a,x,y,255*!!n.f[p]);}}DeleteDC(a);}
前スレ
>>896 のgrepを少し縮めてみた。gccとvcでコンパイルできる。
typedef unsigned char*U,V;V Z[9999],H[999];c,f;U P,Q,r,s,t,u;C(b){*Q++=b;}I(c){
return c&&strchr("*+?",c);}N(U p){return(c=p[1]<<8|p[2])?*p==7?p-c:p+c:0;}S(o,p
)U p;{for(s=Q,Q+=3;s-->p;s[3]=*s);*p=o,p[1]=p[2]=0;}T(U p,U v){for(;N(p);p=N(p)
);p[2]=c=*p==7?p-v:v-p;p[1]=c
>>8 ;}O(U p,U v){*p-6||T(p+3,v);}D(o){r=Q;*Q++=o;*Q
++=0;*Q++=0;return r;}M(U p){U n,q;for(;p;p=n){n=N(p);c=*p;if(!c||c==1&&P!=Q||c
==2&&*P||c==3&&!*P++||c==4&&(!*P||!strchr(p+3,*P++))||c==5&&strchr(p+3,*P++)||c
==8&&p[3]!=*P++)return!c;if(c>9)return M(n);if(c==6){for(q=P;!(f=M(p+3))&&(p=N(
p))&&*p==6;P=q);return f;}}}G(p,F){U r=p?(r=D(10)),T(r,B()),r:B();for(;*P=='|';
F=f,P++,T(r,B()),f=f?F:f);T(r,u=D(p?11:0));for(t=r;t;t=N(t))O(t,u);if(p?*P++-41
:*P)E();return r;}E(){exit(1);}L(){for(D(*P==94?P++,5:4),(*P==93||*P==45)&&C(*P
++);*P&&*P!=93;)if(*P-45)C(*P++);else if(*++P-93&&*P)for(c=P[-2];c<=*P++;P--,C(
c++));else C(45);*P++-93&&E();C(0);}B(){U p,q;for(f=0,p=D(6),q=0;*P&&*P-'|'&&*P
-41;(q&&T(q,u)),q=u)f=0,(c=*P++)==94?D(1):c==36?D(2):c==46?f=1,D(3):c==91?f=1,L
():c==40?r=G(1):I(c)?E():((c-92||*P++||E()),f=1,D(8),C(P[-1])),u=r,I(c=*P)&&(!f
&&c-47&&E(),f=0,c==42?S(6,u),O(u,D(7)),O(u,u),T(u,D(6)),T(u,D(9)):c==43?f=1,T(u
,t=D(6)),T(D(7),u),T(t,D(6)),T(u,D(9)):(S(6,u),T(u,D(6)),T(u,t=D(9)),O(u,t)),I(
*++P)&&E());q||D(9);return p;}main(c,v)char**v;{for(P=v[1],Q=Z,G(0);gets(H);)
for(Q=s=H;P=s,M(Z)?puts(H),0:*s++;);}
>>312 から
#include <windows.h>
WinMain(HINSTANCE,HINSTANCE,PSTR,int r){const int a=200,b=a,c=a*b;int n[c*2],*t
=n,y=0,p;HDC d=GetDC(0);for(;t<n+c;*t++=rand()%2);for(r=200;r--;){for(;y<c;y++)
for(t[y]=p=0;p<9;p++)t[y]+=(p-4)?n[y+(p%3-1)*a+p/3-1]:0;for(;y--;)SetPixel(d,y%
a,y/a,255*(n[y]=t[y]^2?t[y]==3:n[y]));}InvalidateRect(0,0,!ReleaseDC(0,d));}
とりあえず、バグも残ってるんでうまく解消する方法を模索中。
windows.hにWinMainのプロトタイプ宣言が入っているので、
呼び出し規約WINAPIは記述しなくてもOK
>SetPixel(d,y%a,y/a,255*(n[y]=t[y]^2?t[y]==3:n[y]));
これが目玉(そうでもないか
>>327 VC++6.0SP5でビルドすると、
LifeGame.cpp(2) : error C2057: 定数式が必要です。
LifeGame.cpp(2) : error C2466: サイズが 0 の配列を割当てまたは宣言しようとしました。
LifeGame.cpp(2) : error C2133: 'n' : サイズが不明です。
LifeGame.cpp(2) : error C2057: 定数式が必要です。
LifeGame.cpp(2) : error C2466: サイズが 0 の配列を割当てまたは宣言しようとしました。
LifeGame.cpp(2) : error C2133: 't' : サイズが不明です。
って怒られるけど、何かオプション必要?
>>334 定数式が必要だと思われ。
>n[a*102],
ところでC++ってこんなことできたっけ?(allocaがいらなくなる?)
gccの拡張機能にあったかもしれないけど。
>>312 とりあえず、6行。VC++ 6 + SP5 では動いた。
#include <windows.h>
extern int rand();const int x=200,y=200,m=x*y;int n[m],t[m],i,z=m,c=100,s;int
WINAPI WinMain(HINSTANCE,HINSTANCE,PSTR,int){HDC a=CreateDC("DISPLAY",0,0,0);
for(;z--;)n[z]=rand()%2;for(;c--;){for(z=m;z--;){for(s=i=0;i<9;i++)s+=i!=4&&n[
((z/x+i/3-1+x)%x)*x+(z%x+i%3-1+x)%x];t[z]=s==3?1:s==2?n[z]:0;}for(z=m;z--;)
SetPixel(a,z%x,z/x,(n[z]=t[z])*255);}DeleteDC(a);return!InvalidateRect(0,0,0);}
>>334 拡張子をcppにするとコンパイルできるよ
って、なってるみたいね。わからん。
もう100こなくていいよ。気分悪い。
339 :
デフォルトの名無しさん :02/09/29 06:43
朝。 さわやかな朝。
そして、さわやかな2ちぇんねる。
クソスレageんなヴォケ
>>337 > 拡張子をcppにするとコンパイルできるよ
> って、なってるみたいね。わからん。
うちの VC++6 (SP5) だとコンパイル/実行はできる。ただし以下の警告が出る。
test.cpp(2) : warning C4007: 'WinMain' : '__stdcall' でなければなりません。
test.cpp(5) : warning C4508: 'WinMain' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。
リンク中...
ブラウザ データベースを作成中...
test.exe - エラー 0、警告 2
grepのソースコードすげえー B()のforループがとんでもないね
#include <windows.h> int WINAPI WinMain(HINSTANCE i,HINSTANCE,PSTR,int c){int a=200,b=a*a,n[b],t[b], y,p=b,m[8];WNDCLASS w={67,DefWindowProc,0,0,i,0,0,0,0,"a"};HWND g;RegisterClass (&w);HDC d=GetDC(g=CreateWindow("a","生",513<<19,0,0,a,a,0,0,i,0));for(;p--;)n[ p]=rand()%2;while(~GetMessage((MSG*)m,g,0,0)){for(c++,y=b;--y;)if(c%2)for(t[y]= p=0;p<9;p++)t[y]+=p-4&&n[y+(p%3-1)*a+p/3-1];else n[y]=t[y]==3||t[y]==2&&n[y], SetPixel(d,y%a,y/a,255*n[y]);DispatchMessage((MSG*)m);InvalidateRect(g,0,0);}}
100はエラそうな割にたいしたこと無かったな
>>347 あなたもかなり偉そうだぞ。そういう書き込みはまた厨房を召還してしまう。
コードに突っ込みを入れるなり自分で作品を出して言うべし。
ちなみに口が悪いから評価されてないけど、
>>312 はなかなかの作品だと思う。
>>348 なかなかの作品ならあれからさらに2行も縮まるかボケ
>>349 自分が嫌いだからと言ってソースも読まずに叩くなよ。
そういう事がやりたいなら板違いだからマ板へ行け
348=312=100 作品以前に人間性に問題あるよ
>>351 それ(348=312=100)、どうせ特定できないし、荒れる要因になるので、放置の方向で。
7行スレで遊んでみて思うのは7行というのは結構長い、ということ。 79*7=553文字あると、かなりの範囲まで表現できると思いますた。
もう改行もしないで80x7文字で行こう! って最近のコンパイラは1行256文字超えても大丈夫?
#include<stdio.h> char s[999],*p=s;k(){while(*p==32)++p;}a(void){int r=0;if(*p=='('){char c=*++p ;++p;k();r=a();if(c==43)r+=a();else if(c==45)r-=a();else if(c==42)r*=a();else if(c==47)r/=a();else if(c==37)r%=a();else if(c==80)printf("%d\n",r);else if(76 ==c){int i,n=r;char*b=p;for(i=0;i<n;++i){p=b;r=a();}}++p;}else do{r=r*10+*(p++ )-'0';}while(*p!=32&&*p!=')');k();return r;}main(){gets(s);a();return 0;} lisp風電卓、再び6行に縮めることができました。 仕様(俺がlisp知らないので適当) (演算子 式 式) …計算 + - * / % (P 式) …式を表示、結果は式の値そのまま (L 回数 式) …式を回数繰り返す、結果は最後に実行した式の値 条件判断と再帰呼出しができるようにしたいなー。 そうすればLも廃止できるし…後一行の余裕でどうにかならないかしら。
>>355 (P (+ 1 2 3))
3
せっかくの前置記法なのに勿体ない。
あと、Lって何に使えるの?
ソースは今から読みまふ。
そのまま寝てしまいそうですがw
>>355 関数作れる様にできるといいね。条件式も。
関数定義:(F 名前 引数 値)
条件式:(? 条件 真 偽)
最低F?=+-があればフィボナッチとか書ける様になると思う。
(F f(n)(?(= n 0)0(?(= n 1)1(+(f(- n 1))(f(- n 2))))))
=>f
(f 20)
=>6765
使ってないusingを見つけたので、 それを省いて、代わりにスクロールバーを入れてみた。 そして、&Fileは再び階層ごと消えてしまった。 using System;using System.Drawing;using System.Windows.Forms;class B:Form{B(){ Menu=new MainMenu(new MenuItem[]{new MenuItem("&Open...",new EventHandler(c))} );AutoScroll=1>0;}Image i=null;void c(object o,EventArgs e){OpenFileDialog d= new OpenFileDialog();if(d.ShowDialog()==DialogResult.OK){i=Image.FromFile(d. FileName);AutoScrollMinSize=i.Size;Invalidate();}}[STAThread]static void Main( ){Application.Run(new B());}protected override void OnPaint(PaintEventArgs e){ if(i!=null)e.Graphics.DrawImage(i,new Rectangle(AutoScrollPosition,i.Size));}}
>>350 まぁいいや、マジレス。俺も縮めた。
しかし、これを言うと特定されるから言いたくなかった。
以上
んじゃ。
#include<stdio.h> char s[999],*p=s;k(){while(*p==32)++p;}a(void){int r=0;if(*p==40){char c=*++p; ++p;k();r=a();(c==43)?r+=a():(c==45)?r-=a():(c==42)?r*=a():(c==47)?r/=a():(c== 37)?r%=a():(c==61)?r=r==a():(c==62)?r=r>a():(c==60)?r=r<a():(c==80)?printf( "%d\n",r):(c==63)?r?r=a(),a():(a(),r=a()):0;++p;}else do{r=r*10+*(p++)-48;} while(*p!=32&&*p!=41);k();return r;}main(){gets(s);a();return 0;} Lを廃止 = > < 追加 ? 追加 ifを?:に書き換えて短縮 で、まだ6行なので、関数定義いけるか…?
関数定義…横暴な仕様を考え中。
・関数は1つだけ定義できる
・引数は1つだけ渡せる
(F 式) で定義。式中では引数はXで参照。
(C 式) で呼びだし。式の値が呼びだし先のXに。
で、
>>358 のフィボナッチを計算できないかな〜と(w
複数行の入力を受け付ける余裕はなさげなので、関数定義は0を返すようにして、↓な感じ
(+ (F (?(= X 0)0(?(= X 1)1(+(C(- X 1))(C(- X 2)))))) (C 20))
>>361 の分岐を、==のネストから-にして、ちょっと短くしてみました。
間違ってたらスマソ。
#include<stdio.h>
char s[999],*p=s;k(){while(*p==32)++p;}a(){int r=0;if(*p==40){char c=*++p;++p;
k();r=a();r=c-43?c-45?c-42?c-47?c-37?c-61?c-62?c-60?c-80?c-63?0:r?a(),a():(a()
,r=a()):printf("%d\n",r):r<a():r>a():r==a():r%a():r/a():r*a():r-a():r+a();++p;
}else do r=r*10+*(p++)-48;while(*p-32&&*p-41);k();return r;}main(){gets(s);a()
;return 0;}
あと、最後のmainのreturn 0;はいらないよね。それで5行までもうちょいかと。
>>363 ありがとうございます。
でも増えちゃったんですね〜関数定義追加したら。
#include<stdio.h>
char*f,s[999],*p=s;k(){while(*p==32)++p;}a(int x){int r=0;if(*p==40){char*b,c=
*++p;++p;k();r=a(x);(c==43)?r+=a(x):(c==45)?r-=a(x):(c==42)?r*=a(x):(c==47)?r
/=a(x):(c==37)?r%=a(x):(c==61)?r=r==a(x):(c==62)?r=r>a(x):(c==60)?r=r<a(x):(c
==80)?printf("%d\n",r):(c==63)?r?r=a(x),x=a(x):a(x),r=a(x):(c==70)?(f=p),r=(a(
x),0):(c==67)?(b=p),(p=f),(r=a(r)),(int)(p=b):0;++p;}else if(*p==88){r=x;++p;}
else do{r=r*10+*(p++)-48;}while(*p-32&&*p-41);k();return r;}main(){gets(s);a(0
);return 0;}
(+ (F X (+ X 2)) (P (C 1))) ==> 3 は動作確認しましたが、
フィボナッチが計算できない〜…デバッグしなければ。
関数定義は (F ダミー引数定義 式) となり、結果は0、ダミー引数定義はX固定です。
Pを省略して、代わりに結果をmainで常に出力させれば5行は達成すると思います。 main(){gets(s);printf("\d\n",a());}
ひょっとして?の前の式に()は要らない?…(試す)…おー、本当だ、すげー。
一応
>>363 から
>>364 ,
>>366 を適用したものです。
>>365 はまだ反映してません。
これで5行
#include<stdio.h>
char s[999],*p=s;k(){while(*p==32)++p;}a(){int r=0;if(*p==40){char c=*++p;++p;
k();r=a();r=c-43?c-45?c-42?c-47?c-37?c-61?c-62?c-60?c-63?0:r?a(),a():(a(),r=a(
)):r<a():r>a():r==a():r%a():r/a():r*a():r-a():r+a();++p;}else do r=r*10+*(p++)
-48;while(*p-32&&*p-41);k();return r;}main(){gets(s);printf("%d\n",a());}
あ、?の結果が変になりますね。やっぱり無理があったみたい。 r?a(),a():(a(),r=a())の部分をどうにかしないと…
>>368 から
>>369 の不具合を直したもの。'?'を分離して対処。6行に戻る。
#include<stdio.h>
char s[999],*p=s;k(){while(*p==32)++p;}a(){int r=0;if(*p==40){char c=*++p;++p;
k();r=a();if(c==63)r?r=a(),a():(r=a(a()));else r=c-43?c-45?c-42?c-47?c-37?c-61
?c-62?c-60?0:r<a():r>a():r==a():r%a():r/a():r*a():r-a():r+a();++p;}else do r=r
*10+*(p++)-48;while(*p-32&&*p-41);k();return r;}main(){gets(s);printf("%d\n",a
());}
フィボナッチ計算デ(・∀・)キタ―――――――!! #include<stdio.h> char*f,s[999],*p=s;k(){while(*p==32)++p;}a(int x){int r=0;if(*p==40){char*b,c= *++p;++p;k();r=a(x);c==43?r+=a(x):c==45?r-=a(x):c==42?r*=a(x):c==47?r/=a(x):c ==37?r%=a(x):c==61?r=r==a(x):c==62?r=r>a(x):c==60?r=r<a(x):c==80?printf("%d\n" ,r):c==63?((b=f),r?(r=a(x)),(f=0),a(x),(f=b),0:((f=0),a(x),(f=b),r=a(x))):c== 70?((b=p),r=(a(x),0),(f=b),0):c==67?(f?((b=p),(p=f),(r=a(r)),(p=b),0):0):0;++p ;}else if(*p==88){r=x;++p;}else do{r=r*10+*(p++)-48;}while(*p-32&&*p-41&&*p-40 );k();return r;}main(){gets(s);a(0);} (+ (F X (?(= X 0)0(?(= X 1)1(+(C(- X 1))(C(- X 2)))))) (P(C 20))) ==> 6765 現在8行。%辺りの使わない演算子は消してしまってもいいかな?
>>371 凄い!とうとうやったね。
で、Pと無駄な括弧省いたら7行になったよ。(Pいるの?)
#include<stdio.h>
char*f,s[999],*p=s;k(){while(*p==32)++p;}a(int x){int r=0;if(*p==40){char*b,c=
*++p;++p;k();r=a(x);c==43?r+=a(x):c==45?r-=a(x):c==42?r*=a(x):c==47?r/=a(x):c
==37?r%=a(x):c==61?r=r==a(x):c==62?r=r>a(x):c==60?r=r<a(x):c==63?(b=f,r?r=a(x)
,f=0,a(x),f=b,0:(f=0,a(x),f=b,r=a(x))):c==70?b=p,r=(a(x),0),f=b,0:c==67?(f?(b=
p,p=f,r=a(r),p=b,0):0):0;++p;}else if(*p==88)r=x,++p;else do{r=r*10+*(p++)-48;
}while(*p-32&&*p-41&&*p-40);k();return r;}main(){gets(s);printf("%d\n",a(0));}
(+ (F X (?(= X 0)0(?(= X 1)1(+(C(- X 1))(C(- X 2)))))) (C 20))
6765
>>372 無駄な括弧は、デバッグ時書いていたものを、優先順位的に消してもいいものか迷ってました。
サンクス、大感謝です!
Pは、最終的に7行「lispインタプリタ」を名乗りたかったので(←lisp知らないくせに)、
計算以外の命令文っぽいものを残しときたかっただけです(w
ってことでPの代わりに%を省略。これでも7行。
#include<stdio.h>
char*f,s[999],*p=s;k(){while(*p==32)++p;}a(int x){int r=0;if(*p==40){char*b,c=
*++p;++p;k();r=a(x);c==43?r+=a(x):c==45?r-=a(x):c==42?r*=a(x):c==47?r/=a(x):c
==61?r=r==a(x):c==62?r=r>a(x):c==60?r=r<a(x):c==63?(b=f,r?r=a(x),f=0,a(x),f=b,
0:(f=0,a(x),f=b,r=a(x))):c==70?b=p,r=(a(x),0),f=b,0:c==67?(f?(b=p,p=f,r=a(r),p
=b,0):0):c==80?printf("%d\n",r):0;++p;}else if(*p==88)r=x,++p;else do{r=r*10+*
(p++)-48;}while(*p-32&&*p-41&&*p-40);k();return r;}main(){gets(s);a(0);}
>>373 それだったら本物のLISPインタプリタと同じ様に、read-eval-print-loop
にすると良いよ。(行入力にループ追加、%,Pを省略しました。終了はCtrl+Z)
#include<stdio.h>
char*f,s[999],*p=s;k(){while(*p==32)++p;}a(int x){int r=0;if(*p==40){char*b,c=
*++p;++p;k();r=a(x);c==43?r+=a(x):c==45?r-=a(x):c==42?r*=a(x):c==47?r/=a(x):c
==61?r=r==a(x):c==62?r=r>a(x):c==60?r=r<a(x):c==63?(b=f,r?r=a(x),f=0,a(x),f=b,
0:(f=0,a(x),f=b,r=a(x))):c==70?b=p,r=(a(x),0),f=b,0:c==67?(f?(b=p,p=f,r=a(r),p
=b,0):0):0;++p;}else if(*p==88)r=x,++p;else do{r=r*10+*(p++)-48;}while(*p-32&&
*p-41&&*p-40);k();return r;}main(){while(gets(s))p=s,printf("%d\n",a(0));}
375 :
デフォルトの名無しさん :02/09/30 19:58
part 2 よりも下がってるのでage
>347 最初の *p=s は main()でやってるので *p でいいのでは? あと、終わりのほうのdo while()(10進文字列->intですよね?)の条件は (*p>47&*p<58)でいいと思う。 うー、なんでwhileじゃなくdo whileなのかワカラン。わしがなにか読み落としとるのかー?
まちがえた >347 <-> >374
a(int x)もa(x)でいい
c==45とかをc-45に変換したらもう少し小さくならない?
380 :
60cm浮き上がるストレート :02/10/01 16:42
スロットです。13行です。 どなたか縮めてください。または縮める方法やこつを教えてください。 long z;char j[]="000102101112202122001020011121021222001122021120",s[][17]={ "\x1b[>5h","回:+ 止:1~3 終:/"," "};int g,a,b,e[28][3],o=9,m[3],n[8],Y[3],c=0; main(){S(0);H(6,33);S(1);for(;;){g=kbhit()?getch():0;H(20,37);printf("%5d",o); if(c>4)c=0;for(a=0;a<8;a++){if(c<1){m[a/3]=2;n[a]=0;Y[a/3]=0;for(b=0;b<84;b++) e[b/3][b%3]=rand()%7;}if(c==1){m[a/3]=0;if(a>6)c=2;}if(c>1&&a<3){b=Y[a];if(m[a ]<1&&g==49+a)m[a]=1;if(m[a]==1&&b%3==0){m[a]=2;c++;}if(m[a]<2)Y[a]=b==83?0:b+1 ;}}if(c<1&&g==43){c=1;o--;}if(g==47||o<0)return;if(c>4){b=0;for(a=0;a<43;a+=6) if(R(a,0,1)==R(a,2,3)&&R(a,0,1)==R(a,4,5)){b++;n[a/6]=1;}o+=b*b*b;}if(c>1){for (a=0;a<81;a++){H(17-a/9,32+a%9*2);for(b=0;b<47;b+=2)if(n[b/6]==1&&j[b]-48==a/9 /3&&j[b+1]-48==a%9/3)M(5);M(e[L((Y[a%9/3]+a/9)/3)][a%9/3]+41);S(2);M(0);}}for( z=0;z<2000000;z++);}}L(a){return a-=a>27?28:0;}R(a,b,c){return e[L(j[a+b]-48+Y [j[a+c]-48]/3)][j[a+c]-48];}M(a){printf("\x1b[%dm",a);}S(a){printf("%s",s[a]); }H(y,x){printf("\x1b[%d;%dH",y,x);}
1 エスケープシーケンス使うのやめれ 2 printfはまとめろ 3 桁の多い定数は何とかして圧縮汁 4 a==1?1:0はa-1?0:1/a^1?0:1に置き換えられる
最低でもこのスレに出てたソースのテクニックは全部詰め込め。 我流だけじゃ大して面白くもない
>>383 NTなんでエスケープシーケンスが正常に表示されないんだよ
>>381 お答えありがとうございます。
>1 エスケープシーケンス使うのやめれ
使わなくても作れたのですが、へぼプラグラムをカバーするために
使いました。確かにかなり文字数を消費してしまいます。
もしエスケプに変わる、関数なんかでもっと小さくかけるのなんかが
あったら教えてください。
>2 printfはまとめろ
これはかなり考えていたのですが。
今回はint用、文字列用、色変え用、カーソル移動用に分けて使いました。
種類の違うのを1つにする方法はあるのでしょうか。
または、それはないので、1種類しか使わないプログラムを作るように
したほうがよいのでしょうか。
>3 桁の多い定数は何とかして圧縮汁
48桁×3パターンだったので3進数扱いにしてやったのですが、
処理のほうで意外と文字数が増えてしまったので断念しました。
>4 a==1?1:0はa-1?0:1/a^1?0:1に置き換えられる
確かに。分岐時の省略は、!=0の意味になりますからね。
1文字でも大事にしないといけませんね。
389 :
デフォルトの名無しさん :02/10/01 21:27
lispっぽいのすげえ!! すでにソース見てもなにやってるかわからん(w
>>374 からの変更です。
>>376 ,
>>378 を反映してさらに短くなりました。
数文字余ったので結果出力に=>を追加,%を復活させました。
#include<stdio.h>
char*f,s[999],*p;k(){while(*p==32)++p;}a(x){int r=0;if(*p==40){char*b,c=*++p;
++p;k();r=a(x);c==43?r+=a(x):c==45?r-=a(x):c==42?r*=a(x):c==47?r/=a(x):c==37?r
%=a(x):c==61?r=r==a(x):c==62?r=r>a(x):c==60?r=r<a(x):c==63?(b=f,r?r=a(x),f=0,a
(x),f=b,0:(f=0,a(x),f=b,r=a(x))):c==70?b=p,r=(a(x),0),f=b,0:c==67?(f?(b=p,p=f,
r=a(r),p=b,0):0):0;++p;}else if(*p==88)r=x,++p;else while(*p>47&&*p<58)r=r*10+
*(p++)-48;k();return r;}main(){while(gets(s))p=s,printf("=>%d\n",a(0));}
>>379 の、==を-に直すアイデアは、左辺値のエラーが出るので保留です。
該当部分を括弧で括るとエラーは出なくなりますが、逆に増えてしまいました。
前スレ553を参考に7行で動的rangecoder
# 初代スレ745のそれと違いサイズ制限無し
圧縮>exec src dst e
展開>exec src dst
#include<stdio.h>
FILE*G,*P;unsigned U[258]={1,1},C=4,L,W=~0,X=256,N,K,A=2,Z,T;f(l,w){for(L+=W*l;
(W*=w)<=~L*X/X||W<X*X&&(W=65535&-L);L*=w=X)Z?N=N*X+getc(G):putc(L
>>24 ,P);}main(
i,v)char**v;{G=fopen(v[1],"rb");P=fopen(v[2],"wb");for(Z=i<4;C--;Z&&f(0,1))W/=X
;for(W=C;C;Z*--C&&putc(C-1,P)){i=Z?0:getc(G)+2;W/=A++;for(K=C=0;T=U[C],Z?W*(K+T
)<=N-L:i--;C++)K+=T;f(T?K:0,T+!T);T*C||f((W/=X,C=C?C:(N-L)/W+2)-2,1);for(K=++U[
C]/X?A=2,258:1;--K>1;)A+=U[K]/=2;}for(T=4;T--;f(0,1))W/=X;fclose(P);fclose(G);}
>>391 ヒョ準入出力使ったら短くなるかな?
exec e <src >dst
LISPインタプリタ。シンボル名は1文字、ラムダリストは必須パラメータのみ、 GC・クロージャ・リスト操作・リストのプリンタ・エラーチェックいっさいなしと、 かなり機能を絞りましたが全然小さくなりません。お前らもっと縮められませんか? #include <stdio.h> typedef int*O,(*F)();d[9<<20];j[768];O e=d,f,g,b,h,i,x,y;k,l,m,n,o;A(p,q){i=e++ ;*e++=p;*e++=q;}B(r){i=e;*e++=1;*e++=r;}C(s){i=s;}D(O t){for(l=0;!*t;t=t[2])l+= (y=t[1])[1];B(l);}E(O t){m=(y=t[1])[1];B(*(t=t[2])?-m:m-(D(t),l));}P(O t){for(i =f,n=1;!*t;t=t[2])m=(y=t[1])[1],n?n=0,l=m:m-l&&(i=g);}G(O t){O s=t[2];c(t[1]);i =i-g||!*(s=s[2])?s[1]:g;c(i);}Q(O t){A(b,t[2]);h=t[1];h[2]=i;i=h;}H(v,w){i=j+v* 3;if(!*i)*i=2,i[1]=i,i[2]=w;}J(O t){for(i=g;!*t;h=t[2],t[2]=i,i=t,t=h);}K(O s){ O t=g;for(;!*s;c(s[1]),A(i,t),t=i,s=s[2]);J(t);}c(O s){O t=h=s[1],u=x,z,a;i=0; if(*s==1)i=s;if(*s>1)for(i=h,z=u;!*z&&(i=(a=z[1])[2],a[1]!=s);i=h,z=z[2]);if(!* s&&*h>1&&((t=h[2])<d||t>e))*h-3?K(s[2]),((F)t)(i):((F)t)(s[2]);if(!i){for(t=t[2 ],z=t[1],K(s[2]),a=i;!*z;A(z[1],a[1]),A(i,x),x=i,z=z[2],a=a[2]);for(;!*(t=t[2]) ;c(t[1]));}x=u;}N(){O t=g;for(;L(),i;A(i,t),t=i);J(t);}L(){for(i=0;(k=getchar() )==32||k==10;);for(l=n=o=0;~k&&!strchr(" \n()",k);o=o?o:k,l=l*10+(k-=48),n|=(O) k>9,k=getchar());o?ungetc(k,stdin),n?H(o,C):B(l):k-40||N();}main(){H(78,C);g=x= i;H(84,C);f=i;H(76,C);b=i;H(63,G);*i=3;H(68,Q);*i=3;H(43,D);H(45,E);H(61,P);for (;L(),i;)if(c(i),*i)*i-1?printf("%c\n",(i-j)/3):printf("%d\n",i[1]);}
使えるスペシャルフォームと関数はこれだけ。 D name lambda-list &rest body ? test then [else] + &rest numbers - number &rest numbers = &rest numbers フィボナッチはこんな感じで。 (D f (x) (? (= x 0) 0 (? (= x 1) 1 (+ (f (- x 1)) (f (- x 2)))))) (f 20) -> 6765
>>393 どんどん凄くなってくけど、これを7行は難しいかも。
ひまだったので、(えせ)スロットに挑戦。 とくにスゲーということはないですが、せっかくなので。 #include <stdio.h> #include <signal.h> int x=30,y,a,b,c,o,p,q,r=0,s=0,t=0,u=0,v=0,w=0;char*m="0123456789abcdef";void H(n){a?(a=0):b?(b=0):c?(c=0):0;}int main(){signal(SIGINT,H);for(printf("%d>",x) ,scanf("%d",&y);x>0;x+=y*(((m[o]&m[p])==m[q])+((m[r]&m[s])==m[t])+((m[u]&m[v]) ==m[w]))*2-y)for(a=b=c=1;a|b|c;printf("%c%c%c\n",m[r],m[s],m[t])){a?o=r,r=u++,u %=16:0;b?p=s,s=v++,v%=16:0;c?q=t,t=w++,w%=16:0;}return 0;}
・仕様 3x3を表示するのは無理(環境に依存しないで画面クリアやカーソル移動 するのができない)なのでまんなかの横1列のみ表示。上と下の列は内部 的には存在する。最初に持ち点が表示されるので、賭け点を入力する。 持ち点がなくなったら終了。目はCtrl-Cでとめる。横の列1ライン揃いで2倍 リターン。3ラインあるので最大6倍リターン(目の並びや長さをいじってネ)。 #Ctrl-Cを目をとめるのに使っているので強制終了はできません。あしからず ・メモ gcc2.95.3-5で-Wallオプションでおこられないことを確認済み。 規格マニアも(たぶん)安心。 ・裏技(バグ技) 掛け点に負数を入れると。。 \rにしようかとも思いましたが、難しくなりすぎるので却下。 \nでも十分ムズイですが。 横を3ラインじゃなくて1ラインにすればもう1行はいけそうですな。 全然関係ないですが>376の(*p>47&*p<58)の&は&&のミスではないです。 比較系の演算子(と!)は、&よりも優先順位が高く、かつ、0/1を返すことが 保証されているので。
>>397 >全然関係ないですが>376の(*p>47&*p<58)の&は&&のミスではないです。
そうでしたか。
手元にちゃんとした資料が無かったので確認できませんでした。
==を-に変換できたら組みこんでみます。
自分の知らないところでどんどん短くなっていく感覚、いいなあ(w 演算子減らしてでも、複数の文の実行 (...) (...) サポートできないだろうか? +で連結するのもアレなので…。 それと、関数定義の空読みの時とりあえず0を使ってますけど、 割り算のことを考えると0以外しないとまずいかも。
みんなで短くするにはですね、元となった圧縮前のコメント入りソースコードが 必要だと思いますがどうでしょう?パート1では砂嵐とかオセロとか オリジナルのソースもアップされていたよね。 今は釣り馬鹿日誌もあるから、そちらでオリジナルコードを披露してみては?
401 :
デフォルトの名無しさん :02/10/03 23:14
ホシュ
ワラタ
>>410 はすげぇ使えることを書かねばなりません。
406 :
デフォルトの名無しさん :02/10/04 06:37
まだ大丈夫
あ、ageちゃったスマソ
こういうのは人がいないと盛りあがらんな
↓よろ
ruby!
ィャ
?
>>359 &Fileフカーツ!!
using System;using System.Drawing;using System.Windows.Forms;class B:Form{Image
i;B(){Menu=new MainMenu(new MenuItem[]{new MenuItem("&File",new MenuItem[]{new
MenuItem("&Open...",new EventHandler(c))})});AutoScroll=1>0;}void c(object o,
EventArgs e){OpenFileDialog d=new OpenFileDialog();if((int)d.ShowDialog()==1){i
=Image.FromFile(d.FileName);AutoScrollMinSize=i.Size;Invalidate();}}[STAThread]
static void Main(){Application.Run(new B());}protected override void OnPaint(
PaintEventArgs e){if(i!=null)e.Graphics.DrawImage(i,new Point(0));}}
「&Fileは滅びぬ。何度でも甦るさ!ファイルメニューこそ、人類の夢だからだ!!」
>>413 その代わり、スクロールバーを動かすと絵がおかしくなる。
「絵がぁー!絵がぁぁーーっ!!」
・・・だからAutoScrollPosition(
>>359 )になってたのか。
納得。しかし書き換えると17文字超過・・・
>>417 あ,どっかで見た名前だと思ってたらあいつかあ。
「見たまえ,これが納期を7日間延ばしたという天のバグだ。インドらの野望とも呼ばれているがね」
AutoScrollPositionってPoint型だから、 e.Graphics.DrawImage(i,AutoScrollPosition); でOKなのか。スクロールしても大丈夫そうだし。 using System;using System.Drawing;using System.Windows.Forms;class B:Form{Image i;B(){Menu=new MainMenu(new MenuItem[]{new MenuItem("&File",new MenuItem[]{new MenuItem("&Open...",new EventHandler(c))})});AutoScroll=1>0;}void c(object o, EventArgs e){OpenFileDialog d=new OpenFileDialog();if((int)d.ShowDialog()==1){i =Image.FromFile(d.FileName);AutoScrollMinSize=i.Size;Invalidate();}}[STAThread] static void Main(){Application.Run(new B());}protected override void OnPaint( PaintEventArgs e){if(i!=null)e.Graphics.DrawImage(i,AutoScrollPosition);}} 今度こそ・・・
>>420 それでは画像が解像度情報を持つときに、
1ピクセルが1ピクセルとして表現されないから、
そこを何とかしないと、
スクロールバーと画像がちゃんと同期しないよ。
>>421 指摘サンクス。サンプル.jpgでテストしてたんで気づかなかった。
やはりRectangle(AutoScrollPosition,i.Size)でやるべきか・・・
適応型算術圧縮展開
exec [D|E] < src > dst
unsigned U[257],C=1,L,H=~0,W,X=256,N,K,A,Z,r,s,t,F,T=1<<30;g(a){for(r=0;a--;r=r
+r|t>>--s&1)!s?s=8,t=getchar():0;}p(a,b){for(;b--;++s>7?putchar(t),s=t=0:0)t=t+
t|a>>b&1;}o(x){for(p(x=L>>x,!Z);F;F--)p(~x,!Z);}main(i,v)char**v;{for(Z=69-*v[1
],Z?g(32),N=r:0;C;Z*C&&putchar(C-1)){Z||(i=getchar()+1);W=(H-L)/(K=++A+X);for(C
=X;K+=~U[C],Z?W*K>N-L:C-i;C--);H=L+W*(++U[C]+K)-1;for(L+=W*K;K=L^H,~K
>>31 |K&L&T
;L+=L,H-=~H,N+=Z?g(1),N+r:0)K
>>31 ?++F,N^=T,L&=T-1,H|=T:o(31);for(K=A
>>16 ?A=0:H;
K<=X;)A+=U[K++]/=8;}Z||(++F,o(30),p(0,37));}
昔作ったScheme風Lispインタープリタ。せっかく作ったので貼っとく参考にしてくれ。 機能減らさんと縮みそうにないけどな。 #include <stdio.h> typedef*P,N;N H[4096],F,g[256],m,X,r,t,e,s,c,i;P A=H,D=H+1,M=H+2;G(x){x&&!(x&3) &&M[x]!=m?M[x]=m,G(A[x]),G(D[x]):0;}S(){F=0;for(i=4092;i;i-=4)M[i]-m?A[i]=F,F=i ,M[i]=m:0;}C(x,y){N z;if(!F){m++;G(x);G(y);G(X);G(r);G(t);G(e);G(s);for(i=256;i --;)G(g[i]);S();}F||exit(puts("nomem"));F=A[z=F];A[z]=x;D[z]=y;return z;}Q(){(c =getchar())<0&&exit(0);c<33&&Q();}L(){N x;Q();return c-41?x=R(),C(x,L()):0;}R() {return c-40?c*8+2:L();}a(x){putchar(x);}W(x){a(x&1?36:x&2?x/8:40);if(!(x&3)){ while(x)W(A[x]),a(32),(x=D[x])&3?a(46),W(x),x=0:0;a(41);}}U(x){s=C(x,s);}O(){i= A[s];s=D[s];return i;}B(x){x?B(D[x]),X=A[x],E(),U(r):0;}N*V(x,y){return y?A[i=A [y]]-x?V(x,D[y]):&D[i]:&g[x/8];}b(){for(;t;t=D[t])e=C(C(A[t],O()),e);for(t=r;X= A[t],D[t];t=D[t])E();}E(){N x=1;U(e);U(t);while(x)x=0,r=X?~X&2?(t=D[X],r=A[X])- 650?r-610?r-266?r-586?B(t=X),O(),r&1?i=r/8,i?i-1?i-3?i-4?i-5?t=O(),C(t,O()):O() ==O()?930:0:(W(t=O()),t):(Q(),R()):D[O()]:A[O()]:(e=A[r],t=A[i=D[r]],r=D[i],b() ,x=1):(X=A[t],E(),X=r?A[D[t]]:A[D[D[t]]],x=1):(X=A[D[t]],E(),*V(A[t],e)=r):C(e, t):A[t]:*V(X,e):0;t=O();e=O();}main(){g[65]=1;g[68]=9;g[67]=17;g[82]=25;g[87]= 33;g[61]=41;while(1)Q(),X=R(),E(),W(r),a(10);}
シンボルはすべて一文字 スペシャルフォームは (! var exp) ; 変数に代入 (Q exp) ; クオート (L param body...) ; λ (I test then else) ; If then else ビルトイン関数は (C a d) ; cons (A x), (D x) ; car, cdr (R) (W x) ; read, write (= x y) ; eq? とりあえずハノイの塔 (! h (L (f t v d) (I (= d ()) () ((L () (h f v t (D d)) (W (C (A d) (C f (C t ())))) (h v t f (D d))))))) (h (Q A) (Q B) (Q C) (Q (4 3 2 1))) 末尾再帰で無限ループ (! z (L (x) (z x))) (z (Q a))
>>425 げ、末尾再帰対応っすか。
参りました。
ラムダを見るとサザエサンハ ユカイダナのAAを連想してしまう…
DES暗号化ってありましたっけ?
>>420 トイレでガンバッてたら、namespace使うのを思いついた。
「釣りバカ」の
>>24 も参考にさせてもらいました。
namespace System{using Drawing;using Windows.Forms;class B:Form{void c(object
o,EventArgs e){OpenFileDialog d=new OpenFileDialog();if((int)d.ShowDialog()==1
){b=new Bitmap(d.FileName);AutoScrollMinSize=b.Size;Refresh();}}protected
override void OnPaint(PaintEventArgs e){if(b!=null)e.Graphics.DrawImage(b,new
Rectangle(AutoScrollPosition,b.Size));}Bitmap b;[STAThread]static void Main(){
Application.Run(new B());}B(){Menu=new MainMenu(new MenuItem[]{new MenuItem(
"&File",new MenuItem[]{new MenuItem("&Open...",new EventHandler(c))})});}}}
>>430 *^ー゚)b グッジョブ!!
namespace System・・・それは流石に思いつかなかったw
尽くせるだけの手を尽くしてもうだめぽと思ってたけど、
探せばあるんだな・・・
Refresh()は全く知らなかったんでMSDNで調べてきます。
>>429 関係ないけどDES符号ってどっかの国の外へは持ちこんじゃいけないとか
話なかった?
>多くの暗号学者によって研究されたにもかかわらず解読されたことはありません。 日経エレクトロニクス no.825(2002-7-1)号 P228「TechTale」より >「あのー,山岸さん。ちょっと相談があるのですが」 >「どうしたー」 >「例の実験の件なんですが。実はですね,どうやら成功したようなんです」 >「え?何だって?」 >「DESの解読、うまくいったんですよ」
(DESだったかは忘れたが)輸出禁止なもんだから、どうにかして 広めたいと思ったある人は、ソースコードを載せた本を出版した という話を聞いたことがある(本ならOKなんかいな?)。その本には ご丁寧にOCRの方法まで載ってたとか。。
DESで言うならcryptぐらいをターゲットにするのが妥当かな
DESは転置テーブルとか謎の置換配列とかだけでかなりでかいぞ。
保守
IBM->HALみたいなのは簡単ですか? って、簡単でしたね。 main(a,v){int c;while((c=getchar()+1))putchar(a>1?c-2:c);} 引数なしでエンコード、ありでデコード hal < hal.c | hal dmy > hal.dec
442 :
デフォルトの名無しさん :02/10/08 23:40
保守
あ、間違えた・・ main(a,v){int c;while(c=getchar()+1)putchar(a>1?c:c-2);}
えーと、保守はageなくても大丈夫だよ?>442
little endian用MD5。もう少し縮みそうな気もするが。
#include <stdio.h>
double sin(),fabs();char D[64]={128},b[128];unsigned s[4],X[16],C[2],x,y,z,w,E[
]={0x67452301,0xefcdab89,0x98badcfe,271733878};i,j,k,l,m,n,t,u;main(a,v)char**v
;{FILE*f=fopen(v[1],"rb");do{l=n=fread(b,1,u=64,f);C[1]+=((*C+=l*8)<l*8)+l
>>29 ;
if(l-u){for(i=*C/8%u,j=i<56?56:120,i=j-i;i--;b[l+i]=D[i]);l=j+8;memcpy(b+j,C,8)
;}for(m=0;m<l;m+=u){memcpy(X,b+m,u);for(i=4;i--;s[i]=E[i]);for(j=0;j<4;j++)for(
i=-1,k="@AE@"[j];++i<16;k+="AECG"[j])w=t=(16-i)%4,x=s[++w%4],y=s[++w%4],z=s[++w
%4],y=s[t]+(j-3?j-2?j-1?x&y|~x&z:x&z|y&~z:x^y^z:y^(x|~z))+(w=fabs(sin(j*16+1.+i
))*(~0U+1.))+X[k=(k-u)%16],z="GLQVEINTDKPWFJOU"[j*4+i%4]-u,s[t]=x+(y<<z|y>>32-z
);for(i=4;i--;E[i]+=s[i]);}}while(n==u);for(memcpy(b,E,16);i<15;)printf("%02x",
b[++i]&255);}
446 :
デフォルトの名無しさん :02/10/09 03:17
なんか、過去に出された作品見ると、 ・79文字+改行 ・78文字+改行 の2派が存在するみたいですけど、どっちが正しいんでしょうか?
>>445 こりゃまた圧縮されてるね。
MD5って128bitを吐き出す一方向ハッシュ関数のことなのか。
ファイル名を引数にして実行するのね。
自分自身を実行すると
c:\md5\Release>md5 md5.exe
a94f0a85a2906a403c16c7fc3ec78562
おー、なんか動いてる。やるね。
問題はこの数値があってるかどうかの検証が分からないことか・・・。
md5sum.exe拾ってきて、検証するのは?
Cygwinに入ってるだろ>md5sum
>>446 昔の端末は一行80文字だった。
それに収まるように、ということなので79文字+改行が正しい。
>>445 一行弱縮めてみた。
#include <stdio.h>
double sin(),fabs();i,j,l=16,m,n,t,u=64,g=16;unsigned s[4],X[32],B,C,x,y,z,w,k,
E[4]={0x67452301,0xefcdab89};main(a,v)char**v;{FILE*f=fopen(v[1],"rb");E[2]=~*E
;E[3]=~E[1];do{n=fread(X,1,u,f);C+=n*8;B+=(C<n*8)+n
>>29 ;if(n-u){i=C/8%u;X[l=i<
56?14:30]=C;X[i/4]|=128<<i%4*8;X[++l]=B;}for(m=0;m<l;m+=g){memcpy(s,E,g);for(j=
0;j<4;j++)for(i=-1,k="@AE@"[j];++i<g;k+="AECG"[j])w=t=(g-i)%4,x=s[++w%4],y=s[++
w%4],z=s[++w%4],y=s[t]+(j-3?j-2?j-1?x&y|~x&z:x&z|y&~z:x^y^z:y^(x|~z))+(w=fabs(
sin(j*g+1.+i))*(~0U+1.))+X[m+k%g],z="GLQVEINTDKPWFJOU"[j*4+i%4]-u,s[t]=x+(y<<z|
y>>32-z);for(i=4;i--;E[i]+=s[i]);}memset(X,0,u);}while(n==u);for(;++i<g;printf(
"%02x",(E[i/4]>>i%4*8)&255));}
>>450 改行が 0x0A なのか, 0x0D 0x0A なのかという質問じゃないのかえ?
あ,Mac忘れてた。 0x0D も加えてくれ
>>439 あのテーブルってどうやって作ったんだろうなあ
生成できればなあ。
なんか強力な暗号で7行で書けそうなのってないかな?
>>452 端末から送るのがCRでホストが送るのがCRLFだっけ?
内部コードの話ならOS-9とかもCRだったかな?
>>454 端末からもホストからもCRでもLFでもなんでも趣味の世界です
一番多いパターンにあわせると
>>454 IBMの技術者と思われ。
S-BOXの中身はどうでもいいよ、とDESの仕様書には書いてあるけど
みんなそのまま使ってるしね。
ちなみにS-BOXの一部は
static const int sbox[8][4][16]= {
{ { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 },
{ 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 },
{ 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 },
{ 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 }
},
こんなのが8個もあっては7行じゃ絶対無理っぽい・・・。
457 :
デフォルトの名無しさん :02/10/11 20:50
S-Box転置のない暗号化って少ないよね Fealとか、EPOCHとかどう?日本のだけど。
458 :
デフォルトの名無しさん :02/10/11 23:37
どーでもいい機能を追加したら9行になった上にwinmm.libリンクしないとしないと動かないさいたまべんち。 #include <windows.h> #include <stdio.h> #define _ (double)rand()/(double)RAND_MAX INT WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,INT){DWORD current=timeGetTime(); char msg[256];LPCSTR str="さいたま";HDC hdc=GetDC(NULL);for(int i=0;i<1<<16; i++){SetBkColor(hdc,RGB(255*_,255*_,255*_));TextOut(hdc,1024*_-10,768*_-10, str,strlen(str));}ReleaseDC(NULL,hdc);InvalidateRect(NULL,NULL,FALSE); sprintf(msg,"%f SaitamPerSecond",float(1<<16)/float(timeGetTime()-current)); MessageBox(NULL,msg,"SaitamaBenchMark",MB_OK);return 0;} ベンチじゃないと6行。 #include <windows.h> #define _ (double)rand()/(double)RAND_MAX INT WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,INT){ LPCSTR str="さいたま";HDC hdc=GetDC(NULL);for(int i=0;i<1<<16;i++) {SetBkColor(hdc,RGB(255*_,255*_,255*_));TextOut(hdc,1024*_-10,768*_-10,str, strlen(str));}ReleaseDC(NULL,hdc);InvalidateRect(NULL,NULL,FALSE);return 0;} …逝ってきます。
>445のMD5
512M以上でバグってたのを修正、>451から約1行削減
#include <stdio.h>
double sin(),fabs();size_t s[4],X[32],B,C,x,y,z,k,E[4],i,j=8,l=16,m,n=64,u=64,g
=16;main(char*a,char**v){FILE*f=fopen(v[1],"rb");for(a=E;j--;)a[j+8]=~(a[j]=1+j
*34);for(a=X;n/u;memset(X,m=0,u))for(n=fread(X,1,u,f),C+=n*8,B+=C<n,n-u?X[l=14+
n/56*g]=C,a[n]|=128,X[++l]=B:0;m<l;m+=g){for(memcpy(s,E,g);k="@AE@"[++j];)for(i
=0;i<g;s[-i++&3]=x+(y<<z|y
>>32 -z),k+="AECG"[j])x=s[1-i&3],y=s[2-i&3],z=s[~i&3],
y=s[-i&3]+(j-3?j-2?j?x&z|y&~z:x&y|~x&z:x^y^z:y^(x|~z))+X[m+k%g]+fabs(sin(j*g+i+
1.))*(~0U+1.),z="GLQVEINTDKPWFJOU"[j*4+i%4]-u;for(;j--;E[j]+=s[j]);}for(a=E;++j
<g;printf("%02x",a[j]&255));}
#include <windows.h>
#include <stdio.h>
INT WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,INT){DWORD c=timeGetTime();char m
[256];LPCSTR s="さいたま";HDC h=GetDC(0);for(int i=0;i<1<<16;i++){SetBkColor(h,
RGB(rand()
>>7 ,rand()
>>7 ,rand()
>>7 ));TextOut(h,4*(rand()
>>7 )-9,3*(rand()
>>7 )-9,s
,strlen(s));}ReleaseDC(0,h);InvalidateRect(0,0,FALSE);sprintf(m,"%f Saitama/s",
(1<<16)/float(timeGetTime()-c));MessageBox(0,m,"SaitamaBench",MB_OK);return 0;}
…なにやってんだ、オレ。
84.4SaitamaPerSecond ・・・ってくだらなすぎ(w もうちっと面白いベンチマークキボンヌ
131Saitamaだった。 AAのさいたまが出てくるといいなぁ。
463 :
デフォルトの名無しさん :02/10/12 04:26
>>462 あのAAって元々何なの?
自民党のマスコット?
464 :
デフォルトの名無しさん :02/10/12 04:35
1 let a= 10 2 let b= 20 3 let c= a+ b 4 let d= c-a 5 let e= d-b 6 print e 7 goto 1
465 :
デフォルトの名無しさん :02/10/12 04:39
void main(int ac, char[av]){ for(;;){ ; ; ; ; } }
MSに投げてた問い合わせが返ってきますた。
VS.NETのバグで本来[STAThread]は不要、
>>279 のコードは無罪とのこと。
正直、スマンカッタ。
>>279
お題:ボンバーマソ テトリスが7行なら余裕でそ。 問題は2PにするかCPUにするかだが、2Pが妥当か。
>468 >テトリスが7行なら余裕でそ。 だったら、さっさとお前が作れよ
>>471 「さいたま」の太陽だけとかなら、何とかなる?
>>472 sprintfとかMessageBoxとかを削れば(出力文字を減らせば)可能かも。
今日暇があったらまたやってみます〜。
>>446 俺は78+改行で作っていたけど、それは一部のUnix端末では79で折り返す
普通じゃない端末があったから。可能なら78+改行を目指す方がいいけど、
もちろん79+改行で何の問題もないです。
>>474 そんなものがあったのか…
ちなみに何ていう端末か教えて欲しい。
誰か78桁で折り返す端末を見つけ出せっ!
>>475 MSXだと縦横のサイズを変えられる。
あとは、端末エミュレータ(KTERMとか)。
・・・だめ?
8行になってしまった。鬱だ。 しかも半角と全角が混ざっているからずれるし。 色々変態なこと書いてるのは目を瞑ってください。 #include <windows.h> #include <stdio.h> INT WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,INT){HDC h=GetDC(0);char m[64];int x,y;LPCSTR s[5]={" \ │ / "," / ̄\ ","─( ゚∀゚ )─"," \_/ ", " / │ \ "};LONG c=timeGetTime();for(int i=0;i<32768;i++){SetBkColor(h,rand ()<<9^rand());x=rand()%1024-20,y=rand()%768-20;for(int n=0;n<5;n++)TextOut(h,x, y+18*n,s[n],12);}InvalidateRect(0,0,0);sprintf(m,"%f Saitama/s",32768000/float( timeGetTime()-c));ReleaseDC(0,h);MessageBox(0,m,"SaitamaBench",0);return 0;}
>>477 ループ回数を10の倍数にして、
sprintfをwsprintfにして、%d.%dみたいに書けば、
sprintfが取れて、stdio.hをインクルードしなくて済むんじゃない?
>>477 どうせ機種依存なのだからstdio.hはいらないといってみるテスト
>>477 はcppだと思うので、
stdio.hの代わりに
EXTERN_C int sprintf(PSTR,PCSTR,...);
でどうよ。
さいたま〜縮めてみた〜、太陽がうまくこぴぺできなかった〜、直しといて〜 後はrand()を関数ポインタで置き換えるればいいかな〜 #include <windows.h> #include <stdio.h> INT WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,INT){char m[64];LONG c=timeGetTime ();HDC h=GetDC(0);for(int x,y,n,i=32768;i--;)for(SetBkColor(h,rand()<<9^rand()) ,x=rand()%1024-20,y=rand()%768-20,n=5;n--;)TextOut(h,x,y+17*n,"\ │ / \0 " " / ̄\ \0─( ゚∀゚ )─\0 \_/ \0/ │ \ "+n*13,12);InvalidateRect (0,0,0);sprintf(m,"%f Saitama/s",32768000/float(timeGetTime()-c));ReleaseDC(0,h );MessageBox(0,m,"SaitamaBench",0);return 0;}
色指定とか座標指定とかをもっと短く書けるとうれしいけど意外に短くならないんだよなぁ…。 やっぱ見栄えとソース量はアンビバレンツなのだろうか…(泣) ちなみに結果表示の文字に半角カタカナとかを用いるとちょっと縮まりますね(ぉ
483 :
デフォルトの名無しさん :02/10/16 18:34
age
>>481 11998.535335 Saitama/sダターヨ。
485 :
デフォルトの名無しさん :02/10/17 02:15
結果表示を少し変えて七行達成。 確認はcygwinのg++ Version 2.95.3-5 コンパイルは g++ saitama.C -mwindows -luser32 -lwinmm -mno-cygwin でやった。 #include <windows.h> extern"C"{int rand();int sprintf(char*,char*,...);}INT WINAPI WinMain(HINSTANCE ,HINSTANCE,LPSTR,INT){int x,y,n,j,i=1<<15;LONG c=timeGetTime();char m[i];HDC h= GetDC(0);for(j=i;i--;)for(SetBkColor(h,rand()<<9^rand()),x=rand()%1024-20,n=5,y =rand()%768-20;n--;)TextOut(h,x,y+17*n,"\ │ / \0 / ̄\ \0─( ゚∀゚ )" "─\0 \_/ \0/ │ \ "+n*13,12);InvalidateRect(0,0,0);sprintf(m,"%f " "埼玉s",j*1e3/(timeGetTime()-c));ReleaseDC(0,h);MessageBox(0,m,"埼玉Bench",0);}
>>485 VC++6でコンパイルしてみた。
saitama.cpp(3) : error C2057: 定数式が必要です。
saitama.cpp(3) : error C2466: サイズが 0 の配列を割当てまたは宣言しようとしました。
saitama.cpp(3) : error C2133: 'm' : サイズが不明です。
saitama.cpp(7) : warning C4508: 'WinMain' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。
cl.exe の実行エラー
がーそΣ( ̄□ ̄;)
487 :
デフォルトの名無しさん :02/10/17 23:16
コンパイルオプションもプログラムの一部だよなぁとおもう今日この頃。
>>487 するってーと、プログラム本体が
#include <windows.h>
X
で、コンパイルオプション(コマンドライン)が
g++ -DX="extern\"C\"{int rand();int sprintf(char*,char*,...); ..." \
saitama.C -mwindows -luser32 -lwinmm -mno-cygwin
というのはありですか?
>486 VC持ってないからチェキ出来ないけどコレでどうよ。 #include <windows.h> extern"C"{int rand();int sprintf(char*,char*,...);}INT WINAPI WinMain(HINSTANCE ,HINSTANCE,LPSTR,INT){int x,y,n,j,i=1<<15;LONG c=timeGetTime();char m[99];HDC h =GetDC(0);for(j=i;i--;)for(SetBkColor(h,rand()<<9^rand()),x=rand()%1024-20,n=5, y=rand()%768-20;n--;)TextOut(h,x,y+17*n,"\ │ / \0 / ̄\ \0─( ゚∀゚ )" "─\0 \_/ \0/ │ \ "+n*13,12);InvalidateRect(0,0,0);sprintf(m,"%f " "埼玉s",j*1e3/(timeGetTime()-c));ReleaseDC(0,h);MessageBox(0,m,"埼玉Bench",0);}
>>489 ワーニング出るけどコンパイルできたよん(VC++6)
25381.874516 埼玉s ですた。
これで、VC++6でもワーニング出ないと思う。 #include <windows.h> EXTERN_C{int rand(),x,y,n,j,i=1<<15;}INT WINAPI WinMain(HMODULE,HMODULE,PSTR, INT){ULONG k,c=timeGetTime();char m[99];HDC h=GetDC(0);for(j=i;i--;)for(SetBk\ Color(h,rand()<<9^rand()),x=rand()%1024-20,n=5,y=rand()%768-20;n--;)TextOut(h, x,y+17*n,"\ │ / \0 / ̄\ \0─( ゚∀゚ )─\0 \_/ \0/ │ \ " +n*13,12);InvalidateRect(0,0,0);k=timeGetTime()-c;wsprintf(m,"%d.%04d 埼玉s",( j*=1000)/k,j%k*1000/k);ReleaseDC(0,h);MessageBox(0,m,"埼玉Bench",0);return 0;}
結果表示を元に戻してみた。 これ、VC++でもOK? #include <windows.h> EXTERN_C{int rand(),x,y,n,j,i=1<<15;}INT WINAPI WinMain(HMODULE,HMODULE,PSTR,I\ NT){ULONG c=timeGetTime();char m[99];HDC h=GetDC(0);for(j=i;i--;)for(SetBkColor (h,rand()<<9^rand()),x=rand()%1024-20,n=5,y=rand()%768-20;n--;)TextOut(h,x,y+n* 17,"\ │ / \0 / ̄\ \0─( ゚∀゚ )─\0 \_/ \0/ │ \ "+13*n, 12);InvalidateRect(0,0,0);c=timeGetTime()-c;j*=1000;ReleaseDC(0,h);wsprintf(m, "%d.%04d saitama/s",j/c,j%c*1000/c);MessageBox(0,m,"SaitamaBench",0);return 0;}
30文字ほど減らしてみますた。 windows.hがstdlib.hをincludeしているので、randの宣言はやめた。 #include <windows.h> char*p,m[]="\ │ / / ̄\ ─( ゚∀゚ )─ \_/ / │ \ ";int x ,y,j,i=1<<15;INT NTAPI WinMain(HMODULE,HMODULE,PSTR,INT){ULONG c=timeGetTime(); HDC h=GetDC(0);for(;j++-i;)for(SetBkColor(h,rand()<<9^rand()),x=rand()%1024-20, y=rand()%768-37,p=m;*p;p+=12)TextOut(h,x,y+=17,p,12);i*=j=1000;InvalidateRect(0 ,0,0);c=timeGetTime()-c;wsprintf(m,"%d.%03d saitama/s",i/c,i%c*j/c);ReleaseDC(0 ,h);return!MessageBox(0,m,"SaitamaBench",0);}
貴方たちは神や… #後はAAに黒い四角が紛れ込むのが問題かなぁ…
黒い四角は、AAの13バイト目に半角の空白があるのが原因。 ↓そこだけ修正したver. #include <windows.h> char*p,m[]="\ │ / / ̄\ ─( ゚∀゚ )─ \_/ / │ \ ";int x ,y,j,i=1<<15;INT NTAPI WinMain(HMODULE,HMODULE,PSTR,INT){ULONG c=timeGetTime(); HDC h=GetDC(0);for(;j++-i;)for(SetBkColor(h,rand()<<9^rand()),x=rand()%1024-20, y=rand()%768-37,p=m;*p;p+=12)TextOut(h,x,y+=17,p,12);i*=j=1000;InvalidateRect(0 ,0,0);c=timeGetTime()-c;wsprintf(m,"%d.%03d saitama/s",i/c,i%c*j/c);ReleaseDC(0 ,h);return!MessageBox(0,m,"SaitamaBench",0);}
error C2055: 関数定義内で仮引数リスト以外が使われていました。
>>497 環境および、エラーの発生したと思われる箇所をどうぞ
スマソ
ソース:
>>496 環境:VC++6.0 エラー:3行目
OS:Win98SE
>>496 原因はわかっていたけど、素早い修正に感謝♪
しっかし、見れば見るほど恐ろしいソースコードだ…がくがくw
盛り上がってるネ。 俺はWindows持ってないんだけど...
503 :
デフォルトの名無しさん :02/10/19 18:35
>>496 呼び出し規約から、WinMainの引数型は省略できるよー
WinMain(p,q,r,s)〜
#include <windows.h>
char*p,m[]="\ │ / / ̄\ ─( ゚∀゚ )─ \_/ / │ \ ";int x
,y,j,i=1<<15;INT NTAPI WinMain(q,r,s,t){ULONG c=timeGetTime();
HDC h=GetDC(0);for(;j++-i;)for(SetBkColor(h,rand()<<9^rand()),x=rand()%1024-20,
y=rand()%768-37,p=m;*p;p+=12)TextOut(h,x,y+=17,p,12);i*=j=1000;InvalidateRect(0
,0,0);c=timeGetTime()-c;wsprintf(m,"%d.%03d saitama/s",i/c,i%c*j/c);ReleaseDC(0
,h);return!MessageBox(0,m,"SaitamaBench",0);}
>>493 警告でるけどVCもokです
cl saitama.c user32.lib gdi32.lib winmm.lib
精度は落ちるし、文字数も増えるけど、 timeGetTimeの代わりに、GetTickCountを使うと、winmm.libが要らなくなる。
>>505 精度が高いからtimeGetTime使ったけど、
特に細かく計測する必要は無いと考えればGetTickCountでもいいかもしれません。
winmm.libがいらないって言うのはおいしいのでw
>>502 ならばMac版とか作ってみるテスト。
extern "C"{extern int rand();}int main(){WindowPtr w;Rect R;short h,v;RGBColor
b={0,0,0},c;int i=65536;InitGraf(&qd.thePort);InitFonts();GetFNum("\pOsaka",
&h);SetRect(&R,0,0,1024,768);InitWindows();w=NewCWindow(0,&R,"\pSaitamaBench",
1,0,(WindowPtr)-1,1,0);SetPort((GrafPtr)w);TextFont(h);for(;i--;){c.red=rand()
*2;c.green=rand()*2;c.blue=rand()*2;h=(rand()
>>5 )-11;v=3*(rand()
>>7 );MoveTo(h,
v);SetRect(&R,h-2,v-11,h+48,v+2);RGBForeColor(&c);PaintRect(&R);RGBForeColor(
&b);DrawString("\pさいたま");}return 0;}
CW7、MacOS9.2で確認。
ベンチマークついてないし、AAも出てこないのでsage。
>>507 CW持ってません。
MPWでもコンパイルできるのかな、
使ったことないけど(w
510 :
デフォルトの名無しさん :02/10/22 02:28
>> 507 てかObject-Cで書いてくだされ(笑
511 :
デフォルトの名無しさん :02/10/22 04:12
>>510 Objective-Cか。iveがたらなんだか。。(´・ω・`)
ネタが無いみたいだね。 過去の7行未達コードでも上げれば?
EUC(LF)/ShiftJIS(CR+LF)変換
exec S euc sjis
exec E sjis euc
#include<stdio.h>
int x=256,c,d;main(e,v)char**v;{FILE*r=fopen(v[2],"rb"),*w=fopen(v[3],"wb");for
(e=*v[1]-83;~(c=getc(r));c&&putc(c,w))c=c
>>7 ?e?c-161U>62?d=getc(r),c>249?d|=c*x
,c=d%x,d-=d>64091?3356+(c<92?67:c-128U<28):c>73?c-85U>2?30837+(c-84?c-91?(c>83?
c-88?98-c:0:40)-1447:0:21):2907:2897,c=d/x,d%=x:0,(128|c+c+31+d/159)*x+d+(d>158
?2:97-d/128):c+36352:(d=getc(r),142-c?d-=c&1?97-d/224:2,((c-1)/2+49+c/223*64)*x
+d:d):c-13?10-c|e?c:3338:0,c/x&&putc(c/x,w);fclose(r);fclose(w);return 0;}
514 :
デフォルトの名無しさん :02/10/26 18:52
age
515 :
デフォルトの名無しさん :02/10/26 19:38
MP3エンコーダ 不可能ならu-adpcmでもいいから.
516 :
デフォルトの名無しさん :02/10/26 23:13
なんかあんたらかっこよくみえるよ・・
517 :
デフォルトの名無しさん :02/10/28 10:57
はやくUmlToJavaつくれや
519 :
デフォルトの名無しさん :02/10/28 17:07
7行C++逆コンパイラ作ってくれ。 もしできたら俺の処女をあげるよ。
おまいら適当なこと言ってるんじゃない。
実用的な7行(ホントに使うやつはいないと思おうが)を書いた
>>513 の流れを汲んで
次はShiftJIS→UniCode(エンコードは何でもOK)だろ!!
WindowsAPI使えば数行だと思うけど。
Σ( ̄□ ̄; そうなの!? アホじゃん、俺。
525 :
デフォルトの名無しさん :02/10/28 22:12
お前ら、
>>504 とかのさいたまベンチ何枚ですか?
おれは1Gのノート(XGA)で 9309.303 saitama/sです。
>>525 12946.661saitama/s P4-1.7G
#include <stdio.h> int t,m,b[2];int w(int b){int r=0,a[]={7,56,73,84,146,273,292,448};for(t=0;t< 8;t++)if((b&a[t])==a[t])r=1;return r;}int s(int l,int p){int i,v,c=0,n=-1;for (i=1;i<512;i*=2)if(!(i&(b[0]|b[1]))){if(w(b[p]|i))v=1;else{b[p]|=i;v=-s(l+1,! p);b[p]^=i;}c=1;if(v>n){m=l?m:i;n=v;}}return c?n:0;}void d(){for(t=0;t<9;t++) {putchar((b[0]&(1<<t))?'X':(b[1]&(1<<t))?'O':'-');if(t%3==2)printf("\n");}} int main(){while(1){d();scanf("%d",&t);b[0]|=(1<<t);s(0,1);b[1]|=m;}return 0;} ○×作ってみた。0から8までを入力します。 チェックしてないので既に置いてある所は置かないでください。
>>520 UNICODEはテーブル持ってないと変換できなかったと思う。
(WindowsAPIもテーブル使ってたはず。記憶違いだったらすまん)
ずらして変換できるならJISだが、2番煎じだなぁ
あ、
>>513 にS-JIS<=>EUC<=>JIS変換で7行、時間があればやってみようかな
勝手に終局判定付けさせてもらいました。関数の返り値の型を 省略したので、-Wallで怒られるようになってしまいましたが。 あと、終局面は表示されませぬ。。 #include <stdio.h> int t,m,r,b[2],a[]={7,56,73,84,146,273,292,448};w(int b){for(r=t=0;t<8;t++)r+= (b&a[t])==a[t];return r;}s(int l,int p){int i=1,v,c=0,n=-1;for(;i<512;i*=2)if( !(i&(*b|b[1]))){if(w(b[p]|i))v=1;else{b[p]|=i;v=-s(l+1,!p);b[p]^=i;}c=1;if(v>n ){m=l?m:i;n=v;}}return c?n:0;}main(){for(;!r;scanf("%d",&t),r=w(*b|=1<<t)?1:w( (s(0,1),b[1]|=m))?5:(*b|b[1])==511?10:0)for(t=0;t<9;t++)putchar(*b&1<<t?'X':b[ 1]&1<<t?'O':'-'),r=t%3&2?puts(""):0;puts("\0win\0lose\0draw"+r);return 0;}
前スレの囲碁を削りますた、間違ってたら誰かデバッグよろ(ぉ int w[7]={1,-1,11,-11},s,d=1,b[121],u=4,y,i,m,g,e,k;r(a,c,f){int z,i=4;b[a]=f?0 :~b[a];for(s++;i--;b[z]-c||r(z,c,f))d+=!b[z=a+w[i]];b[a]^=-!f;}main(z){for(;d;) {for(;m=z=i++<120;printf("%.2s","・○● \n"+(b[i]=y-10?y&&i-11U<99?b[i]:6:8))) y=i%11;for(;i--;g-4&&k>m?m=k,z=i:0)for(k=g=0,e=4*!b[i];e--;!b[y]?k+=10:g++)b[y= i+w[e]]==u?r(y,1,d=s=0),k+=s*(d-1U<3?d-3?300:20:0):0;if(u<4||(scanf("%d%d",&z,& y),!b[z+=y*11]||puts("Err"))?d=z:0){for(i=4;i--;b[z]=u^6)b[k=z+w[i]]-u||(r(k,u, d=s=0),d||r(k,u,1,w[2+u]+=s));r(z,u^=6,d=0);}}printf("ps\n%d,%d\n",w[6],w[4]);}
>>530 元が13行だったのを考えるとすごいね。
ただ、途中までうまく動いているようだけど、人間が囲んだ石が取れないで
残ったままになったりする。もともとのソースのバグかもしれんけど。
それとあまりにも弱すぎて打っていて面白くないなぁ。
オセロはまだ楽しめたけど。
ルールどおりはともかく囲碁は7行では難しすぎるかも。
囲碁は世界レベルのアルゴリズムですら アマ1段に勝てませんので・・・
533 :
デフォルトの名無しさん :02/11/01 17:00
あがっちゃってる。。。 ごめんなさいm(_ _)mごめんなさいm(_ _)m
おいおまえら。UmlToJavaはできましたか?
私は19才の♀で〜す。 彼氏募集中です。 年齢は20〜25ぐらいの人がいいなぁと思っています。 彼女募集中な人は私に電話下さい! 電話番号は 09084600360 だよ。 いたずら電話はやめてね。 電話待ってま〜す。
538 :
デフォルトの名無しさん :02/11/01 19:39
携帯からレスしてみるテスト。
>>533 作ってみたら6行で出来た。
今2chに書き込めないから後で書くYO!
移動中にさらに縮めて5行達成。 #include<stdio.h> int z=65536;int main(int h,char**g){char c,s[z],m[z],*p=m,*S=s;FILE*f;s[fread(s ,1,z-1,f=fopen(*++g,"r"))]=0;fclose(f);while(z)m[--z]=0;for(;;){if(!(c=*S++)) return 0;*p+=c-43?c-45?0:-1:1;p+=c-60?c-62?0:1:-1;if(c==46)putchar(*p);if(c==44 )*p=getchar();if(c==91)if(!*p)while(*S++-93);if(c==93)if(*p)while(*S-91)S--;}} 実行したいファイルを引数にして実行汁。
行儀が悪くても良いなら4行? #include<stdio.h> char c,s[65536],m[65536],*p=m,*S=s;main(h,g)char**g;{for(fread(s,1,65535,fopen( *++g,"r"));c=*S++;){*p+=c-45?c==43:-1;p+=c-60?c==62:-1;c-46||putchar(*p);for(c- 44||(*p=getchar());c==91&&!*p&&*S++-93;);for(;c==93&&*p&&*S-91;)S--;}}
せっかく頑張ってくれた539には悪いが、アッチのスレの
>>1 の説明の悪さのためか、
間違っているっす。
[は対応する]に対してジャンプします。
つまり、入れ子になるって事もあると言うこと。
入れ子になったときは、入れ子の対応する括弧に飛びます…。
++++[->++++[->+++<]<]>>.
これを実行すれば、0が印字されるはずなんですが、542のではエが印字されてしまう…。
あと、バイト配列は30000だそうです。
たぶん、正式な言語仕様と思われるところを貼っておきます。
では、がんばって〜〜応援してま〜〜す。
http://www.muppetlabs.com/~breadbox/bf/
仕様は見とらんがこれでどうよ?
>>545 #include<stdio.h>
char c,s[65536],m[65536],*p=m,*S=s;main(h,g)char**g;{for(fread(s,1,65535,fopen(
*++g,"r"));c=*S++;){*p+=c-45?c==43:-1;p+=c-60?c==62:-1;c-46||putchar(*p);for(h=
c-44||(*p=getchar());c==91&&!*p&&*S++-93||--h;)h+=S[-1]==91;for(h=0;c==93&&*p&&
(*S-91||--h);)h+=93==*S--;}}
>>545 の規格でbefungeインタープリタを2タイプ作ってみた。
/*ちょっと行儀悪くして5行*/
#include<stdio.h>
int z=3e4;int L(int c){return c-2?!c:-1;}int main(int h,char**g){char c,m[z*2],
*p=m,*S=p+z,l;S[fread(S,1,z-1,fopen(g[1],"r"))]=0;while(z)m[--z]=0;for(;;){if(!
(c=*S++))exit(0);l=0;c-46||putchar(*p);if(c==91)if(!*p)while(l-=L(*++S-91));*(p
-=L(c-60))+=L(c-43);c-44||(*p=getchar());if(c==93)if(*p)while(l-=L(*--S-91));}}
/*ファイル名を'a'に固定で6行*/
#include<stdio.h>
int z=3e4;int L(int c){return c-2?!c:-1;}int main(void){char c,m[z*2],*p=m,*S=p
+z,l;FILE*f;S[fread(S,1,z-1,f=fopen("a","r"))]=0;while(z)m[--z]=0;fclose(f);for
(;;){l=0;if(!(c=*S++))exit(0);c-46||putchar(*p);*(p-=L(c-60))+=L(c-43);c-44||(*
p=getchar());if(c==91)if(!*p)while(l-=L(*++S-91));if(c==93)if(*p)while(l-=L(*--
S-91));}}
>>546 スゲー
がいしゅつでないといいけど、コッホ曲線。 コッホ曲線ってなに?ってすれがあったので、なんとなく作成。 #include <windows.h> HDC h;void k(float a,float b,float i,float j,int l){SetPixel(h,a,b,255);if(! l--)return;float w=i-a,m=j-b,c=a+w/3,d=b+m/3,n=.372678,e=a+w/2+m*n,f=b+m/2-w*n ,g=i-w/3,h=j-m/3;k(a,b,c,d,l);k(c,d,e,f,l);k(e,f,g,h,l);k(g,h,i,j,l);} INT WinMain(HMODULE i,HMODULE,PSTR,INT){WNDCLASS w={67,DefWindowProc,0,0,i,0,0 ,0,0,"a"};int a=513;HWND g;RegisterClass(&w);h=GetDC(g=CreateWindow("a","コッホ", a<<19,0,0,a,a,0,0,i,0));k(0,a/2,a,a/2,8);ReleaseDC(0,h);Sleep(2000);return 0;}
>>549 WinMainのはどうやって起動すればよいのでしょう。
C言語にコピペしてやるとmain()が未解決と出てしまいますし。
拡張子をc++にしても同じですし。
C言語しか知りませんので、お教えください。
メッセージループ入れました。warning出ますが、、、。
#include <windows.h>
HDC h;HWND g;int l=7,a=513;void k(int a,int b,int i,int j){SetPixel(h,a/9,b/9,
255);if(l){l--;int w=i-a,m=j-b,c=a+w/3,d=b+m/3,e=a+w/2+m*.37,f=b+m/2-w*.37,g=i
-w/3,h=j-m/3;k(a,b,c,d);k(c,d,e,f);k(e,f,g,h);k(g,h,i,j);l++;}}WinMain(HMODULE
i,HMODULE,PSTR,INT){MSG m;WNDCLASS w={67,DefWindowProc,0,0,i,0,0,0,0,"a"};
RegisterClass(&w);for(h=GetDC(g=CreateWindow("a","コッホ",a<<19,0,0,a,a,0,0,i,0))
;~GetMessage(&m,g,0,0);DispatchMessage(&m))k(0,a*5,a*9,a*5);ReleaseDC(0,h);}
>>550 >cl k.cpp user32.lib gdi32.lib
でどう?
>>550 bccだったら
bcc32 -tW k.cpp
さらに圧縮してみるテスト。 #include<stdio.h> int L(int c){return c-2?!c:-1;}int main(int z,char**g){char c,m[60001],*p=m,*S= p+30000;FILE*f=fopen(g[1],"r");S[fread(S,1,z=3e4,f)]=0;while(z)m[--z]=0;while(c =*S++){while(c==91&!*p&&(z-=L(*++S-91)));*(p-=L(c-60))+=L(c-43);while(c==93&&*p &&(z-=L(*--S-91)));c-46||putchar(*p);c-44||(*p=getchar());}return fclose(f);}
>>551 ,
>>552 使っているのはVisualC++6.0です。bccとは何でしょう。
上げてもらったファイル名を、プロジェクト→設定→リンクさせればよいのでしょうか。
user32.lib、gdi32.libはすでに入っているのですが
cl k.cppだと開けなく、bcc32 -tW k.cppだと開けない+tWは無効となります。
プロジェクトオプションのところにbcc32 -tW k.cppはありました。
検索して、エントリポイントにWinMainを書く、#pragmaでやるなどやりましたが
ダメでした。ヒントっぽいのがありましたが、よく解りません、下に書きます。
「> 「外部シンボル "_main" は未解決です」と言われます。
> 何かライブラリをリンクしなければいけないということですよね?
そうなんですが、そもそもプロジェクトを作成するとき、
その種類として「Win32アプリケーション」を選んでいますか?
メイン関数としてWinMain()を使う場合、このプロジェクトを選択してください。
そうすればそれに必要な基本設定は自動的に行なわれるはずです。
> VC++でライブラリをリンクするにはどうしたら良いんでしょうか?
メニューバーの[プロジェクト]→[設定]すると、
「プロジェクトの設定」というダイアログが現れます。
そのダイアログの[リンク]の項目を選択し、[カテゴリ]として[一般]を選択します。
そうすると[オブジェクト/ライブラリモジュール]という設定項目が現れるので、
そこにリンクしたいライブラリ名を追加してください。
なお、インクルードファイルやライブラリファイルの検索ディレクトリの設定は、
メニューバーの[ツール]→[オプション]として現れるダイアログの[ディレクトリ]で設定画面へ進めます。
この設定は統合環境の設定であって、プロジェクト単位のの設定ではありません。」
と、書いてありました。cじゃなくc++の方なのですか?c++の法は殆解りません。
ただメモ帳からc++ファイルを作りテキストにコードをコピペして、
リンク操作などをして、実行しました。
スレ違いで申し訳ないのですが、解決方法をお教えください。
>>554 そういう初心者質問は別のスレでお願い…
>>545 の仕様を元にC言語トランスレータにしてみました。スカスカでつ。
#include <stdio.h>
int main(int ac, char * av[] ){char tbl[]="><+-.,[]", *to[]={"++p;","--p;",
"++*p;", "--*p;", "putchar(*p);", "*p = getchar();", "while (*p) {", "}", } ;
if ( ac != 2 ) return 1 ;
puts( "#include <stdio.h>\nint main(){\nstatic char buff[30000],*p=buff;" ) ;
for (char * p=av[1];*p!='\0';p++)for (int i=0;tbl[i]!='\0';i++)if (*p==tbl[i])
{ puts( to[i] ) ; break ; } puts( "return 0 ;\n}" ) ; return 0 ; }
>557 圧縮。 #include <stdio.h> int main(int c,char**v){char*o[]={"++p;","--p;","++*p;","--*p;","putchar(*p);", "*p=getchar();","while(*p){", "}",""},i;FILE*f;if(c!=2)return 1;f=fopen(v[1], "r");puts("#include<stdio.h>\nint main(void){char b[30000],*p=b;");for(c=fgetc( f);c-EOF;c=fgetc(f)){for(i=0;"><+-.,[]"[i]!=c&&i<8;i++);puts(o[i]);}puts("retu" "rn 0;}");return fclose(f);}
間違えた。こっちが正しいコードでつ。 #include <stdio.h> int main(int c,char**v){char*o[]={"++p;","--p;","++*p;","--*p;","putchar(*p);", "*p=getchar();","while(*p){", "}",""},i;FILE*f;if(c!=2)return 1;f=fopen(v[1], "r");puts("#include<stdio.h>\nint main(void){static char b[30000],*p=b;");for(c =fgetc(f);c-EOF;c=fgetc(f)){for(i=0;"><+-.,[]"[i]!=c&&i<8;i++);puts(o[i]);}puts ("return 0;}");return fclose(f);}
//befungeコンパイラ(要gcc) #include <stdio.h> int system(),i;int main(int c,char**v){FILE*f=fopen(*++v,"r"),*g=fopen("!.c","w" );char s[99],*o[]={"putchar(*p);","*p=getchar();","while(*p){","}","++p;","--p;" ,"++*p;","--*p;"};fputs("#include<stdio.h>\nint main(void){static int b[30000]," "*p=b;",g);for(;f&&(c=fgetc(f))-EOF;)for(i=8;0<i--;)fputs(".,[]><+-"[i]-c?"":o[i ],g);fputs("return 0;}",g);fclose(f);fclose(g);sprintf(s,"gcc !.c -o%s",*++v); return system(s);}
http://pc3.2ch.net/test/read.cgi/tech/1028570486/853- に出ていた二段階ソート法、現在8行。
#include <stdio.h>
void*calloc();char*s;FILE*f;int*A,g,i,j,*N,p,L[256],m[256],t[256],S=sizeof(int)
;C(a,b)const void*a,*b;{int c=*(int*)a,d=*(int*)b,r=strncmp(s+c,s+d,g-c<d?d:c);
return r?r:d-c;}main(l,v)char**v;{fseek(f=fopen(v[1],"rb"),0,2);g=ftell(f)+1;
rewind(f);for(fread(s=calloc(g,1),1,g-1,f);i<256;)L[i++]=-1;for(N=calloc(i=g,S)
;i--;)s[i]<=s[i+1]?N[i]=L[s[i]],L[s[i]]=i:m[s[i]]++;for(A=calloc(g,S);j<256;
qsort(A+i,p-i,S,C),t[j]=i-m[j],j++)for(p=i=m[j]+p,l=L[j];l>=0;l=N[l])A[p++]=l;
for(i=j=0;++j<g;A[t[s[A[i]-1]]++]=A[i++]-1)A[i]?0:i++;}
562 :
デフォルトの名無しさん :02/11/09 01:07
から揚げはうまいYo
>>561 勝手に短縮。8行のままだけど。
#include <stdio.h>
void*calloc();char*s;FILE*f;int*A,g,i,j=256,*N,p,L[256],m[256],t[256],S=sizeof(
int);C(a,b)const void*a,*b;{int c=*(int*)a,d=*(int*)b,r=strncmp(s+c,s+d,g-c<d?d
:c);return r?r:d-c;}main(l,v)char**v;{for(f=fopen(v[1],"rb");g++,getc(f)>=0;);
for(rewind(f),fread(s=calloc(i=g,S*3),1,g-1,f);j;)L[--j]=-1;for(N=(int*)s+g;i--
;l<=s[i+1]?N[i]=L[l],L[l]=i:m[l]++)l=s[i];for(A=N+g;j<256;qsort(A+i,p-i,S,C),t[
j]=i-m[j],j++)for(p=i=m[j]+p,l=L[j];l>=0;l=N[l])A[p++]=l;for(i=0;--g;A[t[s[A[i]
-1]]++]=A[i++]-1)i+=!A[i];}
何をやってるコードなのかは理解しておりませぬ。なので、あってるかも
未検証。警告もでるし。それにしても、最初から縮めることを考えて
作られたのでないのはなかなか縮まりませんな。
>>563 二段階ソート法は、BWTを行う高速化法の一つですね。
正確にはsuffix arrayを作成する手法です。
565 :
デフォルトの名無しさん :02/11/14 14:36
>>561 >>563 00 00 00 00 ... 00 という0並びのデータを与えると、正しくない。
2ch エンコーダ/デコーダ
http://pc3.2ch.net/test/read.cgi/tech/1028570486/649-654n の 540 変換と MTF の部分のみ。微妙に違うかもしれないけど...
#include <stdio.h> // エンコーダ
typedef unsigned char uc;void main(int c, char **v){const int M=256,B=M<<8;uc*
z[M],s[B],d[B],*p,m[M],*q,t;int i=0,r,f[M];FILE*fi=fopen(*++v,"rb"),*fo=fopen(
*++v,"wb");for(;i<M;i++)m[i]=i;while(r=fread(s,1,B,fi)){putc(*s,fo);if(1==r)b\
reak;for(i=M;i>0;f[--i]=0);for(;i<r;f[s[i++]]++);*z=d;for(i=0;i<255;i++)z[i+1]
=z[i]+f[i];for(i=1;i<r;i++)*z[s[i-1]]++=s[i];*z[s[i-1]]=*s;for(p=d;p<d+r;p++){
q=m;if(*p-*q){for(t=*q;*p-*++q;t^=*q,*q^=t,t^=*q);*q=t;}putc(q-m,fo);*m=*p;}}}
#include <stdio.h> // デコーダ
typedef unsigned char uc;void main(int c, char **v){const int M=256,B=M<<8;uc*
z[M],s[B],*p,m[M],*q;int i=0,r,f[M],k,h;FILE*fi=fopen(*++v,"rb"),*fo=fopen(*++
v,"wb");for(;i<M;i++)m[i]=i;while((h=getc(fi))-EOF){putc(h,fo);for(r=0;r<B&&(k
=getc(fi))-EOF;r++){s[r]=m[k];for(q=m+k;q-->m;*(q+1)=*q);*m=s[r];}for(i=M;i>0;
f[--i]=0);for(;i<r;f[s[i++]]++);*z=s;for(i=0;i<255;i++)z[i+1]=z[i]+f[i];for(;0
<--r;)putc(k=*z[h]++,fo),h=k;}}
typedef とか const int のあたりは不要な気もするけど、今さら直すのも面倒なんで
そのまま。SSS 符号化/復号化の実装はちょっとムリっぽかったのでパス。
567 :
デフォルトの名無しさん :02/11/16 12:51
ageage
>>566 ふと思った。符号化・復号をまとめられるんじゃないか、と。
でも、忙しくて自分じゃできないYo・・・
569 :
デフォルトの名無しさん :02/11/17 23:59
言い訳すんなー!ばかちんがー!
570 :
デフォルトの名無しさん :02/11/18 01:13
砂嵐って会ったけど、あれって単なるランダムなんだよな。 実際のTVに近づけるために横方向の周期性とか、そういったのを持たせられないかなぁ。
だれか「All-interval serie」を算出する関数考えてくんないかなあ。
572 :
デフォルトの名無しさん :02/11/19 20:17
RSA公開鍵暗号実装しれ
573 :
デフォルトの名無しさん :02/11/24 02:58
からあげからあげ
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #include <time.h> int main(int argc,char *argv[]){ FILE *fp;char str[1024], *fname=argv[1];int i,count=0,c;float sp; time_t t1, t2;fp = fopen( fname , "r"); if(fp == NULL){printf("fopen失敗\n");exit(-1);} time(&t1); while(fgets(str,sizeof(str), fp) != NULL){ i=0;printf("%s",str); while(1){ if(str[i] == '\n'){printf("\n");break;} while(kbhit() == 0){} c = getch(); if(c == str[i]){ printf("%c",c); }else{ continue;} i++;count++; } } time(&t2); fclose(fp); sp = (float)count/(float)(t2-t1); printf("タイプ数/秒=%f\n", sp); return 0; }
( ´,_ゝ`)
>>576 #include <stdio.h>
extern int getch();extern long time(long*);int main(int c,char**v){float x=0;
FILE*f=fopen(v[1],"r");long t,u;char*p,s[1024];if(f){for(time(&t);fgets(s,1024,
f);puts("")){printf(p=s);while(*p-10){c=getch();if(c==*p){putchar(c);p++;x++;}}
}x/=time(&u)-t;fclose(f);printf("タイプ数/秒=%f\n",x);}else puts("fopen失敗")
;return f?-1:0;}
最後逆だった。 ;return f?0:-1;}
580 :
デフォルトの名無しさん :02/11/26 10:05
あっけない幕切れだな,おい
getch()とtime(long*)がなんたらって出てコンパイルできないす。
コンパイルできないとか言うヤシは ( ´ー`)y━~ ちっとは考えろやゴルァ
Oo(´o` )y━~ 龍の文句はオレに言えぇ
ごめんなさい、これでコンパイルできました。 #include <stdio.h> #include <conio.h> #include <time.h> int main(int c,char**v){float x=0;FILE*f=fopen(v[1],"r");long t,u;char*p,s [1024];if(f){for(time(&t);fgets(s,1024,f);puts("")){printf(p=s);while(*p-10){ c=getch();if(c==*p){putchar(c);p++;x++;}}}x/=time(&u)-t;fclose(f);printf( "%ftype/sec\n",x);}else puts("fopen失敗");;return f?0:-1;}
>>581 C++の場合は1行目を
extern "C" {int getch();long time(long*);}int main(int c,char**v){float x=0;
>>585 なるほど。CとC++では変わるのですか。知らなかったす。
試したところ、確かにコンパイルできました。
どうもです。
Cだとextern要らなかったり。 #include <stdio.h> int getch();long time(long*);int main(int c,char**v){float x=0;long t,u;char*p, s[1024];FILE*f=fopen(v[1],"r");if(f){for(time(&t);fgets(s,1024,f);puts("")){p=s ;printf(s);while(*p-10){c=getch();if(c==*p){putchar(*p++);x++;}}}x/=time(&u)-t; fclose(f);printf("タイプ数/秒=%f\n",x);}else puts("fopen失敗");return -!f;}
588 :
デフォルトの名無しさん :02/11/28 03:13
このプログラムでド胆を抜けまつか? #include<stdio.h> int main(void){char k[]="A52A2245332A252B435B2222A2B2A2A23A2C32A3B5B2222A52B435" "32A2352C23A52A2246D2A3533B35K2A4D22A3224A45D2C25B2A32A5D2C25D4A26C4A1",*p=k; int i,c,b=1;while(*p){c=0;for(i=0;i<8;i++){if(*p=='0'){if(!*++p)break;b=!b;} c=(c<<1)+b;if((*p)--=='A')*p='0';if(*p >= 'A')b=!b;}if(c)putchar(c);}getchar(); return 0;}
590 :
デフォルトの名無しさん :02/11/28 13:42
過去の作品集めてあるところないですか? 7行ドラクエってのを見たいんですが
>>589 圧縮しますた。
#include<stdio.h>
int main(void){char i,k[]="A52A2245332A252B435B2222A2B2A2A23A2C32A3B5B2222A52B"
"43532A2352C23A52A2246D2A3533B35K2A4D22A3224A45D2C25B2A32A5D2C25D4A26C4A1",*p=k
;int c,b=1;while(*p){for(c=i=0;i<8;i++){if(*p==48){if(!*++p)break;b=!b;}c+=c+b;
65-(*p)--||(*p=48);*p>=65&&(b=!b);}c&&putchar(c);}getchar();return 0;}
安西先生・・・俺ドラクエが見たいです・・・(ノД`)
>>592 ドラクエは7行になっていない。
現在dat落ちしている7行スレ2にあるわけだから、
それをみればいいわけで・・・
ドラクエ転載 int a,b,c,d,e,f,g,h,i,j,k,l,m,n,z[6],r,x[9],y[9];char o[][9]={"アリーナ","クリフト" ,"ブライ","スライム","マーマン","トロル","オーク","キメラ","竜王","攻撃","防御","イオ","ホイミ","ヒャド" ,"who?","唱えた","ダメージ","回復","死んだ","敵出現","勝利","クリア","全滅","した", "に","の","は","を","▼","\x1b[2J"," ","MP不足","\x1b[0m","\x1b[31m", "\x1b[32m","\x1b[>5h"},q[]="00533", p[]="vlb:XvlXvvlb:XvlXv:?B06060?:?B06060?SI?5?SNXSA?<2?2:?D234040302"; main(){srand(time(0));S(35);for(r=0;r<=3;r++){S(19);S(28);for(b=3;b<6;b++) {p[r+b]=p[r+b+9];p[r+b+18]=p[r+b+27];}for(l=0;l/10!=3;){for(b=0;b<3;b++) {if(p[b]!=48){N();S(b);C(63);C(10);for(c=1;c<4;c++){D(c);C(58);S(8+c+c/3*b); C(10);}d=getch()-49;x[b]=d+d/2*b;if(d==0||(d==2&&b>0)){C(10);S(14);C(10); for(c=1;c<4;c++){e=x[b]==3?c-1:r+c+2;if(p[e]!=48){D(c);C(58);S(e);C(10);}} e=getch()-49;y[b]=x[b]==3?e:r+3+e;}}S(29);}for(b=r+3;b<r+6;b+=p[y[b]]!=48?1:0) {d=x[b]=rand()%2==0?0:p[b+54]-48;e=rand()%3;y[b]=d==3?r+3+e:e;}for(n=0;n<6; n++){z[n]=6;d=rand()%6;z[n]=d>2?r+d:d;for(b=n-1;b>-1;b--)n-=z[n]==z[b]?1:0;}
for(n=0,l=0;n<6&&l/10!=3;n++){b=z[n];if(p[b]!=48){N();d=x[b];S(b);d==0? (S(25),S(9)):d==1?(S(26),S(10),S(23)):(S(26),S(d+9),S(27),S(15));C(7);C(10); if(d<2||p[b+18]!=48){p[b+18]-=q[d]-48;e=y[b];f=p[b+36]-p[e+45];f=d==0?f<1?2:f: d==2?20:d==4?30:0;if(d==2)for(g=b<=2?r+3:0,h=0;h<3;h++)Z(g+h);else Z(e); for(k=0,l=0;k<r+6;k+=k==2?r+1:1)l+=p[k]==48?k<3?1:10:0;if(l%10==3){S(22); S(28);exit(1);}if(l/10==3){S(20);S(23);}}else S(31);S(28);}}}}S(21);S(28);} S(a){printf("%s",o[a]);a==28?(getch(),S(29)):a;}P(a){printf("%3d",p[a]-48);} D(a){printf("%d",a);}C(a){printf("%c",a);}N(){for(a=0;a<3;a++){S(a);P(a); P(a+18);C(10);}for(a=3;a<6;a++){S(p[a+r]!=48?a+r:30);C(10);}C(10);}Z(a){ if(p[a]!=48&&d!=1){S(a);if(d%2==0){S(24);m=f*(rand()%4+8)/10;p[a]-=m/=x[a]==1 ?2:1;D(m);S(16);p[a]<49?(p[a]=48,C(10),S(18)):a;}if(d==3){S(26);S(17);S(23); p[a]=p[a+9];}C(10);S(32);for(c=0,m=0;c<3;c++)m+=p[c]<49?4:p[c]<64?1:0;m>3? S(33):m>0?S(34):m;}} 俺も好きだなあ。コピペして倉庫に放り込んであった。
>>595-596 バグねーか?
コマンド入力で Enter 押すと MP 増える。
MP が 0 でなければ、足りなくてもマイナスでも呪文が使える。
>>597 デバッグしてください。
マジ願いです。
>>598 見てみた。
とりあえず、この 2 つ。
// d=getch()-49;
for(d=3;d<0|d>2;d=getch()-49);
// e=getch()-49;
for(e=3;e<0|e>2;e=getch()-49);
これで 1〜3 以外を入力できなくなるので MP が変になる心配は無くなる。
MP 判定を直す必要は無いが、↓ で直す事ができる。
// if(d<2||p[b+18]!=48)
if(d<2||p[b+18]>=q[d])
しかし・・・もはやマシン語を解析しているかのようだ。
ワーク領域が p[] なんだもんなあ・・・。
やべ、もうこんな時間かよ・・・(;´Д`)
ドラクエは別のスレでやってくれ。スレが破綻する。
>>603 ( ´∀`)・ω・) ゚Д゚)・∀・) ̄ー ̄)´_ゝ`) Σ(´D`lll)
まさかJavaとか?
(゚Д゚)ハァ?
何のソースだかわかってるなら、bcc でもコンパイルできるはずなんだが。
stdio.h stdlib.h math.h だけでいいはず。
あとansi.sysもいるな。 俺は入れてないから「もうダメポ」に。
>>609 595-596 のソースにか?
要らんだろ。
NEC98 でなければ ANSI.SYS は要る。
DOSIME.SYS にでも放り込んどきゃいいじゃん
違うわ、ゴメン。
bcc でも、別に何も追加やら修正やらしなくてもコンパイル通ったが。
616 :
デフォルトの名無しさん :02/12/02 00:31
bccにVC6とMFC4.0、それとVB.netをHSPで導入したら、コンパイラできました。 ありがとうございます。
3点。
-4i点。
(AA省略)を7行ってできる?
puts("(AA省略)");
PRINT "AA省略" END
'(AA省略)
>>625 マジにわからんから教えてくれ。
実行しても何も起こらないとか、そういう事じゃないよな?
627 :
デフォルトの名無しさん :02/12/04 21:51
repeat:cls:redraw 2:line 320,240,mousex,mousey:redraw 1:await 1:loop;;;;;;;;;;
8bit時代の人間にしかわからんバカさだな。
629 :
デフォルトの名無しさん :02/12/05 14:40
>>628 プ 七行プログラムも書けないくせに
時代じゃねーよ 才能だボケ!
repeat:cls:redraw 0:line 320,240,mousex,mousey:redraw 1:await 1:loop;
631 :
デフォルトの名無しさん :02/12/05 15:33
reiterate oppai 〃 nullpo
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/ ←
>>631 (_フ彡 /
ポートスキャナー。使い方も含め6行。これ以上縮まるかなぁ? // Usage: //> javac P.java // > java P [Host Name] [Start Port] [End Port] class P{static void main(String[]a){int p=Integer.parseInt(a[1])-1;while(++p<= Integer.parseInt(a[2])){try{new java.net.Socket(a[0],p);System.out.println(p); }catch(Exception e){}}}}
ちなみに
>>634 は、開きポートのみ出力。
例:ポート80があいていた場合。
--------------------------------------------------
C\test>java P 127.0.0.1 21 110
80
C\test>
--------------------------------------------------
みたいな感じ。わかりにくくてスマソ。
釣り馬鹿dat落ちした?
今日はいろんなスレが落ちていったナー。
638 :
デフォルトの名無しさん :02/12/10 12:26
旧スレより下がってるから、age
639 :
デフォルトの名無しさん :02/12/14 18:00
ついにpart1がdat落ち age
ついにここもdat落ち?
>>640 最近はネタも少ない上に、食いつきも悪いからね・・・。
part1の前半を第一のピークとすれば、
part1の後半からpart2の中盤くらいが第2のピークで。
part3になると、出足からけちがついていてちょっと落ち目だね。
601 がDQ ネタを追い出したからだ
DQN ネタを追い出したからだ
コテハンを追い出したから・・・ってのは結構あるかも
企画の無意味さに気づいてきたんじゃ…
もうだめか。。。
もうだめぽ
みんな はさーん
俺っていったい・・・
>>649 いや、それはそれですごいと思うよ。
ただ7行スレの場合、7行以上のものを縮めるのが楽しい人も多いわけで。
>>649 > 俺っていったい・・・
大したやつだ!
何かネタない〜?俺はない。
アセンブリ言語
>654 hagesiku同意
何これ
何って?冒頭読めば分かるじゃん。
>>658 自己満足なんだから放っておけ
しかし自己満足だとしても、オセロの作者のページなんかがあれば見てみたいな
>>658 なんか「俺にはファンがいる」とか自分で言ってるのが痛いな
俺が言うのもなんだけど。
>>657-661 みたいな意見が7スレをだめにしたんだと思うよ。
>>662 加えて最近の駄作続きが拍車をかけたのか…
# DQって何がすごいの?
656を見て駄作だらけとは感じないのか? でも、れを摘み取ってはいけないと思うのだけど、どうよ。
それよりMPMっていうのが気になった。ぐぐっても見つからん。
お前らSタソもここ見てるんだから励まそうよ! ハァハァ
>>661 そんなこといって最後まで読んでんじゃん
俺もよんだけどなー
>>661 むなしく同意
でも、こいつが自分のwebでオナニーしてるだけなら文句は言わない。
奴はちょっとでも自信があると、ここで連投するから鬱陶しいと思われ
#技術力も発想力も言うほど無いしな
>>669 ちまちまうpすることが、非難されてるけど、それが7行スレを衰退させたと思う。
あくまでも俺は、だけど、連投賛成。
>671 7行達成していないならば、自分ではもうどうしようもなくなってからアップすべきだな 例:砂嵐シミュレータ、ハフマン、マインスイーパ、等 Sは自己満足のためだけだったから鬱陶しかった。典型的ヲタク臭がしたのは俺の気のせいか? #それに出来上がった作品も、遊んでみてなんだかいまいちだったしな
>>672 でも自分と違うテクニックを持っている他人の出現を求めるには、
「自分ではどうしようもなくなってから」では遅いということを痛感するよ。
part1の時は俺も投稿したことがあるけど、
意見レスはあっても、結局プログラムのレスは付かなかった。
「自分ではどうしようもなくなってから」という状態は、他人が手をつけにくいという、
技術的な問題も含んでいるし、いまさら参加できないという精神的な問題もあると思う。
俺もS氏のテトリスに参戦しようと思ったけど、表明が遅すぎて何もできなかった。
>>672 >>673 昔から言われていたが、7行スレの見方に複数意見があることは間違いないですか?
・縮める過程を見せろ、あるいは参加したい
・7行に到達した作品だけをもってこい
>>672 日記見てると、どちらかというと典型的な研究者だな。
だから自分の成果はどんどん公表したいんだろうよ。
結局のところSは痛い香具師 そしてプログラムで語らない俺らも痛い香具師
>>674 俺的には
>・縮める過程を見せろ、あるいは参加したい
だな。どんどん短くなってく様を見たい。
いきなり完成品投稿されてもフーンとしか思えない。
>>662 >>660 も?
10 PRINT "だったら俺は痛くない?":GOTO 10
・7行になりそうに無いネタ振ってくるな ・つまらんネタ振ってくるな
>>679 >・7行になりそうに無いネタ振ってくるな
テトリスはなりそうにないのになっちゃったから、一応ネタを振るだけなら許可。
>・つまらんネタ振ってくるな
こっちは激しく同意
>>680 確かにいいことを言っているが、現状はどうしようもない
奴らはもう帰ってこないだろう。
683 :
過去参(略 :02/12/28 02:20
活気がなくなってきたんで、とりあえずこの辺で ===== 糸冬 了 =====
あ、久しぶりに来たら、終わってた。 ちょっと寂しいな・・・
>>684 あなたが書いてくれればまた始まりますよ。
/*
*/
/*/*/*/*/*
*/
大阪キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
ITバブルの中で様々な幻想が語られた。 リアル経済ならぬバーチャル経済しかり。 ITによる失業者の吸収しかり。 「これからは2ちゃんねるの時代だ」のごとき匿名幻想しかり。 IT社会はリアルワールドにおける 信頼と責任抜きにはありえないというだけの話だ。
食えりゃなんでもいいよ。
694 :
デフォルトの名無しさん :03/01/09 14:45
ID:ZBsKvw39(・∀・)カエレ!クルナ!イッテヨシ!
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
おぺら6.05からテスト 書けてるよ〜
そうそう、しかし保護は無理だろ、責任追及されたら誰かが責任とらないといけないんだし。
えーっと、 IPの話はどこへ、、、(^_^;)
みんなで博之を訴えまくるか。 名誉毀損のレス1つ1つに対して民事を起こす。 10億件とか。 んで判決間際で取り下げ。 裁判所を麻痺させろ!!
>正直、本当の危機に直面しないと動かんだろうな。>2ちゃんねらー 動くってどうするんだよ? なくなったらなくなったでいいや。 という人が多いんだよ。
なんだよ ひろゆき とうとうやっちゃったな つまんねーネタがネタにならねーじゃねえか もう だ・め・ぽ・・・
じゃあ今までIP、IPって騒いでたのは何だったんだよ?(^^; ニャロ
真面目な質問だったのか・・・。 一見違うように見えるんじゃなくて趣旨が違います。 趣旨を理解できないアホなボランティアが多いのは確かですが、 真似してはいけません。
じゃあさトップに閲覧料1分1億円てかいといて訴えられるたびに請求したら良くない?
>>ひろゆき 女紹介してくれ
真っ先に帰るのが普通の客なんでないかな??冷やかしの人に裁判沙汰のリスクは おえないでしょ。 本職はIP位ではへこたれずに留まるだろうけど、暫らくは半端な厨房が通常板へ なだれ込んで無差別に悪さ(差別コピペ)をする、っつー事になりそう・・・
ひろのぶさーん。
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
幹事よろしく!!
正当な内部告発をにちゃんに書くな
なんでもかんでもバシバシ訴えると、ヤブヘビになる件も出てくると思うんだよね。 そういう意味では、企業レベルよりも個人レベルの要請が増えるのかもしれない。
北欧に行くってさ 172 :ひろゆき ◆3SHRUNYAXA :03/01/11 05:31 ID:kSb7xo24 北欧は放浪して資源を貯めれるので、 逃げ回ってると死なない。
だから、時々タイーホあるやん
意見を聞いてもらうために「次スレたってないようなのでこちらに」は やめろ。
つーかトリップもキャップもついてないし。
600,000,002だった・・・(´・ω・`)
ビビタ・・・
勇気=マンコを示せ!!
前スレで写真うpした奴の話は本当だったのか・・・ 疑ったりして悪いことしたな・・・
まぁ本当にひろゆきが金払う必要があるなんて思ってる知能指数0の基地外は 2ちゃん内部にはいないからな
閑話休題;
LZW互換?圧縮/復元 (
ttp://multix.jp/ )
$ perl lzw_encode < 圧縮元ファイル > 圧縮後ファイル
#!perl -w
binmode STDIN;binmode STDOUT;if(read STDIN,$_,1){$C=ord;$I=256;while(read
STDIN,$_,1){if($E=$H{$D=$C<<8^ord}){$C=$E;next}$H{$D}=$I++if$I<4095;
$B.=pack"v",$C;$C=ord}$B.=pack"v",$C}$B=unpack"h*",$B.pack("v",4095);
$B=~s/(...)0/$1/g;print pack("h*",$B."f"x(length$B&1))
$ perl lzw_decode < 圧縮済ファイル > 復元ファイル
#!perl -w
binmode STDIN;binmode STDOUT;$/=undef;if($B=unpack"h*",<>){
$B=~s/(...)/${1}0/g;@B=unpack"v*",pack("h*",$B);for(@C=($I=0);$I<@B;$I++){
exit if($_=$B[$I])==4095;@S=();while(255<$_){push@S,$C[$_-256];$_=$B[$_-256]
}print pack("C*",$_,reverse@S);@C[$I-1,$I]=($_,$_)if$I<3840}}
マジでこんなのに特許がどうのとブータレるUN○SYSはともかく。
C/C++ で書くと何行になるんだこれ。
何を今更・・・
642 が核心を突いてるぞ! (トリップ便乗!)
一人でいろいろ作業するのは大変なので 分業することにしたようですよ。
>>723 のと同作者。この圧縮法は既出?
reflexive_encode
binmode STDIN;binmode STDOUT;sub P{defined($_=getc)&&push(@B,ord)}&P;$I=256;
while(@B){&P;@B<4&&&P;$U=0;while($#B>$U){if($R=$H{$B[$U]<<12^$B[$U+1]}){splice
@B,$U,2,$R;if($#B==$U){&P}&P;$U+=$U?-1:1}else{++$U<32||last}}$H{$B[0]<<12^
$B[1]}=$I++if$I<4095&&@B>1;$B.=pack"v",shift@B}($B=unpack"h*",$B."\xFF")=~
s/(...)0/$1/g;print pack("h*",$B."f"x(length$B&1))
reflexive_decode
#!perl -w
binmode STDIN;binmode STDOUT;$/=undef;if($B=unpack"h*",<>){($B.="fff")=~
s/(...)/${1}0/g;@B=unpack"v*",pack("h*",$B);for($I=0;$I<@B;$I++){($_=$B[$I])==
4095&&exit;@C=($_);while(@C){if(($_=pop@C)<256){print chr}else{$D=$B[$_-256];
push@C,($E=$B[$_-255])==$_?$D:$E,$D}}}}
1MBのゼロベタファイルが33バイト、
16文字x4K反復の64KBテキストが78バイトになりよる。
それぞれを4倍量にしても3バイトずつしか増えネェ(´д`;
同じソースではLZSSが1/8、LZWで1/342が目一杯。
まあ並のファイル相手じゃどれも大差ないんだケド。
(^^)
(^^)
730 :
デフォルトの名無しさん :03/01/19 23:51
保守
ガイシュツならスマン。円周率計算なら int a=10000,b,c=8400,d,e,f[8401],g;main(){ for(;b-c;)f[b++]=a/5; for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a) for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);} とか main(){int a=1e4,c=3e3,b=c,d=0,e=0,f[3000],g=1,h=0; for(;b;!--b?printf("%04d",e+d/a),e=d%a,h=b=c-=15:f[b]=(d=d/g*b+a*(h?f[b]:2e3))%(g=b*2-1));} なんてのがあったな。 どういう公式使ってるのかわかった香具師は教えれ
∧ ∧
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/ ←
>>733 (_フ彡 /
(^^)
736 :
デフォルトの名無しさん :03/01/29 19:46
鯖がpc3->pc2記念
円周率 $pi=314;@pi=split//,$pi;$b=hex(join'',reverse@pi)>>shift@pi;$c=$b-1;$d=$b+1; $n=$b|$c>>shift@pi|$d>>shift@pi;$c=chr$c;$d=chr$d;@a=("\n",' '); foreach(split//,'@QijネヘLM'){push(@a,"$c$_")}foreach(split//,'2163602428795-2') {$a.=$_=~/\d/?$a[$_]:"$c$d"}for($i=0;$a.=pack('C2',$b,$n), (length($_=substr($pi,$i,2))==2);$n+=$_*(1,-1)[$i++&1]){} print$a; #use jcode;print Jcode->new($a,'sjis')->euc;
>738 実行してみてワロタ
SOCKS4 Proxy 10行・・・ import java.net.*;import java.io.*;public class Z extends Thread{public static void main(String[]a)throws Exception{ServerSocket s=new ServerSocket(1080);for (;;){Z z=new Z();z.y=s.accept();z.start();}}Socket y;OutputStream o;InputStream w;byte[]b=new byte[512],x=new byte[4];public void run(){int i;try{if(w!=null) for(;(i=w.read(b,0,512))>=0;o.write(b,0,i),o.flush());w=y.getInputStream();o=y. getOutputStream();for(;;){w.read(b,0,8);for(;w.read()>0;);i=b[1];b[0]=0;b[1]=90 ;o.write(b,0,8);o.flush();if(i==2||i==1){for(i=0;i<4;i++)x[i]=b[i+4];Socket s= new Socket(InetAddress.getByAddress(x),((b[2]&255)<<8)+(b[3]&255));Z z=new Z(); z.w=s.getInputStream();z.o=o;z.start();z=new Z();z.w=w;z.o=s.getOutputStream(); z.start();break;}}}catch(Exception e){}}}
9行になりましたもうおしまいです。 import java.net.*;import java.io.*;public class Z extends Thread{int i,k;public static void main(String[]a)throws Exception{for(ServerSocket s=new ServerSocket (1080);;){Z z=new Z();z.k=1;z.y=s.accept();z.start();}}OutputStream o,l;public void run(){try{w=w!=m?w:y.getInputStream();o=o!=l?o:y.getOutputStream();for(;k< 1;i=w.read(b),o.write(b,0,i));for(;;){w.read(b);b[0]=0;i=b[1];b[1]=90;o.write(b );k=((b[2]&255)<<8)+(b[3]&255);w.read(b);o.write(b);for(;w.read()>0;);if(i==2|| i==1){z=new Z();z.y=new Socket(InetAddress.getByAddress(b),k);z.o=o;z.start();v =new Z();v.w=w;v.y=z.y;v.start();break;}}}catch(Exception e){}}Socket y;byte[]b =new byte[4];Z z,v;InputStream w,m;}
744 :
デフォルトの名無しさん :03/02/14 22:44
今日のお昼はから揚げでしt
747 :
デフォルトの名無しさん :03/02/19 21:44
ネタ希望
>>747 複数文字列のパターンマッチングとか。
実装例)fgrep
アルゴリズム) AC法、CW法
749 :
デフォルトの名無しさん :03/02/20 00:22
>>747 ソースコードをHTML出力するプログラム
・外部データとしてkeyword.txt(名前は何でもいい)を読み込み
そこに記載されているキーワードには色をつける。
・コメントにも色をつける
・できれば文字列リテラル("〜"、'〜')にも色をつける。
みたいな。
>>749 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
char d[4][5]={"<","<",">",">"};void main(int c,char*v[]){char h[256][256],
b[1024];int i=0,j,k,l;FILE *e,*f=fopen("keyword.txt","r");while(!feof(f)){fgets(
h[i],256,f);if(h[i][strlen(h[i])-1]==10){h[i][strlen(h[i])-1]=0;}i++;}fclose(f);
f=fopen(v[1],"r");e=fopen(strcat(v[1],".html"),"w");while(!feof(f)){memset(b,0,
1024);fgets(b,1024,f);for(k=0;k<strlen(b);k++){for(l=0;l<2;l++){if(memcmp(b+k,d[
l*2],1)==0){memmove(b+k+3,b+k,strlen(b)-k-1);memcpy(b+k,d[l*2+1],4);k+=4;}}for(j
=0;j<i;j++){l=strlen(h[j]);if(memcmp(b+k,h[j],l)==0){memmove(b+k+l+24,b+k+l,
strlen(b)-k-l);memcpy(b+k,"<FONT COLOR=BLUE>",17);memcpy(b+k+17,h[j],l);memcpy(b
+k+l+17,"</FONT>",7);k+=l+24;}}}fputs(b,e);fputs("<BR>",e);}fclose(e);fclose(f);
}
コメントにもリテラルにも色が付ける事が出来なかった・・・∧||∧しかも13行だし・・・
修正 char d[4][5]={"<","&lt;",">","&gt;"} &は半角
>>752 よく見ずにレスするけど、TABの展開作業ってしてる?
>>752 コメント&リテラル色付き13行。
標準出力だから使い勝手悪いし、一行コメントに行連結バグあるけど。
#include <stdio.h>
char*strdup(char*),*s="<font color=",*e="</font>",t[999],*p,*w[999],**q;int(*f)
(const char*,...),(*g)(FILE*),d;main(int c,char**v){FILE*i=fopen(v[1],"rt"),*k=
fopen("keyword.txt","r");f=printf;g=fgetc;q=w;while(fscanf(k,"%s",t)-EOF)*q++=
strdup(t);*q=0;f("<html><body><pre>");while((c=g(i))-EOF){if(isalpha(c)||c==95)
{p=t;*p++=c;while(isalnum(c=g(i))||c==95)*p++=c;ungetc(c,i);*p=0;q=w;while(*q){
if(!strcmp(t,*q))break;q++;};if(*q)f("%sred>%s%s",s,t,e);else f(t);}else if(c==
47){if((c=g(i))==42){f("%steal>/",s);do{a(c);while(a(c=g(i))-42);}while((c=g(i)
)-47);f("/%s",e);}else if(c==47){f("%steal>//",s);for(;;){while((c=g(i))-10)a(d
=c);if(d-92)break;a(c);}f("%s\n",e);}else{a(47);ungetc(c,i);}}else if(c==34||c
==39){f("%sblue>%c",s,c);while((d=g(i))-c)a(d);f("%c%s",c,e);}else{a(c);}}f(
"</pre></body></html>");return 0;}a(int x){switch(x){case 38:f("&amp;");break;
case 60:f("&lt;");break;case 62:f("&gt;");break;default:f("%c",x);}return x;}
最後2行の&は半角で。
#include <stdio.h> #include <stdlib.h> #include <string.h> char d[4][5]={"<","<",">",">"};void main(int c,char**v){char h[256][256],b [1024],g[256];int i=0,j,k,l,m;FILE *e,*f=fopen("keyword.txt","r");while(!feof(f) ){fgets(h[i],256,f);if(h[i][strlen(h[i])-1]==10){h[i][strlen(h[i])-1]=0;}i++;} fclose(f);f=fopen(v[1],"r");e=fopen(strcat(v[1],".html"),"w");while(!feof(f)){ memset(b,0,1024);fgets(b,1024,f);m=0;for(k=0;k<strlen(b);k++){for(l=0;l<2;l++){ if(b[k]==d[l*2][0]){memmove(b+k+3,b+k,strlen(b)-k-l);memcpy(b+k,d[l*2+1],4);k+=3 ;}}if(b[k]==0x22){m=~m;}if(m==0){if(memcmp(b+k,"//",2)==0){memmove(b+k+20,b+k+2, strlen(b)-k-2);memcpy(b+k,"<FONT COLOR=GREEN>//",20);memcpy(b+strlen(b), "</FONT>\0",8);break;}if(b[k]==0x9){memmove(b+k+24,b+k+1,strlen(b)-k-1);memcpy(b +k," ",24);k+=23;}for(j=0;j<i;j++){l=strlen(h[j]);if( memcmp(b+k,h[j],l)==0){memmove(b+k+l+24,b+k+l,strlen(b)-k-l);sprintf(g, "<FONT COLOR=BLUE>%s</FONT>",h[j]);memcpy(b+k,g,l+24);k+=l+23;}}}}fputs(strcat(b ,"<BR>"),e);}fclose(e);fclose(f);} TAB展開、コメント(//)色付き、リテラル内のキーワード色付け防止機能追加 頭痛くなってきた・・・
修正 #include <stdio.h> #include <stdlib.h> #include <string.h> char d[4][5]={"<","&lt;",">","&gt;"};void main(int c,char**v){char h[256][256],b [1024],g[256];int i=0,j,k,l,m;FILE *e,*f=fopen("keyword.txt","r");while(!feof(f) ){fgets(h[i],256,f);if(h[i][strlen(h[i])-1]==10){h[i][strlen(h[i])-1]=0;}i++;} fclose(f);f=fopen(v[1],"r");e=fopen(strcat(v[1],".html"),"w");while(!feof(f)){ memset(b,0,1024);fgets(b,1024,f);m=0;for(k=0;k<strlen(b);k++){for(l=0;l<2;l++){ if(b[k]==d[l*2][0]){memmove(b+k+3,b+k,strlen(b)-k-l);memcpy(b+k,d[l*2+1],4);k+=3 ;}}if(b[k]==0x22){m=~m;}if(m==0){if(memcmp(b+k,"//",2)==0){memmove(b+k+20,b+k+2, strlen(b)-k-2);memcpy(b+k,"<FONT COLOR=GREEN>//",20);memcpy(b+strlen(b), "</FONT>\0",8);break;}if(b[k]==0x9){memmove(b+k+24,b+k+1,strlen(b)-k-1);memcpy(b +k,"&nbsp;&nbsp;&nbsp;&nbsp;",24);k+=23;}for(j=0;j<i;j++){l=strlen(h[j]);if( memcmp(b+k,h[j],l)==0){memmove(b+k+l+24,b+k+l,strlen(b)-k-l);sprintf(g, "<FONT COLOR=BLUE>%s</FONT>",h[j]);memcpy(b+k,g,l+24);k+=l+23;}}}}fputs(strcat(b ,"<BR>"),e);}fclose(e);fclose(f);}
>>758 自身を食わせると,アンパサンドの変換がないから元と異なるソースが出るね.
dに&と&の対応入れた方が良いかな.
char d[4][5]は書き換える訳じゃないから,char *d[]で良いね.
NULL Terminateな文字列をコピーするときにmemcpy使わずにstrcpyで良いんじゃ?
string.hも#includeしてることだし.
ぱっと見たところでこれだけ発見.けど7行への道のりは遠い……
EOF検出が甘かったので修正。 hoge hoge.c > hoge.html #include <stdio.h> char*strdup(char*),*s="<font color=",*e="</font>",t[999],*p,*w[999],**q;int(*f) (const char*,...),d;FILE*i,*k;g(){return fgetc(i);}h(int*c,int x){return(*c=g() )-EOF?*c-x:0;}main(int c,char**v){i=fopen(v[1],"rt");k=fopen("keyword.txt","r") ;f=printf;q=w;while(fscanf(k,"%s",t)-EOF)*q++=strdup(t);*q=0;f("<html><body><p\ re>");while(h(&c,0)){if(isalpha(c)||c==95){p=t;*p++=c;while(isalnum(c=g())||c== 95)*p++=c;ungetc(c,i);*p=0;q=w;while(*q){if(!strcmp(t,*q))break;q++;};if(*q)f( "%sred>%s%s",s,t,e);else f(t);}else if(c==47){if((c=g())==42){f("%steal>/",s); do{a(c);while(h(&c,42))a(c);a(c);}while(h(&c,47));a(c);f("%s",e);}else if(c==47 ){f("%steal>//",s);while(h(&c,10))a(c);f("%s\n",e);}else{a(47);ungetc(c,i);}} else if(c==34||c==39){f("%sblue>%c",s,c);while(h(&d,c))a(d);f("%c%s",c,e);}else a(c);}f("</pre></body></html>");return 0;}void a(int x){switch(x){case 38:f( "&amp;");break;case 60:f("&lt;");break;case 62:f("&gt;");break;default:f("%c",x );case 0:;}}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *d[]={"<","&lt;",">","&gt;", "&", "&amp;", "\\\"","\\\""};
void main(int c,char**v){char h[256][256],b[1024],g[256],*o;int i=0,j,l,m,p,q,r;
FILE *e,*f=fopen("keyword.txt","r");while(!feof(f)){fgets(h[i],256,f);j=strlen(h
[i]);if(h[i][j-1]==10){h[i][j-1]=0;}i++;}fclose(f);f=fopen(v[1],"r");e=fopen(
strcat(v[1],".html"),"w");fputs("<HTML><BODY>",e);while(!feof(f)){memset(b,0,
1024);fgets(b,1024,f);m=p=0;o=b;while(o-b<strlen(b)){q=0;for(l=0;l<4;l++){r=
strlen(d[l*2]);if(memcmp(o,d[l*2],r)==0){fputs(d[l*2+1],e);j=strlen(d[l*2+1]);o
+=r;q=1;}}if(p==0){if(*o==0x22){if(m==0){fputs("<FONT COLOR=#808080>\"",e);}else
{fputs("\"</FONT>",e);}o++;q=1;m=~m;}}if(m==0){if(memcmp(o,"/*",2)==0){fputs(
"<FONT COLOR=GREEN>/*",e);o+=2;p=q=1;}if((memcmp(o,"*/",2)==0)&&(p==1)){fputs(
"*/</FONT>",e);p=0;q=1;o+=2;}if(*o==0x9){fputs("&nbsp;&nbsp;&nbsp;&nbsp;",e);o++
;q=1;}if(p==0){if(memcmp(o,"//",2)==0){sprintf(g,"<FONT COLOR=GREEN>//%s</FONT>"
,o+2);fputs(g,e);break;}for(j=0;j<i;j++){l=strlen(h[j]);if(memcmp(o,h[j],l)==0){
sprintf(g,"<FONT COLOR=BLUE>%s</FONT>",h[j]);fputs(g,e);o+=l;q=1;}}}}if(q==0){
fwrite(o,1,1,e);o++;}}fputs("<BR>",e);}fputs("</BODY></HTML>",e);fclose(e);
fclose(f);}
>>749 の機能 + \"によるリテラル色付け暴走防止で
『19』行・・・根本から変えんと縮まる事は無いだろうな・・・
>>758 を少し弄ってみた.
stdlib.hって必要ないですよね?
14行.fopen/fcloseが結構コスト高いなぁ
あとは の連続とか,keywords.txtとか...
キーワードの判定と1行コメントの判定がまとめれればもう少し縮むかな.
sprintfのintが色が変わるのを直そうとするとこれもコスト高いです.
ctype.hインクルードしてctype使うか!(k&&((t=*(b+k-1))?'a'<=t&&t<='z'||'A'<=t&&t<='Z':0))とするか……
#include <stdio.h>
#include <string.h>
*d[]={"<","<",">",">","&","&","\t"," "};size_t
(*o)(const char*)=strlen;p(char*b,int l,int f){char s[512];sprintf(s,"<font co\
lor=%s>",f?"GREEN":"BLUE");strcat(strncat(s,b,l),"</font>");memmove(b+o(s)-l,b,
o(b));memcpy(b,s,o(s));return o(s)-1;}main(int c,char**v){char h[256][256],b[
1024];int i=-1,j,k,l,m;FILE *e,*f=fopen("keyword.txt","r");while(!feof(f)){
fgets(h[++i],256,f);j=o(h[i])-1;h[i][j]==10?h[i][j]=0:0;}fclose(f);f=fopen(v[1]
,"r");e=fopen(strcat(v[1],".html"),"w");while(!feof(f)){memset(b,0,1024);fgets(
b,1024,f);m=1;for(k=0;k<o(b);k++){for(l=0;l<4;l++)if(b[k]==*d[l*2]){j=o(d[l*2+1
]);memmove(b+k+j-1,b+k,o(b)-k);memcpy(b+k,d[l*2+1],j);k+=j;}if(b[k]==34?m=!m:m)
if(memcmp(b+k,"//",2)==0){p(b+k,o(b+k),1);break;}for(j=0;j<i;j++)!memcmp(b+k,h[
j],l=o(h[j]))?k+=l+p(b+k,l,0):0;}fputs(strcat(b,"<BR>"),e);}fclose(e);fclose(f)
;}
>>762 ctype使うかってなんだ...
isalphaのまちがいでふ.
しかも752にアップデートされてるし……
760を圧縮。12行
#include <stdio.h>
char*strdup(char*),*s="<font color=",*e="</font>",t[999],*p,*w[999],**q;int(*f)
(const char*,...),d;FILE*i,*k;g(){return fgetc(i);}h(int x){return(d=g())-EOF?d
-x:0;}void a(){d-60?d-62?d-38?f("%c",d):f("&amp;"):f("&gt;"):f("&lt;");}main(
int c,char**v){i=fopen(v[1],"rt");k=fopen("keyword.txt","r");f=printf;for(q=w;
fscanf(k,"%s",t)-EOF;)*q++=strdup(t);*q=0;for(f("<html><body><pre>");h(0);){if(
isalpha(d)||d==95){p=t;for(*p++=d;isalnum(h(0))||d==95;)*p++=d;*p=0;for(q=w;*q?
strcmp(t,*q++):0;);*q?f("%sred>%s%s",s,t,e):f(t);ungetc(d,i);}else if(d==47){if
(h(0)==42){f("%steal>/",s);do{for(a();h(42);a());a();}while(h(47));f("/%s",e);}
else if(d==47){for(f("%steal>//",s);h(10);)a();f("%s\n",e);}else f("/",ungetc(d
,i));}else if(d-34&&d-39)a();else{c=d;for(f("%sblue>%c",s,d);h(c);)a();f("%c%s"
,c,e);}}f("</pre></body></html>");return 0;}
>>762-763 その方法だと「_」が拾えない罠。「_cprintf」とか「g_print」とか。
>>764 そ,そうですね.
さらに数字も拾えないですね.str2intとか.
ついでにintegerでも色変わりますね.鬱.
HTMLの部分も不正だけど(藁 <body><pre>〜 だけで閉じタグ無くても良くないか? あと、投稿の時は&を&と表記すると良い。 &(&) >(>) <(<) <font color=#RRGGBB> 〜 <font> を <a style=color:#RGB> 〜 </a> としたら減らない?
764だと最後のキーワードが読めなかった…… ついでに微修正 #include <stdio.h> char*strdup(const char*),*s="<font color=",*e="</font>",t[999],*p,*w[999],**q; int(*f)(const char*,...),d;FILE*i,*k;g(){return fgetc(i);}h(int x){return(d=g() )-EOF?d-x:0;}void a(){d-60?d-62?d-38?f("%c",d):f("&amp;"):f("&gt;"):f("&lt;");} main(int c,char**v){i=fopen(v[1],"r");k=fopen("keyword.txt","r");f=printf;for(q =w;fscanf(k,"%s",t)-EOF;)*q++=strdup(t);*q=0;for(f("<html><body><pre>");h(0);){ if(isalpha(d)||d==95){p=t;for(*p++=d;isalnum(h(0))||d==95;)*p++=d;*p=0;for(q=w; *q?strcmp(t,*q):0;q++;);*q?f("%sred>%s%s",s,t,e):f(t);ungetc(d,i);}else if(d==4 7){if(h(0)==42){f("%steal>/",s);do{for(a();h(42);a());a();}while(h(47));f("/%s" ,e);}else if(d==47){for(f("%steal>//",s);h(10);)a();f("%s\n",e);}else f("/", ungetc(d,i));}else if(d-34&&d-39)a();else{for(f("%sblue>%c",s,c=d);h(c);)a();f( "%c%s",c,e);}}f("</pre></body></html>");return 0;}
sage間違えた撃つ。隣を押していたよ。 後半の部分、 <font> -> </font>だった。 これでも3文字減るはず。 色表記の組み合わせが 256^3 から 16^3 になるけど問題ないはず。 …#RRGGBB表記じゃなくて 'red' だったのか。 ゴメン、後者だとむしろ一文字増える。 スマン
>>768 *sにあらかじめ # まで入れといたら、
1文字くらいの節約になるか。
red teal blue 三色あるから。
#include <stdio.h> #include <string.h> char *d[]={"<","&lt;",">","&gt;", "&", "&amp;","\\\\","\\\\","\\\"","\\\"","\t", "&nbsp;&nbsp;&nbsp;&nbsp;"," ","&nbsp;"};void main(int c,char**v){char h[256] [256],b[1024],g[256],*o;int i=0,j,l,m,p,q,r;FILE *e,*f=fopen("keyword.txt","r"); while(!feof(f)){fgets(h[i],256,f);j=strlen(h[i]);if(h[i][j-1]==10){h[i][j-1]=0;} i++;}fclose(f);f=fopen(v[1],"r");e=fopen(strcat(v[1],".html"),"w");fputs("<HTML" "><BODY>",e);p=0;while(!feof(f)){memset(b,0,1024);fgets(b,1024,f);m=0;o=b;while( o-b<strlen(b)){q=0;for(l=0;l<7;l++){r=strlen(d[l*2]);if(memcmp(o,d[l*2],r)==0){ fputs(d[l*2+1],e);j=strlen(d[l*2+1]);o+=r;q=1;}}if(!m){if(memcmp(o,"/*",2)==0){ fputs("<FONT COLOR=GREEN>/*",e);o+=2;p=q=1;}if(memcmp(o,"*/",2)==0){fputs("*/</" "FONT>",e);p=0;q=1;o+=2;}}if(!p){if(*o==0x22){if(!m){fputs("<FONT COLOR=#808080" ">\"",e);}else{fputs("\"</FONT>",e);}o++;q=1;m=~m;}if(!m){if(memcmp(o,"//",2)==0 ){fputs("<FONT COLOR=GREEN>",e);p=2;}else{for(j=0;j<i;j++){l=strlen(h[j]);if( memcmp(o,h[j],l)==0){sprintf(g,"<FONT COLOR=BLUE>%s</FONT>",h[j]);fputs(g,e);o+= l;q=1;}}}}}if(!q){fwrite(o,1,1,e);o++;}}if(p==2){fputs("</FONT>",e);p=0;}fputs( "<BR>",e);}fputs("</BODY></HTML>",e);fclose(e);fclose(f);} がんがっても2行しか減らなかった・・・(;´Д⊂`
>>770 「 」のようなとき、
実態参照の後にスペースがあるなどの場合は;を省略できるから
「    」でOK。
# これで3文字
<html></body></html>も無くてもいいだろう。
# 23文字くらいか
本当はあまり良くないけど、7行のためだ、テトリスだってタグを省略してたし。
つーかなんで7行なの?
766、771の通りタグ減らしてみた。
1行しか減らなかったけど。
#include <stdio.h>
int(*f)(const char*,...),d;FILE*i,*k;char*strdup(const char*),*s="<font color="
,*e="</font>",t[999],*p,*w[999],**q;void a(){d-60?d-62?d-38?f("%c",d):f("&"
):f(">"):f("<");}h(int x){return(d=fgetc(i))-EOF?d-x:0;}main(int c,char**
v){i=fopen(v[1],"r");k=fopen("keyword.txt","r");f=printf;for(q=w;fscanf(k,"%s",
t)-EOF;)*q++=strdup(t);*q=0;for(f("<body><pre>");h(0);)if(isalpha(d)||d==95){p=
t;for(*p++=d;isalnum(h(0))||d==95;)*p++=d;*p=0;for(q=w;*q?strcmp(t,*q):0;q++);*
q?f("%sred>%s%s",s,t,e):f(t);ungetc(d,i);}else if(d==47){if(h(0)==42){f("%stea\
l>/",s);do{for(a();h(42);a());a();}while(h(47));f("/%s",e);}else if(d==47){for(
f("%steal>//",s);h(10);)a();f("%s\n",e);}else f("/",ungetc(d,i));}else if(d-34
&&d-39)a();else{for(f("%sblue>%c",s,c=d);h(c);)a();f("%c%s",c,e);};return 0;}
>>772 http://pc3.2ch.net/tech/kako/984/984182993.html
>>767 isalphaとisalnumはctype.h,strcmpはstring.hの定義だよぉ
>>774 strcmpは使ってない(strdupはプロトタイプ書いてある)
isalpha/isalnumは返り値がintだから書いてない。
コンパイラによっては警告出るかもしれないけど。
767がエラーになるはコピペミスです。スマソ。
>>775 strcmp使ってるし……
これも返り値intだから書いてないだけ……
#include <stdio.h> #include <string.h> char*d[]={"<","&lt;",">","&gt;", "&", "&amp;","\\\\","\\\\","\\\"","\\\"","\t", "&nbsp&nbsp&nbsp&nbsp;"," ","&nbsp;","<FONT COLOR="};void main(int c,char**v){ char h[256][256],b[1024],g[256],*o;int i=0,j,l,m,p=0,q,r;FILE *e,*f=fopen("keyw" "ord.txt","r");while(!feof(f)){fgets(h[i],256,f);j=strlen(h[i]);if(h[i][j-1]==10 ){h[i][j-1]=0;}i++;}fclose(f);f=fopen(v[1],"r");e=fopen(strcat(v[1],".html"),"w" );while(!feof(f)){memset(b,0,1024);fgets(b,1024,f);m=0;o=b;while(o-b<strlen(b)){ q=0;for(l=0;l<7;l++){r=strlen(d[l*2]);if(memcmp(o,d[l*2],r)==0){fputs(d[l*2+1],e );j=strlen(d[l*2+1]);o+=r;q=1;}}if(!m){if(memcmp(o,"/*",2)==0){fprintf(e,"%sGRE" "EN>/*",d[14]);o+=2;p=q=1;}if(memcmp(o,"*/",2)==0){fputs("*/</FONT>",e);p=0;q=1; o+=2;}}if(!p){if(*o==0x22){if(!m){fprintf(e,"%sRED>\"",d[14]);}else{fputs("\"</" "FONT>",e);}o++;q=1;m=~m;}if(!m){if(memcmp(o,"//",2)==0){fprintf(e,"%sGREEN>",d[ 14]);p=2;}else{for(j=0;j<i;j++){l=strlen(h[j]);if(memcmp(o,h[j],l)==0){sprintf(g ,"%sBLUE>%s</FONT>",d[14],h[j]);fputs(g,e);o+=l;q=1;}}}}}if(!q){fwrite(o,1,1,e); o++;}}if(p==2){fputs("</FONT>",e);p=0;}fputs("<BR>",e);}fclose(e);fclose(f);} 文字数食ってるのを統一 →("<FONT COLOR=")&766,771氏の指摘部分修正 1行分削減
>>777 7行スレふぃーばー!
memcmp,fclose,fputs,fprintfなどを関数ポインタにしてみたら?
>関数ポインタに変えた結果 memcmp - 10字程減少 fclose - 10字程増加 fputs - 15字程減少 fprintf - (以下略 後30字程減少できたら1行削減なのに届かない・・・
#include <stdio.h> #include <string.h> int(*s)(const void*,const void*,size_t)=memcmp,(*t)(const char*,FILE*)=fputs; char*d[]={"<","&lt;",">","&gt;","&","&amp;","\\\\","\\\\","\\\"","\\\"","\t", "&nbsp;","&nbsp&nbsp&nbsp;"," ","&nbsp;","<FONT COLOR="};void main(int c,char**v ){char h[256][256],b[1024],g[256],*o;int i=0,j,l,m,p=0,q,r;FILE *e,*f=fopen("ke" "yword.txt","r");while(!feof(f)){fgets(h[i],256,f);j=strlen(h[i]);if(h[i][j-1]== 10){h[i][j-1]=0;}i++;}fclose(f);f=fopen(v[1],"r");e=fopen(strcat(v[1],".html"), "w");while(!feof(f)){memset(b,0,1024);fgets(b,1024,f);m=0;o=b;while(o-b<strlen(b )){q=0;for(l=0;l<7;l++){r=strlen(d[l*2]);if(s(o,d[l*2],r)==0){t(d[l*2+1],e);j= strlen(d[l*2+1]);o+=r;q=1;}}if(!m){if(s(o,"/*",2)==0){fprintf(e,"%sGREEN>/*",d[ 15]);o+=2;p=q=1;}if(s(o,"*/",2)==0){t("*/</FONT>",e);p=0;q=1;o+=2;}}if(!p){if(*o ==0x22){if(!m){fprintf(e,"%sRED>\"",d[15]);}else{t("\"</FONT>",e);}o++;q=1;m=~m; }if(!m){if(s(o,"//",2)==0){fprintf(e,"%sGREEN>",d[15]);p=2;}else{for(j=0;j<i;j++ ){l=strlen(h[j]);if(s(o,h[j],l)==0){sprintf(g,"%sBLUE>%s</FONT>",d[15],h[j]);t(g, e);o+=l;q=1;}}}}}if(!q){fwrite(o,1,1,e);o++;}}if(p==2){t("</FONT>",e);p=0;}t("<B" "R>",e);}fclose(e);fclose(f);}
半分冗談で書いたんだがw、すげーな、もまいら。 7行すれなんだからダメなんだろうけど、そこまで圧縮できただけでも すごいよ。まじで。
>>780 そもそもプログラム末のfcloseはいらないのでは?
あと、文字列リテラルchar *d[]={"1...","2...", ...};は、まとめちゃって、
char *d="1...\02...\..."; にして、d+0,d+?, ... でアクセスしたら?
あと、それに\"</font>も加えると。d+x, d+x+2で\"を入れるか入れないか選択可。
あと細かいけど、 char h[256][256],b[1024],g[256],*o; ↓ char*o,h[256][256],b[1024],g[256]; aaa;while(xxx){yyy;zzz;} ↓ for(aaa;xxx;zzz)yyy;
>>780 ・==0は(基本的に)不要
・グローバルなint n=999を用意し、配列のサイズは全部nに統一
・可能な限りローカル変数グローバルにする。それぞれにint等書く分と、
場合によっては=0の初期化分が稼げる。関数呼び出しがネストしなければ、
引数と返り値もグローバルにしたほうがちぢむ可能性あり(callの出現回数による)。
キレイすぎ。元からもっと縮められるはず。
つーか、void main(...) のあたりでいやソな感じ
#include <stdio.h> #include <string.h> int(*s)(const void*,const void*,size_t)=memcmp,(*t)(const char*,FILE*)=fputs,i= 0,j,l,m,q,p=0,r,w;char*d="<\0<\0>\0>\0&\0&\0\\\\\0\\\\\0\\\"\0\\\"\0" "\t\0    \0 \0 \0<FONT COLOR=",*o,h[256][256],b[1024],g [256];main(int c,char**v){FILE *e,*f=fopen("keyword.txt","r");while(!feof(f)){ fgets(h[i],256,f);j=strlen(h[i]);if(h[i][j-1]==10){h[i][j-1]=0;}i++;}fclose(f);f =fopen(v[1],"r");e=fopen(strcat(v[1],".html"),"w");while(!feof(f)){memset(b,0, 1024);fgets(b,1024,f);m=0;o=b;while(o-b<strlen(b)){q=w=0;for(l=0;l<7;l++){r= strlen(d+w);if(!s(o,d+w,r)){t(d+w,e);o+=r;q=1;}w+=strlen(d+w)+1;}if(!m){if(!s(o, "/*",2)){fprintf(e,"%sGREEN>/*",d+67);o+=2;p=q=1;}if(s(o,"*/",2)==0){t("*/</FON" "T>",e);p=0;q=1;o+=2;}}if(!p){if(*o==0x22){if(!m){fprintf(e,"%sRED>\"",d+67);} else{t("\"</FONT>",e);}o++;q=1;m=~m;}if(!m){if(!s(o,"//",2)){fprintf(e,"%sGREEN" ">",d+67);p=2;}else{for(j=0;j<i;j++){l=strlen(h[j]);if(!s(o,h[j],l)){sprintf(g, "%sBLUE>%s</FONT>",d+67,h[j]);t(g,e);o+=l;q=1;}}}}}if(!q){fwrite(o,1,1,e);o++;}} if(p==2){t("</FONT>",e);p=0;}t("<BR>",e);}} 17→16行に縮まりますた 783,784氏thx!
をっと・・&を全角にするのを忘れていた・・・ #include <stdio.h> #include <string.h> int(*s)(const void*,const void*,size_t)=memcmp,(*t)(const char*,FILE*)=fputs,i= 0,j,l,m,q,p=0,r,w;char*d="<\0&lt;\0>\0&gt;\0&\0&amp;\0\\\\\0\\\\\0\\\"\0\\\"\0" "\t\0&nbsp&nbsp&nbsp&nbsp;\0 \0&nbsp;\0<FONT COLOR=",*o,h[256][256],b[1024],g [256];main(int c,char**v){FILE *e,*f=fopen("keyword.txt","r");while(!feof(f)){ fgets(h[i],256,f);j=strlen(h[i]);if(h[i][j-1]==10){h[i][j-1]=0;}i++;}fclose(f);f =fopen(v[1],"r");e=fopen(strcat(v[1],".html"),"w");while(!feof(f)){memset(b,0, 1024);fgets(b,1024,f);m=0;o=b;while(o-b<strlen(b)){q=w=0;for(l=0;l<7;l++){r= strlen(d+w);if(!s(o,d+w,r)){t(d+w,e);o+=r;q=1;}w+=strlen(d+w)+1;}if(!m){if(!s(o, "/*",2)){fprintf(e,"%sGREEN>/*",d+67);o+=2;p=q=1;}if(s(o,"*/",2)==0){t("*/</FON" "T>",e);p=0;q=1;o+=2;}}if(!p){if(*o==0x22){if(!m){fprintf(e,"%sRED>\"",d+67);} else{t("\"</FONT>",e);}o++;q=1;m=~m;}if(!m){if(!s(o,"//",2)){fprintf(e,"%sGREEN" ">",d+67);p=2;}else{for(j=0;j<i;j++){l=strlen(h[j]);if(!s(o,h[j],l)){sprintf(g, "%sBLUE>%s</FONT>",d+67,h[j]);t(g,e);o+=l;q=1;}}}}}if(!q){fwrite(o,1,1,e);o++;}} if(p==2){t("</FONT>",e);p=0;}t("<BR>",e);}}
>>786 独自に
>>780 を縮めてみました。14行。
7行スレ特有の汚いプログラムですが、参考にしてくだちい
>>752 さん
バグ?:タブとスペースがnbspに変換されていない
バグ?:keyword.txtの各行の改行が0x0a,0x0dのどちらでも対応できるようにした
仕様変更:出力先をout.htmlに固定
仕様変更:b[]のサイズを999にした
#include <stdio.h>
#include <string.h>
int(*s)()=memcmp,(*t)()=fputs,i,j,l,p,q,r;char*d[]={"<","<",">",">","&",
"&","\\\\","\\\\","\\\"","\\\"","\t"," "," "," "
,"","<FONT COLOR="},*o,h[256][256],b[999],g[256];main(int m,char**v){FILE*e=
fopen("out.html","w"),*f=fopen("keyword.txt","r");for(;!feof(f);i++)for(fgets(h[
i],256,f),q=strlen(h[i]);q--;)if(*(o=h[i]+q)==10||*o==13)*o=0;for(f=fopen(v[1],
"r");!feof(f);p-2||(t("</FONT>",e),p=0),t("<BR>",e))for(memset(b,m=0,q=999),fgets
(o=b,q,f);o-b<strlen(b);q||fwrite(o++,1,1,e)){for(q=0,l=7;l--;!s(o,d[j],r=strlen
(d[j]))?t(d[j+1],e),j=strlen(d[j+1]),o+=r,q=1:0)j=l*2;if(!m)!s(o,"/*",2)?fprintf
(e,"%sGREEN>/*",d[15]),o+=2,p=q=1:0,!s(o,"*/",2)?t("*/</FONT>",e),p=0,q=1,o+=2:0
;if(!p)if(*o==34?m?t("\"</FONT>",e):fprintf(e,"%sRED>\"",d[15]),o++,q=1,m=~m:0,
!m)if(s(o,"//",2))for(j=i;j--;)!s(o,h[j],l=strlen(h[j]))?sprintf(g,"%sBLUE>%s</"
"FONT>",d[15],h[j]),t(g,e),o+=l,q=1:0;else fprintf(e,"%sGREEN>",d[15]),p=2;}}
文字列の部分をしっぱい。 char*d[]={"<","&lt;",">","&gt;","&","&amp;","\\\\","\\\\","\\\"","\\\"","\t", "&nbsp;&nbsp;&nbsp;&nbsp;"," ","&nbsp;","","<FONT COLOR="},*o,h[256][256],b[999],g[256];
>>773 アルゴリズムは追ってないけど。
・return(d=fgetc(i))-EOF?d-x:0;→ (d=fgetc(i))<0?0:d-x;
・fscanf(k,"%s",t)-EOF → fscanf(k,"%s",t)>=0
・void a(){d-60?d-62?d-38?f("%c",d):f("&"):f(">"):f("<");}
→ void a(){f(d-60?d-62?d-38?(f("%c",d),""):"&":">":"<");}
・*q?strcmp(t,*q):0 → *q&&strcmp(t,*q)
あとはファイル名を短い固定のものにするか、
入出力を変えるくらいですね
7行じゃなくて済みません。Java版、自分自身を表示。 class S{public static void main(String[]c){new S();}S(){while((c=h(i,2))!=1295) {System.out.print(s.substring(c,c+h(i+2,1)));i+=3;}}int i=95,c;int h(int i,int n){return Integer.parseInt(s.substring(i,i+n),36);}String s=" (){}[];,.?!+=12"+ "9536publiclasstaticvoidmainewhilesubstringSystemoutprintIntegereturnparseInt"+ "\n\"\\0p50011m10310k60010t60010z40011340111m11h50520p10210311630011m10120710"+ "411m10120311850110110p10d11910110o10810f10210210b10d10e40212k10311m60911s309"+ "11v50110s10911d90110p10810p10c11910110o10c10f10810e10210210210710o10c20i1071"+ "0410411x30010o10d10g20810p10711x30011910111x30010o10811x32k11610210312660012"+ "070912c80110s10911d90110o10810o10c11610210810i20210710411m11h50010s10d12l100"+ "g2l10c12k20gz1fz2e62l10c12k22m11612m12l12m12m12nz3mz2l10c12k24lz5kz6j62l10c1"+ "2k26pz7oz8n62l10c12k28tz9szar62l10c12k2axzbwzcv62l10c12k2d1ze0zez62l10c12k2f"+ "5zg4zh362l10c12k2h9w2l1071041zz0";}
>>788 最初のループの中身を次のようにしてもいいんじゃないか?
for(fgets(h[i],256,f),q=strlen(h[i]);q--;)if(*(o=h[i]+q)==10||*o==13)*o=0;
↓
for(fgets(o=h[i],250,f);*o;o++)*o==10||*o==13?*o=0:0;
>>790 サンクス。
キーワードファイル名を「k」にして、色々絞ってみた。10行。
#include <stdio.h>
int(*f)()=printf,d;FILE*i,*k;char*strdup(),t[99],*p,*e="</font>",*w[999],**q,*s
="<font color=",*l="%steal>/";h(int x){return(d=fgetc(i))<0?0:d-x;}a(){f(d-60?d
-62?d-38?"%c":"&":">":"<",d);}main(int c,char**v){i=fopen(v[1],"r");q
=w;for(k=fopen("k","r");fscanf(k,"%s",t)>0;)*q++=strdup(t);f("<body><pre>");for
(*q=0;h(0);)if(isalpha(d)|d==95){p=t;for(*p++=d;isalnum(h(0))|d==95;)*p++=d;*p=
0;for(q=w;*q&&strcmp(t,*q);q++);ungetc(d,i);f(*q?"%sred>%s%s":t,s,t,e);}else if
(d-47)if(d-34&&d-39)a();else{for(f("%sblue>%c",s,c=d);h(c);)a();f("%c%s",c,e);}
else{if(h(0)-42)if(d-47)f("/",ungetc(d,i));else{for(f(l,s),a();h(10);)a();f(
"%s\n",e);}else{f(l,s);do{for(a();h(42);a());a();}while(h(47));f("/%s",e);}};}
gccでwarning出るけど勘弁(VC++は問題なし)。
788ですが、12行まで縮めたので寝まつ。 仕様変更:入力キーワードファイルを k, 出力HTMLを o.htm に変更 仕様変更:コメントの色を GREEN から CYAN に #include <stdio.h> char*x="*/</FONT>",b[999],*d[]={"<","&lt;",">","&gt;","&","&amp;","\\\\","\\\\", "\\\"","\\\"","\t","&nbsp&nbsp&nbsp&nbsp;"," ","&nbsp;","<FONT COLOR="},*o,h[256 ][256];int(*t)()=fputs,memcmp(),(*s)()=memcmp,i,j,l,p,q,r;main(m,v)char**v;{FILE *e=fopen("o.htm","w"),*f=fopen("k","r");for(;!feof(f);i++)for(fgets(o=h[i],250, f);*o;o++)*o==10||*o==13?*o=0:0;for(f=fopen(v[1],"r");!feof(f);p-2||(p=t(x+2,e)) ,t("<BR>",e))for(memset(b,m=0,q=999),fgets(o=b,q,f);o-b<strlen(b);q||fwrite(o++, 1,1,e)){for(q=0,l=7;l--;!s(o,d[j],r=strlen(d[j]))?q=!t(d[j+1],e),o+=r:0)j=l*2;if (!m)!s(o,"/*",2)?t(d[14],e),p=q=!t("CYAN>/*",e),o+=2:0,!s(o,"*/",2)?p=t(x,e),q=1 ,o+=2:0;if(!p)if(*o==34?m?t("\"</FONT>",e):(t(d[14],e),t("RED>\"",e)),o++,q=1,m= ~m:0,!m)if(s(o,"//",2))for(j=i;j--;)!s(o,h[j],l=strlen(h[j]))?t(d[14],e),t("BLU" "E>",e),t(h[j],e),q=!t(x+2,e),o+=l:0;else t(d[14],e),t("CYAN>",e),p=2;}}
初心者質問良いですか? こうやって行数を少なくすると実用面で良い点(処理速度とか) があるんですか?
>>797 実用性は無い。まったく無い。七行プログラムを書い
たり、他人の書いた七行プログラムを解読することで、
プログラミングの能力がちょびっと高まることはあるか
もしれん。でもそれも副作用にしか過ぎない。できる
だけ少ない行数でできるだけ高度な機能を実装してい
るプログラムを見て驚くのが好きだからやってる。
>>797 楽しんでるだけだよ。
プログラムを楽しめるってのはいいことじゃないか。
void*memset(void*,int,unsigned int),srand(unsigned int),exit(int);int rand(), printf(),scanf(const char*,...),(*m)()=printf;unsigned int time(unsigned int*); char *z="?\0O\0a\0b\0c\0d\0e\0f\0g\0h\0X",a[12][12],b,c,d,e,f,g=100,h,i,l[12][12 ];main(){memset(a,1,144);memset(l,0,144);srand(time(0));for(b=10;b--;){for(;;){c =rand()%10+1;d=rand()%10+1;if(a[c][d]!=10){a[c][d]=10;for(e=-1;e<2;e++){for(f=-1 ;f<2;f++){a[c+f][d+e]<10?a[c+f][d+e]++:0;}}break;}}}for(;;){for(b=10;b--;){for(c =10;c--;m("[%s]",z+l[10-c][10-b]*2));m("\n");}a[d][e]==10?m("[GameOver]\n"),exit (0):0;g==10?m("[Clear]\n"),exit(0):0;m("Where?(x y)");scanf("%d %d",&d,&e);l[d][ e]=a[d][e];i=1;while(i==1){i=0;for(b=1;b<11;b++){for(c=1;c<11;c++){if(l[c][b]==1 ){for(h=-1;h<2;h++){a[c+h][b]!=10&&l[c+h][b]==0?l[c+h][b]=a[c+h][b],g--,i=1:0;a[ c][b+h]!=10&&l[c][b+h]==0?l[c][b+h]=a[c][b+h],g--,i=1:0;}}}}}g--;}} ('A`)・・・
>>796 &nbsp&nbsp&nbsp&nbsp;
用は半角スペースが2個以上連続していなければいいんだから、
二つ目の はハンカクスペースで置き換えられるかも。
10行と半分。
>>755 さんにはまだ追いつけない・・・
バグ?:
>>786-787 を取り入れたが、アンパサンド等置換部分にバグ有りました。修正。
仕様変更:
>>795 と同じように標準出力に出力
仕様変更:色 CYAN は標準16色に入っていなかったので、AQUA に変更
多謝:
>>801 さん
#include <stdio.h>
int(*t)()=printf,memcmp(),(*s)()=memcmp,i,j,l,p,q,r;char*d="<\0<\0>\0>\0&"
"\0&\0\\\\\0\\\\\0\\\"\0\\\"\0\t\0    \0 \0 ",h[256][256],
*o,b[999],*x="*/</FONT>",*y="<FONT COLOR=%s";main(m,v)char**v;{FILE*f=fopen("k",
"r");for(;~(m=getc(f));)m-10&&m-13?h[i][j++]=m:(j?i++:0,j=0);j&&i++;for(f=fopen(
v[1],"r");m=!feof(f);p-2||(p=0,t(x+2)),t("<BR>"))for(fgets(o=b,999,f);o-b<strlen
(b);q||putchar(*o++)){q=j=0;for(l=14;l--;l%2&&!s(o,d+j,r)?j+=r+1,t(d+j),o+=r,q=1
:(j+=r+1))r=strlen(d+j);for(j=0;m&&j<2;j++)!s(o,j?"*/":"/*",2)?p=!j,q=1,t(j?x:y,
"AQUA>/*"),o+=2:0;if(!p)if(*o==34?t(m?y:"\"%s",m?"RED>\"":x+2),o++,q=1,m=!m:0,m)
if(s(o,"//",2))for(j=i;j--;)!s(o,h[j],l=strlen(h[j]))?t(y,"BLUE>"),t(h[j]),q=1,t
(x+2),o+=l:0;else t(y,"AQUA>"),p=2;}}
>>752 >>788 かなり最初のほうから、行コメントとブロックコメントの重複処理がバグっている
// aaa /* bbb */
ccc
これだと、aaa の p=2 が bbb で消されて、ccc 以降がすべて aaa の色になる。
バグ?:致命的だったので、
>>803 のバグを解決しました。
仕様変更:入力を標準入力から読み込むように変更
#include <stdio.h>
char*d="<\0<\0>\0>\0&\0&\0\\\\\0\\\\\0\\\"\0\\\"\0\t\0   &nbs"
"p;\0 \0 ",*o,*a,h[256][256],b[999],*x="*/</FONT>",*y="<FONT COLOR=%s";int(
*t)()=printf,memcmp(),(*s)()=memcmp,i,j,l,p,q,r;main(m){FILE*f=fopen("k","r");
for(;~(m=getc(f));)m-10&&m-13?h[i][j++]=m:(j&&i++,j=0);for(j&&i++;fgets(o=b,m=999
,stdin);q?q=!t(x+2):0,t("<BR>"))for(;a=o,o-b<strlen(b);a-o||putchar(*o++)){j=0;
for(l=14;l--;j+=r+1,l%2&&!s(o,d+j-r-1,r)?t(d+j),o+=r:0)r=strlen(d+j);for(j=0;!q
&&m&&j<2;j++)!s(o,j?"*/":"/*",2)?p=!j,t(j?x:y,"AQUA>/*"),o+=2:0;if(!p)if(*o==34?
t(m?y:"\"%s",m?"RED>\"":x+2),o++,m=!m:0,m)for(j=!s(o,"//",2)?t(y,"AQUA>"),q=1:i;
!q&&j--;)!s(o,h[j],r=strlen(h[j]))?t(y,"BLUE>"),t(h[j]),t(x+2),o+=r:0;}}
7行にできました。Java版、自分自身を表示。 class S{public static void main(String[]a){new S();}S(){while(8463!=(c=92*h(i++ )+h(i++))){System.out.print(s.substring(c,c+h(i++)));}}int i=191,c;int h(int i) {return s.charAt(i)-35;}String s="\\class S{public static void main(String[]a"+ "){new S();}{while(8463!=(c=92*h(i++\n)+h(i++))){System.out.print(s.substring"+ "(c,c+h(i++)));}}int i=191,c;int h(int i){return s.charAt(i)-35;}String s=\"#"+ "$W#S<#qr#p$$dE##$##$#$L%)$#o%%)$#MF##$#B$#qJ%)$#o%%)$$<l##$%)$%*$%)$#o%%)"+ "$%+o%)$#o%%)$%wn%)$#V$#W$~~/* Save me to a file as 'S.java' (^_^)/ */";}
やっと一桁……でもあと2行(死 int printf(),(*f)()=printf,d;void*fopen(),*i,*k;char*strdup(),t[99],*p,*w[999], *e="</font>",**q=w,*s="<font color=",*l="%steal>/";h(int x){return(d=getc(i))<0 ?0:d-x;}a(){f(d-60?d-62?d-38?"%c":"&":">":"<",d);}main(c,v)char**v;{k =fopen("k","r");for(i=fopen(v[1],"r");fscanf(k,"%s",t)>0;)*q++=strdup(t);for(f( "<body><pre>");h(0);)if(isalpha(d)|d==95){p=t;for(*p++=d;isalnum(h(0))|d==95;)* p++=d;*p=0;for(q=w;*q&&strcmp(t,*q);q++);ungetc(d,i);f(*q?"%sred>%s%s":t,s,t,e) ;}else if(d-47){if(d==34|d==39){for(f("%sblue>%c",s,c=d);h(c);)a();f("%s",e);}a ();}else{if(h(0)-42)if(d-47)f("/",ungetc(d,i));else{for(f(l,s),a();h(10);)a();f ("%s\n",e);}else{f(l,s);do{for(a();h(42);a());a();}while(h(47));a();f(e);}};}
>>806 7行目のみ修正&「'」「"」に色をつけないように仕様変更。
;}else if(d-47){if(d==34|d==39){for(f("%c%sblue>",c=d,s);h(c);)a();f("%s",e);}a
int printf(),(*m)()=printf;char*z="?\0O\0a\0b\0c\0d\0e\0f\0g\0h\0X",a[12][12],b, c,d,e,f,g=100,i,l[12][12];main(){memset(a,1,144);memset(l,0,144);srand(time(0)); for(b=10;b--;){for(;;){c=rand()%10+1;d=rand()%10+1;if(a[c][d]<10){a[c][d]=10;for (e=-1;e<2;e++)for(f=-1;f<2;f++)a[c+f][d+e]+=a[c+f][d+e]<10;break;}}}d=e=0;for(;; ){for(b=10;b--;m("\n"))for(c=10;c--;m(z+l[10-c][10-b]*2));a[d][e]>9||g==10?exit( ):0;scanf("%d%d",&d,&e);l[d][e]=a[d][e];for(i=1;i>0;g--){i=0;for(b=11;--b;)for( c=11;--c;)if(l[c][b]==1)for(f=-1;f<2;f++){a[c+f][b]<10&&!l[c+f][b]?l[c+f][b]=a[c +f][b],g--,i=2:0;a[c][b+f]<10&&!l[c][b+f]?l[c][b+f]=a[c][b+f],g--,i=1:0;}}}} 8ギョウマインスイーパ('A`)ワーニングハキニシナイ
806-807微修正。 int printf(),(*f)()=printf,d;void*fopen(),*i,*k;char*strdup(),t[99],*p,*w[999], *e="</font>",**q=w,*s="<font color=",*l="%steal>/";h(int x){return(d=getc(i))<0 ?0:d-x;}a(){f(d-60?d-62?d-38?"%c":"&":">":"<",d);}main(c,v)char**v;{k =fopen("k","r");for(i=fopen(v[1],"r");fscanf(k,"%s",t)>0;)*q++=strdup(t);for(f( "<body><pre>");h(0);)if(isalpha(d)|d==95){p=t;for(*p++=d;isalnum(h(0))|d==95;)* p++=d;*p=0;for(q=w;*q&&strcmp(t,*q);q++);ungetc(d,i);f(*q?"%sred>%s%s":t,s,t,e) ;}else if(d-47){if(d==34|d==39){for(f("%c%sblue>",c=d,s);h(c);)a();f(e);}a();} else{if(h(0)-42)if(d-47)f("/",ungetc(d,i));else{for(f(l,s),a();h(10);)a();f(e); a();}else{f(l,s);do{for(a();h(42);a());a();}while(h(47));a();f(e);}};}
>>808 char a[12][12],b,c,d,e,f,g=100,i,l[12][12];main(){memset(a,1,144);memset(l,0,144
);srand(time(0));for(b=10;b--;)for(;;){c=rand()%10+1;d=rand()%10+1;if(a[c][d]<11
){a[c][d]=11;for(e=2;1+e--;)for(f=2;1+f--;)a[c+f][d+e]+=a[c+f][d+e]<10;break;}};
for(d=e=0;;g-=1-l[d][e]>0){for(b=10;b--;printf("\n"))for(c=10;c--;putchar(l[10-c
][10-b]+47));l[d][e]>10||g<11?exit():0;scanf("%d%d",&d,&e);l[d][e]=a[d][e];for(i
=1;i>0;){i=0;for(b=11;--b;)for(c=11;--c;)if(l[c][b]==1)for(f=2;1+f--;){a[c+f][b]
<10&&l[c+f][b]==0?l[c+f][b]=a[c+f][b],g-=11>(c+f)&&(c+f)>0,i=1:0;a[c][b+f]<10&&l
[c][b+f]==0?l[c][b+f]=a[c][b+f],g-=11>(b+f)&&(b+f)>0,i=1:0;}}}}
マインスイーパってpart1にもあったよね?
char*a="123456789TJQK",*b="HDCS?",c[53],d[9],e[9],l[9];int f,g,h,i,j,printf(),( *k)()=printf,y,z;o(char*v,int w,int*x){while(c[v[w]=rand()%52]);x[0]+=v[w]%13>9? 10:v[w]%13+1;c[v[w]]=1;}p(char*v,int w){for(g=w;g--;){printf("%c%c",*(b+v[g]/13) ,*(a+v[g]%13));}putchar(10);}main(){srand(time(0));memset(c,0,52);memset(l,52,9) ;j=y=z=0;for(g=h=i=2;g--;){o(d,g,&y);o(e,g,&z);}for(;;){k("en:");p(j?e:l,h);k( "me:");p(d,i);y>21?k("lost"),exit():0;z>21?k("win"),exit():0;if(j){y>z?k("win"): 0;y==z?k("draw"):0;y<z?k("lost"):0;exit();}k("cmd?");scanf("%d",&g);switch(g){ case 0:o(d,i++,&y);break;case 1:j=1;}if(z<15+rand()%5){o(e,h++,&z);j=z>21;}}} 8行BJ cmd 0:カードを引く 1:勝負
今日はここまで・・・また
>>755 さんが遠くへ・・・
#include <stdio.h>
char*o,*a,h[256][999],*x="*/</FONT>",*y="<FONT COLOR=%s";int(*t)()=printf,memcmp
(),(*s)()=memcmp,i=1,j,p,q,r;main(m){FILE*f=fopen("k","r");for(;~(m=getc(f));)m-
10&&m-13?h[i][j++]=m:(j&&i++,j=0);for(j&&i++;fgets(o=*h,m=999,stdin);q=q&&!t(x+2
),t("<BR>"))for(;*(a=o);o++){for(j=0;!q*m&&j<2;j++)!s(o,j?"*/":"/*",2)?p=!j,t(j?
x:y,"AQUA>/*"),o+=2:0;if(!p)if(*o==34?t(m?y:"\"%s",m?"RED>\"":x+2),o++,m=!m:0,m)
for(j=!s(o,"//",2)?q=t(y,"AQUA>"):i;!q&&--j;)!s(o,h[j],r=strlen(h[j]))?t(y,"BLU"
"E>"),t(h[j]),t(x+2),o+=r:0;*o==92?t(*++o-34?*o-92?o-=2,"":"\\\\":"\\\""),o++:0;
t(*o-32?*o-60?*o-38?*o-9?a-o?o--,"":"%c":"    ":"&":"<":"&n"
"bsp;",*o);}}
ソース標準入力&コメントは/*〜*/のみ(ANSI C)&
>>749 の必須項目でない'〜'/"〜"の機能削除してやっと7行……
int printf(),(*f)()=printf,c,d;void*fopen(),*k;char*strdup(),t[99],*p,*w[999],*
*q=w,*s="<font color=",*e="</font>";h(x){return(d=getchar())<0?0:d-x;}a(){f(d-
60?d-62?d-38?"%c":"&":">":"<",d);}main(){for(k=fopen("k","r");fscanf(
k,"%s",t)>0;)*q++=strdup(t);for(f("<body><pre>",h(0));d>0;)if(isalpha(d)|d==95)
{p=t;for(*p++=d;isalnum(h(0))|d==95;)*p++=d;*p=0;for(q=w;*q&&strcmp(t,*q);q++);
f(*q?"%sred>%s%s":t,s,t,e);}else if(d-47)a(),h(0);else{if(h(0)-42)f("/");else{f
("%steal>/",s);do{for(a();h(42);a());a();}while(h(47));a();f(e);h(0);}};}
実用性はかなり落ちるけど、とりあえず7行の範囲ってことで。
ちなみに809の機能でソース標準入力にして8行半。 int printf(),(*f)()=printf,c,d;void*fopen(),*k;char*strdup(),t[99],*p,*w[999],* *q=w,*s="<font color=",*l="%steal>/",*e="</font>";h(x){return(d=getchar())<0?0: d-x;}a(){f(d-60?d-62?d-38?"%c":"&":">":"<",d);}main(){for(k=fopen("k" ,"r");fscanf(k,"%s",t)>0;)*q++=strdup(t);for(f("<body><pre>",h(0));d>0;)if(d== 95|isalpha(d)){p=t;for(*p++=d;isalnum(h(0))|d==95;)*p++=d;*p=0;for(q=w;*q&& strcmp(t,*q);q++);f(*q?"%sred>%s%s":t,s,t,e);}else if(d-47){if(d==34|d==39){for (f("%c%sblue>",c=d,s);h(c);)a();f(e);}a();h(0);}else{if(h(0)-42)if(d-47)f("/"); else{for(f(l,s),a();h(10);)a();f(e);a();h(0);}else{f(l,s);do{for(a();h(42);a()) ;a();}while(h(47));a();f(e);h(0);}};}
>>812 char*a="123456789TJQK",*b="HDCS?W\0L",c[53],d[9],e[9],l[9];int printf(),f,g,h,i,
j,(*k)()=printf,y,z;o(char*v,int w,int*x){while(c[v[w]=rand()%52]);*x+=v[w]%13>9
?10:v[w]%13+1;c[v[w]]=1;}p(char*v,int w){for(g=w;g--;)k("%c%c",*(b+v[g]/13),*(a+
v[g]%13));k("\n");}main(){srand(time(0));memset(l,52,9);memset(c,0,52);j=y=z=0;
for(g=h=i=2;g--;){o(d,g,&y);o(e,g,&z);}for(;;){k("e");p(j?e:l,h);k("m");p(d,i);y
>21?k(b+7),exit():0;z>21?k(b+5),exit():0;if(j){y>z?k(b+5):y<z?k(b+7):k("D");exit
();}scanf("%d",&g);g>0?j=1:o(d,i++,&y);z<15+rand()%5?o(e,h++,&z),j=z>21:0;}}
8行→7行
randomize:v=639:w=479:*a:c+:stick k,15:if k&1{x-=4}:if k&2{y-=4}if k&4:x+=4 if k&8{y+=4}:if x<0{x=0}:if x>639{x-=4}::if x<v{s-}else{s+}:if s>5{s-}:cls if s<-5{s+}:if y<0{y=0}:if y>479{y-=4}:if y<w{t-}else{t+}:if t>5{t-}:if t<-5:t+ v+=s:w+=t:if v<0{v=0}:if v>636{v=636}:if w<0{w=0}:if w>476{w=476}:color 255 pset v,w:color:pset x,y:if ((v-x)*(v-x))+((w-y)*(w-y))>99{wait 6:rnd r,30 if c>10000{dialog "clear":end}:if r=0{s=0:t=0}:goto *a}:dialog "score = "+c 黒い点(初期左上隅)を操作して赤点(初期左下隅)から逃げつづける。 操作はキーボードの←↑→↓で。ちなみにハイスコア530
>815を乱暴に圧縮してみるテスツ int printf(),(*f)()=printf,c,d;char*k,*p,t[99],*w[999],**q=w,*s="<font color=",* l="%steal>/",*e="</font>";h(x){return(d=getchar())<0?0:d-x;}a(){f(d-60?d-62?d-38 ?"%c":"&":">":"<",d);}main(){for(k=fopen("k","r");fscanf(k,"%s",t)>0;) *q++=strdup(t);for(f("<body>",h(0));d>0;)if(d==95|isalpha(d)){p=t;for(*p++=d; isalnum(h(0))|d==95;)*p++=d;*p=0;for(q=w;*q&&strcmp(t,*q);q++);f(*q?"%sred>%s%s" :t,s,t,e);}else if(d-47){if(d==34|d==39){for(f("%c%sblue>",c=d,s);h(c);)a();f(e) ;}a();h(0);}else{if(h(0)-42)if(d-47)f("/");else{for(f(l,s),a();h(10);)a();f(e);a ();h(0);}else{f(l,s);do{for(a();h(42);a());a();}while(h(47));a();f(e);h(0);}};}
>>818 int以外のプロトタイプ無くすのはともかく
<pre>無くすと<br>とか&nbsp;とか要るから
a(){f(d-9?d-10?d-32?d-60?d-62?d-38?"%c":"&":">":"<":" ":"<br>":
"    ",d);}
とかになってむしろ長くなるかと。
>>818 int*k,printf(),(*f)()=printf,c,d;char*p,t[99],*w[999],**q=w,*s="<font color=",*l
="%steal>/",*e="</font>";h(x){return(d=getchar())<0?0:d-x;}a(){f(d-60?d-62?d-38?
"%c":"&":">":"<",d);}main(){for(k=fopen("k","r");fscanf(k,"%s",t)>0;)*
q++=strdup(t);for(f("<pre>",h(0));d>0;)if(d==95|isalpha(d)){p=t;for(*p++=d;
isalnum(h(0))|d==95;)*p++=d;*p=0;for(q=w;*q&&strcmp(t,*q);q++);f(*q?"%sred>%s%s"
:t,s,t,e);}else if(d-47){if(d==34|d==39){for(f("%c%sblue>",c=d,s);h(c);)a();f(e)
;}a();h(0);}else{if(h(0)-42)if(d-47)f("/");else{for(f(l,s),a();h(10);)a();f(e);a
();h(0);}else{f(l,s);do{for(a();h(42);a());a();}while(h(47));a();f(e);h(0);}};}
>>820 int*k,printf(),(*f)()=printf,c,d;char*p,t[99],*w[999],**q=w,*s="<font color=",*l
="%steal>/",*e="</font>";h(x){return(d=getchar())<0?0:d-x;}a(){f(d-60?d-62?d-38?
"%c":"&":">":"<",d);}main(){for(k=fopen("k","r");fscanf(k,"%s",t)>0;)*
q++=strdup(t);for(f("<pre>",h(0));d>0;)if(d==95|isalpha(d)){p=t;for(*p++=d;
isalnum(h(0))|d==95;)*p++=d;*p=0;for(q=w;*q&&strcmp(t,*q);q++);f(*q?"%sred>%s%s"
:t,s,t,e);}else if(d-47){if(d==34|d==39){for(f("%c%sblue>",c=d,s);h(c);)a();f(e)
;}a();h(0);}else{if(h(0)-42)if(d-47)f("/");else{for(f(l,s),a();h(10);)a();f(e);a
();h(0);}else{f(l,s);do{for(a();h(42);a());a();}while(h(47));a();f(e);h(0);}};}
o(x){for(;h(x);)a();}を新設しfor(AAA();h(c);)a();→AAA(),o(c);とする このパターンのforが3箇所あるのでトータルでは削れる 場所によっては{for(AAA();h(c);)a();BBB();}→AAA(),o(c),BBB();と{}を省略可能かと ついでに一部のif()elseが3項演算子に出来るかもしれず ちなみに検証はしてない(w
>>815 &その他
p=t;for(*p++=d;isalnum(h(0))|d==95;)*p++=d;*p=0;
を
ungetc(d,i);fscanf(i,"%[0-9a-zA-Z_]",t);
に。たぶん*pは未使用になる。
>>820-823 色々取り入れてついでに警告抑制してみた。
int w[999],*q=w,k,printf(),(*f)()=printf,c,d;char*e="</font>",*l="%steal>/",*s=
"<font color=",t[99];a(){f(d-60?d-62?d-38?"%c":"&":">":"<",d);}h(x){
return(d=getchar())<0?0:d-x;}o(x){for(;h(x);)a();}main(){for(k=fopen("k","r");
fscanf(k,"%s",t)>0;)*q++=strdup(t);for(f("<pre>",h(0));d>0;)if(d==95|isalpha(d)
){*t=d;t[1]=0;h(scanf("%[0-9a-zA-Z_]",t+1));for(q=w;*q&&strcmp(t,*q);q++);f(*q?
"%sred>%s%s":t,s,t,e);}else if(d-47){d==34|d==39?f("%c%sblue>",c=d,s),o(c),f(e)
:0;a();h(0);}else{if(h(0)-42)d-47?f("/"):f(l,s),a(),o(10),a(),h(f(e));else{f(l,
s);do a(),o(42),a();while(h(47));a();h(f(e));}};}
>>813 //コメントの機能削除,getsを使用,stdio.h削除して7行
int printf(),(*t)()=printf,memcmp(),(*s)()=memcmp,i=1,j,p,q,r,f;char*o,*a,g[99],
h[999],*x="*/</FONT>",*y="<FONT COLOR=%s";main(m){f=fopen("k","r");for(t("<pre>"
);m=gets(o=h);)for(;*(a=o);o++){for(j=0;m&&j<2;j++)!s(o,j?"*/":"/*",2)?p=!j,t(j?
x:y,"AQUA>/*"),o+=2:0;if(!p)if(*o==34?t(m?y:"\"%s",m?"RED>\"":x+2),o++,m=!m:0,m)
{for(rewind(f),q=1;q;)for(r=0;q;)(q=~(j=getc(f)))&&j-10&&j-13?g[r++]=j:(r=r*!s(o
,g,r)?g[r]=0,t(y,"BLUE>"),t(g),t(x+2),o+=r,q=0:0);}*o==92?t(*++o-34?*o-92?o-=2,
"":"\\\\":"\\\""),o++:0;t(*o-60?*o-38?a-o?o--,"":"%c":"&":"<",*o);}}
>>825 getsだと改行が無くなる。
int printf(),(*t)()=printf,memcmp(),(*s)()=memcmp,i=1,j,p,q,r,f;char*o,*a,g[99],
h[999],*x="*/</FONT>",*y="<FONT COLOR=%s";main(m){f=fopen("k","r");for(t("<PRE>"
);m=gets(o=h);t("\n"))for(;*(a=o);o++){for(j=0;m&&j<2;j++)!s(o,j?"*/":"/*",2)?p=
!j,t(j?x:y,"AQUA>/*"),o+=2:0;if(!p)if(*o==34?t(m?y:"\"%s",m?"RED>\"":x+2),o++,m=
!m:m){for(rewind(f),q=1;q;)for(r=0;q;)(q=~(j=getc(f)))&&j-10&&j-13?g[r++]=j:(r=r
*!s(o,g,r)?g[r]=0,t(y,"BLUE>"),t(g),t(x+2),o+=r,q=0:0);}*o==92?t(*++o-34?*o-92?o
-=2,"":"\\\\":"\\\""),o++:0;t(*o-60?*o-38?a-o?o--,"":"%c":"&":"<",*o);}}
>>825 アンパサンドが消えてますね・・・
機能追加: ちょっと短くできたので、行番号表示をしてみました。
int printf(),(*t)()=printf,memcmp(),(*s)()=memcmp,i,j,p,q,r,f;char*o,*a,g[99],h[
999],*x="*/</FONT>",*y="<FONT COLOR=%s";main(m){f=fopen("k","r");for(t("<pre>");
m=gets(o=h);)for(t("%3d ",++i);*(a=o);o++){for(j=2;m&&j--;)!s(o,j?"/*":"*/",2)?p
=j,t(j?y:x,"AQUA>/*"),o+=2:0;if(!p)if(*o==34?t(m?y:"\"%s",m?"RED>\"":x+2),o++,m=
!m:0,m)for(rewind(f),q=1;q;)for(r=0;q;)(q=~(j=getc(f)))&&j-10&&j-13?g[r++]=j:(r=
r*!s(o,g,r)?g[r]=!t(y,"BLUE>"),t(g),o+=r,q=!t(x+2):0);*o==92?t(*++o-34?*o-92?o-=
2,"":"\\\\":"\\\""),o++:0;t(*o-60?*o-38?a-o?o--,"":"%c":"&":"<",*o);}}
バグ修正:
>>826 さんの指摘の改行を追加
int printf(),(*t)()=printf,memcmp(),(*s)()=memcmp,i,j,p,q,r,f;char*o,*a,g[99],h[
999],*x="*/</FONT>",*y="<FONT COLOR=%s";main(m){f=fopen("k","r");for(t("<pre>");
m=gets(o=h);)for(t("\n%3d ",++i);*(a=o);o++){for(j=2;m&&j--;)!s(o,j?"/*":"*/",2)
?p=j,t(j?y:x,"AQUA>/*"),o+=2:0;if(!p)if(*o==34?t(m?y:"\"%s",m?"RED>\"":x+2),o++,
m=!m:m)for(rewind(f),q=1;q;)for(r=0;q;)(q=~(j=getc(f)))&&j-10&&j-13?g[r++]=j:(r=
r*!s(o,g,r)?g[r]=!t(y,"BLUE>"),t(g),o+=r,q=!t(x+2):0);*o==92?t(*++o-34?*o-92?o-=
2,"":"\\\\":"\\\""),o++:0;t(*o-60?*o-38?a-o?o--,"":"%c":"&":"<",*o);}}
824のコメントでない/の処理がおかしかったので修正。 int w[999],*q=w,k,printf(),(*f)()=printf,c,d;char*e="</font>",*l="%steal>/",*s= "<font color=",t[99];a(){f(d-60?d-38?"%c":"&":"<",d);}h(x){return(d= getchar())<0?0:d-x;}o(x){for(;h(x);)a();}main(){for(k=fopen("k","r");fscanf(k, "%s",t)>0;)*q++=strdup(t);for(h(f("<pre>"));d>0;)if(d==95|isalpha(*t=d)){t[1]=0 ;h(scanf("%[0-9a-zA-Z_]",t+1));for(q=w;*q&&strcmp(t,*q);q++);f(*q?"%sred>%s%s": t,s,t,e);}else if(d-47){d==34|d==39?f("%c%sblue>",c=d,s),o(c),f(e):0;a();h(0);} else{if(h(0)-42)d==47?f(l,s),a(),o(10),a(),h(f(e)):f("/");else{f(l,s);do a(),o( 42),a();while(h(47));a();h(f(e));}};}
>828 int printf(),(*t)()=printf,memcmp(),(*s)()=memcmp,i,j,p,q,r,f;char*o,*a,g[99],h [999],*x="*/</FONT>",*y="<FONT COLOR=%s";main(m){f=fopen("k","r");for(t("<pre>" );m=gets(o=h);)for(t("\n%3d ",++i);*(a=o);o++){for(q=j=2;m*j--;)s(o,j?"/*":"*/" ,2)||t((p=j)?y:x,"AQUA>/*",o+=2);if(!p?*o==34?t(m?y:"\"%s",m?"RED>\"":x+2),o++, m=!m:m:0)for(rewind(f),r=0;q;)(q=~(j=getc(f)))&&j-10&&j-13?g[r++]=j:(r=r*!s(o,g ,r)?g[r]=!t(y,"BLUE>"),t(g),o+=r,q=!t(x+2):0);*o==92?t(*++o-34?*o-92?o-=2,"": "\\\\":"\\\""),o++:0;t(*o-60?*o-38?a-o?o--,"":"%c":"&":"<",*o);}}
>>829 f(l,s);do a(),o(42),a();while(h(47));をfor(f(l,s);a(),o(42),a(),h(47););に。
d==47をd-47に(入れ替え)。
7行目最初のelseの{と、対応する}は冗長。
最後の;は要る?
>>831 ご指摘通りに。6文字減少。
ただ、d==47は入れ替えると括弧が増える
(もしくは824のバグが再発する)。
d-47?f("/"):(f(l,s),a(),o(10),a(),h(f(e)))
int w[999],*q=w,k,printf(),(*f)()=printf,c,d;char*e="</font>",*l="%steal>/",*s=
"<font color=",t[99];a(){f(d-60?d-38?"%c":"&":"<",d);}h(x){return(d=
getchar())<0?0:d-x;}o(x){for(;h(x);)a();}main(){for(k=fopen("k","r");fscanf(k,
"%s",t)>0;)*q++=strdup(t);for(h(f("<pre>"));d>0;)if(d==95|isalpha(*t=d)){t[1]=0
;h(scanf("%[0-9a-zA-Z_]",t+1));for(q=w;*q&&strcmp(t,*q);q++);f(*q?"%sred>%s%s":
t,s,t,e);}else if(d-47){d==34|d==39?f("%c%sblue>",c=d,s),o(c),f(e):0;a();h(0);}
else if(h(0)-42)d==47?f(l,s),a(),o(10),a(),h(f(e)):f("/");else{for(f(l,s);a(),o
(42),a(),h(47););a();h(f(e));}}
>>830 int printf(),(*t)()=printf,i,j,p,q,r,f;char*o,*a,g[99],h[999],*x="*/</FONT>",*y=
"<FONT COLOR=%s";main(m){f=fopen("k","r");for(t("<pre>");m=gets(o=h);)for(t("\n"
"%3d ",++i);*(a=o);o++){for(q=j=2;m*j--;)memcmp(o,j?"/*":x,2)||t((p=j)?y:x,"AQU"
"A>/*",o+=2);if(!p?*o==34?t(m?y:"\"%s",m?"RED>\"":x+2),o++,m=!m:m:0)for(rewind(f
),r=0;q;)(q=~(j=getc(f)))&&j-10&&j-13?g[r++]=j:(r=r*!memcmp(o,g,r)?g[r]=!t(y,"B"
"LUE>"),t(g),o+=q=r,t(x+2):0);*o==92?t(*++o-34?*o-92?o-=2,"":"\\\\":"\\\""),o++:
0;t(*o-60?*o-38?o-a?o--,"":"%c":"&":"<",*o);}}
>>834 以前は7x80だったよね?
なんで79になってるの?中途半端でしょ。
おっと、発言が正確でないな。 以前に、「なぜ80じゃないのか?」という議論があったとき、 改行を含むか含まないか、80文字でも1行で表示できるできない、 といろいろ意見があって、結局のところ、 「79でも80でもどちらでも、その人の好きなように」という結論だったはず。
>>834 いやいやおかしいな、と思ってよく見たら、
エディタの80行自動折り返しが、横80文字でした。
ついでに過去ログをざっと眺めてみましたが、
>>836 の議論は、もともと「改行文字を含めて」79文字なのかどうかの議論のようです。
part1の最初の頃は1行78文字の作品もあります。
が、その後いろいろ見ていると、半数近くの作品が、
「改行文字を含めずに」79文字と80文字になっているようですね。
私としては、どちらでもいいかなと思います。
しかし、79文字の方が難易度が高いので、
(一応今回の私のは、79文字でも7行でしたが)
次回も挑戦することがあれば79文字でやっていこうと思います。
grep. 3行半。 main(y,z)char**z;{void*a,*b;int c=1,e,f;char d[999];y!=4?exit():0;a=fopen(z[1], "r");b=fopen(z[2],"w");for(;!feof(a);c++){fgets(d,999,a);f=strlen(d)-1;d[f]==10 ||d[f]==13?d[f]=0:0;for(e=0;d[e]>0;e++)!memcmp(d+e,z[3],strlen(z[3]))?fprintf(b ,"%s(l%d):%s\n",z[1],c,d),d[e+1]=0:0;}} grep [検索を掛けるファイル名][リスト出力用ファイル名][検索キーワード]
正規表現組み込むのは大変だな・・・
「ししゃくもくすん」って何ですか?
grep 7行 main(y,z)char**z;{void*a,*b;int c=1,e,f,h,i,j;char d[999],g[99][999],k[99];y!=4? exit():0;memset(k,0,99);for(f=h=i=0;z[3][i]>0;f++,i++){z[3][i]==38?g[h][f]=0,f=0 ,h++,i++,k[h]=1:0;z[3][i]==124?g[h][f]=0,f=0,h++,i++:0;z[3][i]==92&&(z[3][i+1]== 38||z[3][i+1]==124)?i++:0;g[h][f]=z[3][i];g[h][f+1]=0;}a=fopen(z[1],"r");b=fopen (z[2],"w");for(;!feof(a);c++){fgets(d,999,a);f=strlen(d)-1;d[f]==10||d[f]==13?d[ f]=0:0;for(f=0;f<=h;f++){for(e=j=0;d[e]>0;e++)memcmp(d+e,g[f],strlen(g[f]))==0?j =1:0;k[f]>0&&j==0?j=0,f=h+1:0;}j==1?fprintf(b,"%s(l%d):%s\n",z[1],c,d):0;}} 正規表現"|","&"入れただけで2倍・・・
>正規表現"|","&"入れただけで2倍・・・ "&"?
あ、・・・(検索中)・・・"&"なんて正規表現に無いか(゚∀。)
比較演算子の結果のみを論理演算するなら、&&ではなく&だけでOK。0 or 1 だから。一文字減る。
grep 6行半 main(y,z)char**z;{void*a,*b;int c=1,e,f,h,i,j;char d[999],g[99][99],k[99];y=4;y< 4?exit():0;memset(k,0,100);for(f=h=i=0;z[3][i]>0;f++,i++){z[3][i]==38?g[h][f]=0, f=0,h++,i++,k[h]=1:0;z[3][i]==124?g[h][f]=0,f=0,h++,i++:0;i+=z[3][i]==92&(z[3][i +1]==38|z[3][i+1]==124);g[h][f]=z[3][i];g[h][f+1]=0;}a=fopen(z[1],"r");b=fopen(z [2],"w");for(;!feof(a);c++){fgets(d,999,a);f=strlen(d)-1;d[f]==10|d[f]==13?d[f]= 0:0;for(f=j=0;f<=h;k[f]>0&!j?f=h+1:f++)for(e=0;d[e]>0;e++)memcmp(d+e,g[f],strlen (g[f]))==0?j=1:0;j?fprintf(b,"%s(l%d):%s\n",z[1],c,d):0;}} grep [検索を掛けるファイル名][検索ヒットリスト用ファイル名][検索キーワード] ※検索キーワードの正規表現のようなもの | …または…を含む行を検索(ex. dog|cat|frog) & …かつ…を含む行を検索(ex. cow&bird)
4バイトなのか
>>846 オリジナルのgrepみたいな仕様にした。出力は標準出力で、
grep パターン ファイル名
それから、&の動作が間違っていると思うのだが・・・
とりあえずそのまま縮めた
int c=1,f,h,i,j;char*o,d[999],g[99][99],k[99];main(y,z)char**z;{if(y<3)exit();
for(o=*++z;o[i]>0;g[h][++f]=0)o[i]==38?f=g[h][f]=0,i++,k[++h]=1:0,o[i]==124?f=g
[h++][f]=0,i++:0,i+=o[i]==92&(o[i+1]==38|o[i+1]==124),g[h][f]=o[i++];for(y=
fopen(*++z,"r");fgets(d,999,y);j&&printf("%s(l%d):%s\n",*z,c,d),c++)for(f=
strlen(d)-1,f=j=d[f]==10|d[f]==13?d[f]=0:0;f<=h;k[f]>0&!j?f=h+1:f++)for(o=d;*o;
)j+=!memcmp(o++,g[f],strlen(g[f]));}
マッチングはstrstr()でよいのでは。あるいはsscanf()を使い、[]にも 対応するとか。 あと、argcのチェックや、CR,LF両対応(テキストモードで開いてる にも関わらず)をするより、gREpに近い機能を盛り込んだほうが よいのでは。 &機能はgrepを|で接げば実現できるので、個人的には不要に思う。
>>850 のアドバイスを取り入れた
俺もオリジナルgrepの動作を真似たほうがよいと考えている。
grep '[1-9][1-9]*' file
くらいが実行できるようにしてみるつもり。
ちなみに or の | があるのは、egrep か grep -E の機能だね。
int c,f,h,i,j;char*o,d[999],g[99][99],k[99];main(y,z)char**z;{for(o=*++z;o[i]>0
;g[h][f++]=o[i++])o[i]==124?f=g[h++][f]=0,i++:0,i+=o[i]==92&o[i+1]==124;for(y=
fopen(*++z,"r");fgets(d,999,y);c++,j&&printf("%s(l%d):%s",*z,c,d))for(f=j=0;f<=
h;k[f]&!j?f=h+1:f++)j+=!!strstr(d,g[f]);}
grep 1[123][123] file []による選択が可能なようにした。ただし、[1-9]のような指定はまだできない。 残り2行半で、[1-9a-zA-Z]と.くらいは実装できるかなあ。 未熟な俺にはそれで精一杯だろうから、スペシャリストの後輪キボンヌ int c,f,h=1,j;char d[999],g[999][99],x[999];a(o,p,f,m,n)char*o,*p;{for(;*p;g[m] [f++]=*p++)if(*p==91){for(o=p+1;*++p-93;g[h++][f]=*p)strcpy(g[h],g[m]);for(x[m] =n=h;p>o;)a(o++,p+1,f+1,--n);return;}}main(y,z)char**z;{a(d,*++z,0,0,0);for(y= fopen(*++z,"r");fgets(d,999,y);c++,j&&printf("%d:%s",c,d))for(j=f=0;f<h;f++)!x[ f]?j+=!!strstr(d,g[f]):0;}
853 :
デフォルトの名無しさん :03/02/28 16:35
>>852 strstr()をsscanf()にし%[^0-9]を使い、先頭から順にマッチングすれば
[^0-9]には対応できるのでは? .は%*cで。
855 :
デフォルトの名無しさん :03/03/01 09:36
なんかヒサビサに熱いね!age
856 :
デフォルトの名無しさん :03/03/01 14:27
age
grep [CMG][a-zA-Z1-9] file
[]による選択の際、-(ハイフン)を用いた指定が可能に。
>>854 オートマトンを作ったほうがよいのかもしれんが、7行に収まりそうもないので、
次のバージョンからsscanfによる検索に挑戦してみる。
int c,f,h=1,j;char d[999],g[999][99],x[999];a(o,p,e,m,n)char*o,*p;{for(;*p;g[m]
[e++]=*p++)if(*p==91){j=0;for(o=p+1;*++p-93;j++){if(*p==45&p[1]!=93)for(f=p[-1]
+1,p++;f<*p;g[h++][e]=f++,j++)strcpy(g[h],g[m]);strcpy(g[h],g[m]);g[h++][e]=*p;
}for(x[m]=n=h,m=j;m--;)a(o,p+1,e+1,--n);return;}}main(y,z)char**z;{a(d,*++z,0,0
,0);for(y=fopen(*++z,"r");fgets(d,999,y);c++,j&&printf("%d:%s",c,d))for(j=f=0;f
<h;f++)!x[f]?j+=!!strstr(d,g[f]):0;}
素人からのお題 「アナグラム」 どう?
__ | ム |  ̄ ̄ ̄ ̄
>>858 anagram 辞書ファイル名 アルファベットのみの文字列
辞書は1語1行で終端に必ず改行を入れる
9行だがこんな感じでどうだ?
typedef struct D{struct D*p;char f[96],s[];}d;int i,j,k;d*a,*h,*n,*t,*e[999],Z;
d*A(s,l)char*s;{;a=(d*)calloc(1,sizeof(d)+l);s[--l]=0;strcpy(a->s,s);for(s=a->s
;l;a->f[s[--l]&=95]++);return a;}g(char*f){for(i=96;i-->0;(t->f[i]<f[i])?i=-2:0
);return i+3;}x(f,a)char*f;{for(i=96;i--;t->f[i]+=a*f[i]);}main(c,v)char**v;{
char s[999];void*f=(void*)fopen(v[1],"r");for(;fgets(s,999,f);n=A(s,strlen(s)),
n->p=h,h=n);for(t=A(v[2],strlen(v[2])+1),j=0;j+1;){for(n=h;;){for(;n;n=n->p)if(
g(n->f)){x(n->f,-1),e[j++]=n;break;}if(!n){if(!memcmp(Z.f,t->f,96)){for(k=0;k<j
;printf("%s ",e[k++]->s));puts("");}if(!j--)break;x(e[j]->f,1);n=e[j]->p;if(!n)
x(e[--j]->f,1);}}}}
862 :
デフォルトの名無しさん :03/03/04 21:05
age
ex)grep abc[def][g-i]*?j filename #include<stdio.h> #include<string.h> char*X,L[3][9999];C(char*S,char*D){char*s;for(s=*D-42?"":S;*s&&!C(s,D+1);++s); return*D?*D-42?*D-91||!(s=strchr(D,93))?*D-63?s=D-~strcspn(D+1,"[*?"),strncmp( S,D,s-D)?0:C(s-D+S,s):*S&&C(S+1,D+1):(sprintf(L[1],"%%1%s",D),sscanf(S,L[1],L[ 2])&&C(S+1,s+1)):C(s,D+1):1;}main(c,v)char**v;{FILE*f=fopen(v[2],"r");for(c=0; X=fgets(*L,9999,f);*X&&printf("%d:%s",c,*L))for(++c;*X&&!C(X,v[1]);++X);}
>>864 FP-602P! 懐かしいな。
自分は501Pしか持ってませんでしたけどね。(泣
まず解読するのに手間がかかるな(w
HSP2.6 title "5行クエスト":h=95:i=150:v=13:x=3:y=3:z=2:n="勇者":m="魔王":width 420,200 mes m+"が現れた!":wait 99:do:text 13:randomize:rnd d,20:if d>18{d=d*2}if t\2=1{ d+(x-y):a=m:b=n:h-d:c=h}else{d+(v-z):a=n:b=m:i-d:c=i}mes a+"「"+b+"氏ねよ」" wait 40:mes a+"の攻撃!"+b+"に"+d+"のダメージ! "+b+"の残りHP"+c+"":wait 90:t+ if t\5=0{cls}until (h<1)|(i<1):mes b+"は氏んだ":dialog a+"必死だな(藁",1,"END"
>>866 プレイヤーの参加性がほしい。
1ターン中に一定時間内にマウスかキーを連打させ、
その回数をダメージに反映させるようにしたら?
(さらには攻撃はマウス連打、防御(被攻撃)はキー連打とか)
んで、ゲームバランスを、必死にならないと勝てないくらいにする、と。
7行クエスト z=96:v=16:h=z,z:c="λ":e="城":do:stick k,15:x+=k&4>0*(x+v<winx)-(k&1*x>0)*v y+=k&8!0*(y+v<winy)-(k&2*y>0)*v:pos x,y:mes c:if k>0{cls}:wait 1:pos z,z:mes e until x=z&(y=z):repeat 4:boxf:wait v:cls:wait v:loop:sdim n,8,2:n="魔王","勇者" width 320,320:pos:cls:mes n+"が現れた!":wait z:cls:do:mes "←連射しる!":text v g=g^1:b=g^1:do:stick k:d+=k&1:a+:await 1:until a\300=0:if t\2=1{d=30-d} h.b-d:mes n.g+"の攻撃!"+n.b+"に"+d+"のダメージ! "+n.b+"HP"+h.b:d=0:t+:wait z if t\6=0{cls}until h.b<1:mes n.b+"は氏んだ":dialog n.g+"必死だな(藁",1,"END"
869 :
デフォルトの名無しさん :03/03/13 01:56
836スゲェ
ジサクジエンカッコワルイ
7行で画像ファイルの操作って出来るかな? 操作の種類は問わないけど
xpmとかだと簡単っぽい
xpmのフォーマットってどんなの?
ども。文字列なのか。 でもこれに対してやりたい操作ってなんかあるの?
拡大・縮小、トリミング、増減色くらいかな。 それかxpm2bmpとか(キビシイか)。
モザイク付けてやらしい画像ぽくするとか。実用的。
16x16でモザイク? イヤラシイ画像を自動生成するとか。
そういや、bmpやpngファイルの生成が過去にあったね。
880 :
デフォルトの名無しさん :03/03/15 13:28
汚いコードばっかりだな もっと見易く書けよ
釣りだうんこ
ム板で「ぬるぽ」の文字を見つけたら自動的に「ガッ」のレスを返す プログラムをどなたか作ってください。
自分で殴るから面白いのに・・・ 自動でやらせて何が嬉しいんだか・・・
886 :
デフォルトの名無しさん :03/03/17 21:22
保守
ねた:シリアル通信 サーバとクライアント間で文字列(ないしは1バイト記号)を転送をする 環境:お好きなように
「FX-602P のエミュレータがほしい」とか逝ってみる鉄男。
過去の7行言語系の能力から察するに、
>>864 のいう麻雀のほうが
まだ実現可能性があると思うがどうか。
ネタ:ファイル暗号化/複合化 7行でできる限り強力なもの 暗号化と複合化は別々で桶
891 :
デフォルトの名無しさん :03/03/21 00:12
>>890 7行RSAとかどうよ
多倍長できないと駄目ね
麻雀面白いな
ネタ:ファイヤーウォール 楽勝だろ?
>>893 HTTP proxy なら過去にあったが、任意のポートとなるとまだないね。
ファイルからIPアドレス変換とか許可ポートを取得して、
それにしたがってNATをかますとか(NAPTは無理だろう)。
ネタ:ぬるぽ
897 :
デフォルトの名無しさん :03/03/24 21:26
int main(int argc,char **argv){*argv=NULL;}//ぬるぽ
>>897 int main(int argc,char **argv){return (int)*argv[argc];}
のほうが、コンパイル時にエラーが出ず、コード中にNULLがなく、
それでいて確実にNULL参照するのでいいのでは? どうでもいいが。。
本当にどうでもいいな。
どうでもいいけど900get
てつでもいいけど902get
ねた:ボンバーマソ
905 :
◆Bpod9Etbmc :03/03/27 23:43
Brainf*ck /*---------------------------------------------------------------------------*/ #include <stdio.h> main(int c,char**v){char*s,i[30000];int l,n,b,t=30000;long a[9];FILE*f;for(++v; *v;++v){memset(i,0,t);s=i;b=0;if(f=fopen(*v,"r")){while(l=fgetc(f),l-EOF){if(l =='>'&&++s>=i+t)exit(1);if(l=='<'&&s--<i)exit(1);if(l=='+')++*s;if(l=='-')--*s; if(l==',')*s=getchar();if(l=='.')putchar(*s);if(l==']'){if(!b)exit(1);fseek(f,a [--b],0);}if(l=='['){if(b>9)exit(1);if(*s)a[b++]=ftell(f)-1;else{n=0;do{l=fgetc (f);if(l=='[')++n;if(l==']'&&!n--)break;}while(l-EOF);}}}fclose(f);}}return 0;} /*---------------------------------------------------------------------------*/
>>905 本家に3行インタプリタがあったはずだが。
907 :
◆Bpod9Etbmc :03/03/28 02:44
リベンジ。 エラーチェックを外し、全体的にリファイン+いい加減化。 入力文字列をファイルの中身から argv[1] に変更。 char*s,b[30000],*p=b,l;x(int i,int d){while(l=s[i++]){if(l==']')return i;if(d){p +=l=='>';p-=l=='<';*p+=l=='+';*p-=l=='-';if(l==',')*p=getchar();l=='.'&&putchar(* p);}if(l=='['){while(d&&*p)x(i,1);i=x(i,0);}}}main(int c,char**v){s=v[1];x(0,1);}
そろそろ次スレの時期か?
だいぶ古いネタだが1行にしろ。 Input: Integer n > 1 if (n has the form ab with b > 1) then output COMPOSITE r := 2 while (r < n) { if (gcd(n,r) is not 1) then output COMPOSITE if (r is prime greater than 2) then { let q be the largest factor of r-1 if (q > 4sqrt(r)log n) and (n(r-1)/q is not 1 (mod r)) then break } r := r+1 } for a = 1 to 2sqrt(r)log n { if ( (x-a)n is not (xn-a) (mod xr-1,n) ) then output COMPOSITE } output PRIME;
さすがに一行は無理でしょう
911 :
デフォルトの名無しさん :03/04/13 12:26
次スレはまだいいでしょう。 あせらずに!
(^^)
∧_∧ ( ^^ )< ぬるぽ(^^)
915 :
JPEG part 1 :03/04/22 23:24
#include <math.h>
typedef unsigned char B;typedef int I;
B z[]={0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,
6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,
39,46,53,60,61,54,47,55,62,63};typedef struct{I c[256],s[256],v[256];}H;
I wi,he,m_wi,m_he,m_h,m_v,cc,sc,ri,ci[3],si[3],s_ac[3],s_dc[3],c_h[3],c_v[3],
c_qt[3],s_h[3],s_v[3],s_qt[3],m_buf[4096],*m_yuv[4],mp[3],qt[3][64],n_qt,bb,br;
double bi[4096];H hf[2][3];FILE *fp;B gb(){return fgetc(fp);}I gw(){return gb()
<<8|gb();}I gi(I b){I c,r;while(br<17){c=gb();if(c==255)gb();bb=(bb<<8)|c;br+=8
;}r=(bb>>(br-b))&((1<<b)-1);br-=b;return r;}sof(){I c,i,v;gw();gb();he=gw();wi=
gw();cc=gb();for(i=0;i<cc;i++){ci[i]=gb();c=gb();v=(c
>>4 )&15;if(m_h<v)m_h=v;c_h
[i]=v;v=c&15;if(m_v<v)m_v=v;c_v[i]=v;c_qt[i]=gb();}}dqt(){I c,i,j,v,s=gw()-2;
while(s>0){s--;j=gb()&7;if(j>n_qt)n_qt=j;for(i=0;i<64;i++){s--;qt[j][i]=gb();}}
}dht(){I s,c,i,j,k,n,l[17];H *t;s=gw()-2;while(s>0){c=gb();t=(H*)&hf[c
>>4 ][c&15
];for(n=0,i=1;i<=16;i++)n+=l[i]=gb();for(k=0,i=1;i<=16;i++)for(j=0;j<l[i];j++)t
->s[k++]=i;for(k=c=0,i=t->s[0];k<n;){while(t->s[k]==i)t->c[k++]=c++;if(k>=n)
break;do{c<<=1;i++;}while(t->s[k]!=i);}for(k=0;k<n;k++)t->v[k]=gb();s-=n+18;}}
sos(){I i=0,c;gw();sc=gb();for(;i<sc;i++){si[i]=gb();c=gb();s_dc[i]=c
>>4 ;s_ac[i
]=c&15;}gw();gb();}I hd(I a,I b){I c,s,k,v;c=s=k=0;H *h=&(hf[a][b]);while(s<16)
{s++;c=(c<<1)|gi(1);while(h->s[k]==s){if(h->c[k]==c)return h->v[k];k++;}}return
-1;}id(I *a,I *b){I i,j;double t[64];for(i=0;i<64;i++)t[i]=0;for(i=0;i<4096;i++
)t[i&63]+=a[i/64]*bi[i];for(i=0;i<64;i++)b[i]=(I)t[i];}I gv(I s){I v=0;if(s){v=
gi(s);if(!(v&(1<<(s-1))))v=v-(1<<s)+1;}return v;}dh(I a,I *b){I s,l,r,v,i=1,*pQ
=(I*)qt[s_qt[a]];s=hd(0,s_dc[a]);if(s<0)return 0;v=gv(s);mp[a]+=v;*b=mp[a]* *pQ
;while(i<64){s=hd(1,s_ac[a]);if(s<=0)break;r=(s
>>4 )&15;while(r--)b[z[i++]]=0;b[
z[i]]=gv(s&15)*pQ[i++];}while(i<64)b[z[i++]]=0;}bl(I*a,I*b,I wd,I x0,I y0,I x1,
I y1){I w=x1-x0,h=y1-y0,x,y,x2,y2;for(y=y0;y<y1;y++)for(x=x0;x<x1;x++){y2=(y-y0
)*8/h;x2=(x-x0)*8/w;b[(y*wd)+x]=a[(y2*8)+x2];}}dm(){I s,v,h,*p,hh,vv,a[64],b[64
];for(s=0;s<sc;s++){hh=s_h[s];vv=s_v[s];for(v=0;v<vv;v++)for(h=0;h<hh;h++){dh(s
,a);id(a,b);p=m_buf+(s<<10);bl(b,p,m_wi,m_wi*h/hh,m_he*v/vv,m_wi*(h+1)/hh,m_he*
(v+1)/vv);}}}dy(I h,I _v,B *r){I x0,y0,i,j,x1,y1,*y,*u,*v,Y,U,V,k;x0=h*m_h*8;y0
=_v*m_v*8;x1=wi-x0;x1=(x1>m_wi)?m_wi:x1;y1=he-y0;y1=(y1>m_wi)?m_wi:y1;y=m_buf;u
=m_buf+1024;v=m_buf+2048;for(j=0;j<y1;j++)for(i=0;i<x1;i++){k=j*m_wi+i;Y=y[k];U
=u[k];V=v[k];h=((y0+j)*wi+(x0+i))*3;_v=Y<<12;k=128+((_v+V*0x166E)
>>12 );r[h]=(k>
255)?255:((k<0)?0:k);k=128+((_v-V*0x0B6C)
>>12 );r[h+1]=(k>255)?255:((k<0)?0:k);k
=128+((_v+U*0x1C59)
>>12 );r[h+2]=(k>255)?255:((k<0)?0:k);}}init(){I c,u,v,m,n;d\
ouble o[8],p[8],q,pi=M_PI;for(u=0;u<8;u++)for(v=0;v<8;v++){for(m=0;m<8;m++)o[m]
=cos(((2.0*m+1.0)*u*pi)/16.0);for(n=0;n<8;n++)p[n]=cos(((2.0*n+1.0)*v*pi)/16.0) ;for(m=0;m<8;m++)for(n=0;n<8;n++){q=0.25;if(u==0)q/=sqrt(2);if(v==0)q/=sqrt(2); bi[(u*8+v)*64+m*8+n]=o[m]*p[n]*q;}}mp[0]=mp[1]=mp[2]=0;n_qt=m_h=m_v=br=bb=0;wh\ ile(1){if(gb()!=0xFF||feof(fp))break;switch(gb()){case 0xD8:break;case 0xD9:re\ turn;case 0xC0:sof();break;case 0xC4:dht();break;case 0xDB:dqt();break;case 0x\ DD:gw();ri=gw();break;case 0xDA:sos();return;default:fseek(fp,gw()-2,SEEK_CUR); break;}}}dec(B *r){I i,j,hu,vu,m_c;for(i=0;i<sc;i++)for(j=0;j<cc;j++)if(si[i]== ci[j]){s_h[i]=c_h[j];s_v[i]=c_v[j];s_qt[i]=c_qt[j];break;}m_wi=m_h*8;m_he=m_v*8 ;for(i=0;i<4096;i++)m_buf[i]=128;for(i=0;i<sc;i++)m_yuv[i]=m_buf+i*4096;hu=wi/ m_wi;vu=he/m_he;hu+=(wi%m_wi)>0;vu+=(he%m_he)>0;m_c=0;for(j=0;j<vu;j++)for(i=0; i<hu;i++){m_c++;dm();dy(i,j,r);if(ri&&m_c>=ri){br-=(br&7)+8;mp[0]=mp[1]=0;mp[2] =m_c=0;}}} で、終わり
あ、使い方説明忘れてた fp = fopen("hoge.jpg","rb");してから init();decode( rgb );で、24bit RGBが出てきます
長いのキター これを7行に・・・出来るわけ無いか(´Д`)
>>919 諦めたらそこで終わりだ。明らめようじゃないか!
変数宣言だけで7行近くあるな…
駄コードでスマン
地道にやればいつかは… 関数 init より double o[8],p[8],q,pi=M_PI;for(u=0;u<8;u++)for(v=0;v<8;v++){for(m=0;m<8;m++)o[m] =cos(((2.0*m+1.0)*u*pi)/16.0);for(n=0;n<8;n++)p[n]=cos(((2.0*n+1.0)*v*pi)/16.0) ;for(m=0;m<8;m++)for(n=0;n<8;n++){q=0.25;if(u==0)q/=sqrt(2);if(v==0)q/=sqrt(2); bi[(u*8+v)*64+m*8+n]=o[m]*p[n]*q;}} ↓ double C(int m,int u){return cos((2*m+1)*u*M_PI/16);} cos の式を関数にして追い出す for(u=0;u<64;u++)for(m=0;m<64;m++) bi[u*64+m]=C(m/8,u/8)*C(m&8,u&8)*((u/8&&u&8)?2:u?sqrt(2):1)/8;
以前どっかで書かれてたが、7行プログラムを多段接続するアプローチはどうか?
925 :
デフォルトの名無しさん :03/04/25 22:21
がんばって〜
ハフマンとか分離したらー
10行くらい減らせた〜、あと10行くらいは行ける。 でも、それでも40行くらいあるぞ〜 ・・・
m_yuv って未使用だね?
君たちさぁ、そうやって外人のパクってばっかりいるから馬鹿にされちゃうんだよ
30行くらいになたよ。25行くらいになったら一度うpしてみるね。
n_qt も未使用だ... m_yuv と n_qt って、使わなくてもいいの?
>>932 m_yuvは、縮める前のライブラリでは使ってました
n_qtは一応用意してるだけだと思った(エラー検出用かも
934 :
デフォルトの名無しさん :03/04/28 00:03
そろそろ歴代ベスト3の7行プログラムを投票汁!
なかなか参考になったり役立つプログラムがあったりして諜報してます。 ありがとう。>ALL
s/諜報/重宝/ デシタ
>>915 を、ppm 形式で出力するようにしました。標準入出力です。
jpeg2ppm.c
char*z=" !(0)\"#*18@92+$%,3:AHPIB;4-&'.5<CJQXYRKD=6/7>ELSZ[TMF?GNU\\]VOW^_",G[1
<<24];int w,e,W,E,l,O,A,D[6],K[6],y=64,M[4096],P[3],qt[3][64],C[9],S[9],B,T,i,j
,c,R[128],J,f,d,F=4096;double bi[4096],t[64],p=1.41421356,q,I=.19634954;struct{
int c[256],s[256],v[256];}*N,h[2][3];extern double cos();g(){return getchar();}
L(){return g()<<8|g();}gi(b){for(;T<17;T+=8)(c=g()&255)-255?0:g(),B=B<<8|c;T-=b
;return(1<<b)-1&B>>T;}H(c,s){N=h[c]+s;for(c=s=i=0;s++<16;)for(c=c*2|gi(1);N->s[
i]==s;i++)if(N->c[i]==c)return N->v[i];return-1;}gv(s,v){return s?v=gi(s),v&1<<
s-1?v:v-(1<<s)+1:0;}n(m,v,n,k){for(v=F;v--;M[v]=128){i=v
>>9 ;j=v/y%8;bi[v]=(q=i?
.25:.25/p,j?q:q/p)*cos((v/8%8*2+1)*i*I)*cos((v%8*2+1)*j*I);}for(;~g();){m=g()-
192;if(m-24){if(m==25)return;v=L();if(!m)for(l=g(w=L(e=L(g(i=0))));i<l;C[6+i++]
=g(E<c?E=c:0)){c=g(D[3+i]=g());W<c
>>4 ?W=c
>>4 :0;C[3+i]=C[i]=c&=15;}else if(m==29
)A=L();else{for(v-=2;m==4&v>0;v-=n+18){c=g();N=h[c
>>4 ]+c%16;for(n=i=0;i<16;)n+=
R[++i]=g();for(k=i=0;++i<17;)for(j=R[i];j--;)N->s[k++]=i;for(j=k=c=0,i=N->s[0];
k<n;){while(N->s[k]==i)N->c[k++]=c++;if(k<n)while(c*=2,N->s[k]!=++i);}for(;j<n;
)N->v[j++]=g();}if(m==26){for(O=g(i=0);i<O;i++)K[3+i]=K[i]=g(D[i]=g());g(L());
return;}for(;v-->0;)for(j=g(i=0)&7;m==27&i<y;qt[j][i++]=g())v--;}}}}main(Q){n()
;for(Q=O;Q--;)for(i=l;i--;)if(D[Q]==D[3+i]){for(c=3;c--;)S[Q+3*c]=C[i+3*c];i=0;
}for(W*=8,E*=8;f<e/E+(e%E>0);f++)for(d=0;d<w/W+(w%W>0);A&&++J>=A?T-=T&7+8,P[0]=
P[1]=P[2]=J=0:0){int c,s=0,h,V,b[64];for(;s<O;s++)for(Q=S[s],V=S[3+s],l=0;l<V;l
++)for(h=0;h<Q;h++){int*pQ=qt[S[6+s]],r,i=1;c=H(0,K[3+s]/16);if(c>=0){memset(R,
0,256);P[s]+=gv(c);for(*R=*pQ*P[s];i<y&&(c=H(1,K[s]&15))>0;R[z[i]-32]=gv(c&15)*
pQ[i],i++)for(r=c/16&15;r--;)R[z[i++]-32]=0;}for(c=F;c--;c<y?t[c]=0:0)b[c%y]=t[
c%y]+=R[c/y]*bi[c];for(j=r=W/Q;j--;)for(i=c=E/V;i--;)M[F/4*s+(j+E*l/V)*W+i+W*h/
Q]=b[j*8/c*8+i*8/r];}Q=d++*W,V=f*E;for(j=e-V>W?W:e-V;j--;)for(i=w-Q>W?W:w-Q;i--
;)for(c=3;c--;G[((V+j)*w+Q+i)*3+c]=s<256?s<0?0:s:255)s=j*W+i,s=128+(M[s]*F+(c-1
?1:-1)*M[s+(c-2?F/2:F/4)]*(c?c-1?7257:2924:5742)
>>12 );}printf("P6 %d %d 255\n",
e,w);for(i=0;i<e*w*3;)putchar(G[i++]);}
lispとかBASICとか、どうなったんだっけ?7行到達ならそれらが一番かな あとはカラースネーク
1:オセロ 2:BASIC 3:マインスイーパー オセロは完成度の他にも、俺を含む幾多の職人をこのスレに呼び寄せた点がでかい。 BASICは純粋に驚いた。 マインスイーパーは、最後の7行化が目から鱗だったからよく覚えている。
絶対無理だろうという雰囲気を見事打ち消してくれる作品が好きだ。 このJPEG変換が7行になったら1位をあげたい。が、今のところ、 1:レンジコーダー(part1の) 2:オセロ 3:SHA1 次点:テトリス
次スレ作るのやめないか……?
個人的に好きなやつ 1:オセロ …… MSX-FANの1画面プログラムを思い出した 2:さいたまベンチ …… ワラタ 3:BrainFuckインタープリタ …… 職人さんありがとう
や め な い か ?
948 :
デフォルトの名無しさん :03/04/29 13:28
1、オセロ 2、BASIC は硬いな。 3、はHuffmanか、RangeCoderか…、テトリスか… 悩む。
オセロは衝撃的だったので1番。 basicもかなりgoodで2番。 3番…huffmanは自分でも出来たから…RangeCoderかな テトリスを入れる余地が無いのが残念だ。
7行スレらしく、歴代ベスト7を決めればいいんだよ。 そうすればテトリスの入る余地だってあるし。
じゃあBEST7行-!(7行達成してなくてもいいよな? 1:オセロ 2:BASIC 3:ハフマン 4:lisp 5:grep 6:テトリス 7:HTTPd 0:part2 581
>>945 と同様、次スレいらないんじゃないかと思うのだが
理由もなく何をのうのうと・・・
七行にこだわることはないと思う。 目安だったけど。
七行にこだわらずして、何が「七行プログラミング」なのだと。
>>955 パート2のラスト、パート3の最初を見るとなぁ
最近のネタ切れも含めて、過去の栄光を…と思った
じゃあ、「七行スレを懐かしむ」スレをたてて
>>959 ワラタ、それいいな
なんなら立てようか?
じゃ、6行スレ立てますね
そのベスト3、もっかい晒せや。漏れがさらに短くしてやっから。
>>962 お題がなければ何もできない厨房ハケーソ
>>962 そのベスト3じゃなくて悪いんだが、これを7行にして く れ な い か ?
#include <stdio.h>
int main (void) { printf ("hell world!\n"); return 0; }
#include <stdio.h> int main (void) { printf ("hell" " " "wo" "rld" "!\n"); return 0; } ...駄目でした...
誰だよ、先走って次スレ作った奴は(w
969 :
デフォルトの名無しさん :03/05/04 08:09
まだ生きてた
埋め立て代わりに。 jpeg2pgm.c でつ。 char*z=" !(0)\"#*18@92+$%,3:AHPIB;4-&'.5<CJQXYRKD=6/7>ELSZ[TMF?GNU\\]VOW^_",G[1 <<24];int*$,w,e,W,E,l,O,A,D[6],K[6],y=64,M[4096],P[3],a[3][64],C[9],S[9],B,T,i, j,c,R[128],J,f,d,F=4096,I=16;double k[4096],t[64],cos();struct{int c[256],s[256 ],v[256];}*N,h[6];g(){return getchar();}L(){return g()<<8|g();}x(b){for(;T<17;T +=8)(c=g()&255)-255?0:g(),B=B<<8|c;T-=b;return(1<<b)-1&B>>T;}H(c,s){N=h+c*3+s; for(c=s=i=0;s++<I;)for(c=c*2|x(1);N->s[i]==s;i++)if(N->c[i]==c)return N->v[i]; return-1;}gv(s,v){return s?v=x(s),v&1<<s-1?v:v-(1<<s)+1:0;}n(m,v,n,k){for(;~g() ;){m=g()-192;if(m-24){if(m==25)return;v=L();if(!m)for(l=g(w=L(e=L(g(i=0))));i<l ;C[6+i++]=g(E<c?E=c:0))c=g(D[3+i]=g()),W<c/I?W=c/I:0,C[3+i]=C[i]=c%=I;else if(m ==29)A=L();else{for(v-=2;m==4&v>0;v-=n+18){c=g(k=n=i=0);for(N=h+c/I*3+c%I;i++<I ;)for(n+=j=g();j--;)N->s[k++]=i;for(i=N->s[j=k=c=0];k<n;){while(N->s[k]==i)N->c [k++]=c++;if(k<n)while(c*=2,N->s[k]!=++i);}for(;j<n;)N->v[j++]=g();}if(m==26){ for(O=g(i=0);i<O;i++)K[3+i]=K[i]=g(D[i]=g());g(L());return;}for(;v-->0;)for(j=g (i=0)&7;m==27&i<y;a[j][i++]=g())v--;}}}}main(Q,h,V,Z,s){for(c=F;c--;M[c]=128)i=
c
>>9 ,j=c/y%8,k[c]=cos(c/8%8*i*.4)*cos(c%8*j*.4)/(i*j?4:i|j?6:8);n();printf("P5"
" %d %d 255\n",w,e);for(Q=O;Q--;)for(i=l;j=i--;)for(c=3;D[Q]==D[2+j]&&c--;i=c)S
[Q+3*c]=C[j-1+3*c];for(W*=8,E*=8;f*E<e;f++)for(d=0;d*W<w;A&&++J>=A?T-=T&7+8,P[0
]=P[1]=P[2]=J=0:0){for(s=0;s<O;s++)for(Q=S[s],V=S[3+s],l=0;l<V;l++)for(h=0;h<Q;
h++){$=a[S[6+s]];Z=H(j=0,K[3+s]/I);if(Z>=0)for(P[s]+=gv(Z),memset(R,0,256),*R=*$
*P[s];++j<y&&(Z=H(1,K[s]%I))>0;R[z[j]-32]=gv(Z%I)*$[j])for(c=Z/I%I;c--;)R[z[j++
]-32]=0;for(Z=64;Z--;t[Z]=0);for(Z=F;Z--;)t[Z%y]+=R[Z/y]*k[Z];for(j=c=W/Q;j--;)
for(i=Z=E/V;i--;)M[F/4*s+(j+E*l/V+h/Q)*W+i]=t[j*8/Z*8+i*8/c];}Q=d++*W,V=f*E;for
(j=e-V>E?E:e-V;j--;)for(i=w-Q>W?W:w-Q;i--;G[V*w+Q+j*w+i]=s<256?s*(s>0):~0)s=j*W
+i,s=128+M[s]+M[s+F/2]*5742/F;}for(i=0;i<e*w;)putchar(G[i++]);}
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
なんとなく移植途中だった
>>504 のさいたまベンチを完成。今更なのでここで。
Mac版AAさいたまベンチ
int rand(),sprintf(char*,const char*,...),x,y,j,i=1<<12;main(){unsigned c=
TickCount();char V[6],*p,m[]=" \ │ / / ̄\ ─( ゚∀゚ )─ \_/ "
" / │ \ ";HideMenuBar();SetPortWindowPort(NewCWindow(0,2100,0,1,2,0,0,0)
);TextMode(0);for(;j++-i;){for(x=0;x<6;V[x++]=rand()) ;for(x=rand()%*(short*)
2106-30,y=rand()%*(short*)2104-40,p=m,RGBBackColor(V);*p;p+=12)MoveTo(x,y+=15)
,DrawText(p,0,12);}i*=j=60;c=TickCount()-c;sprintf(m,"%d.%03d saitama/s",i/c,i
%c*j/c);MoveTo(8,20);DrawText(m,0,strlen(m));while(!Button()) ;return 0;}
CarbonだけどLowMemを使ってるのでOS Xじゃ動かないと思う。
プロトタイプが中途半端なのはご愛嬌。
既に現スレで7行逝ってるのでこちらにひっそりup
/* 多少だがwarning対策したmd5 */
double sin(double),d;unsigned B,C,z,y,X[17],j=64,g,E[68],m,n,o,p;L(int z){X[y/4
]=g=g
>>8 |z<<24;if(++y>63)for(m=*E+=m,n=E[1]+=n,o=E[2]+=o,p=E[3]+=p;y=(g=++j/16)
<4;o=g)m+=X["@AE@"[g]-~(g*5&6)*j&15]+(g?g&2?o^(g&1?n|~p:n^p):n&p|o&~p:n&o|~n&p)
+E[j+4],z="GLQVEINTDKPWFJOU"[g*4|j&3]&31,g=n,n+=m<<z|m>>(32-z),m=p,p=o;return j
=~0;}main(){for(;j;E[j/4]=g=g<<8|34*j^1+j/8*493)d=sin(j--)*(~C+1.),E[j+4]=d<0?-
d:d;for(;z=~getchar();B+=!(C+=8))L(~z);for(L(128);y-56;)L(0);for(X[14]=C,X[15]=
B,L(y=64),L(y=64);++j<16;)printf("%02x",E[j/4]>>j%4*8&255);return!~puts("");}
/* warningを気にせず縮めたmd5 */
double sin(),fabs();unsigned B,C,y,X[16],j=64,g,E[68],m,n,o,p;S(){for(m=*E+=m,n
=E[1]+=n,o=E[2]+=o,p=E[3]+=p;y=(g=++j/16)<4;o=g)m+=X["@AE@"[g]-~(g*5&6)*j&15]+(
g?g&2?o^(g&1?n|~p:n^p):n&p|o&~p:n&o|~n&p)+E[j+4],y="GLQVEINTDKPWFJOU"[g*4|j&3]&
31,g=n,n+=m<<y|m>>32-y,m=p,p=o;j=~0;}L(c){X[y/4]=g=g
>>8 |c<<24;++y>63&&S();}main
(c){for(;j--;E[j/4]=g=g<<8|34*j^1+j/8*493)E[j+4]=fabs(sin(j+1.)*(~C+1.));for(;c
=~getchar();B+=!(C+=8))L(~c);for(L(128);y-56;)L(0);for(X[14]=C,S(S(X[15]=B));++
j<16;)printf("%02x",E[j/4]>>j%4*8&255);puts("");}
このスレまだ生きてる?
>>805 を自分でコピーしてみると、連続する空白が
つながってしまってエラーになってしまうことが判明。
もう一度書き直しました。文字数を変えないようにすれば、
最後の文字列中のコメント部分は何書いてもOK。
class S{public static void main(String[]a){new S();}S(){while(8463!=(c=92*h(i++
)+h(i++))){System.out.print(s.substring(c,c+h(i++)));}}int i=191,c;int h(int i)
{return s.charAt(i)-35;}String s="\\class S{public static void main(String[]a"+
"){new S();}{while(8463!=(c=92*h(i++\n)+h(i++))){System.out.print(s.substring"+
"(c,c+h(i++)));}}int i=191,c;int h(int i){return s.charAt(i)-35;}String s=\"#"+
"$W#S<#qr#p$$dE##$##$#$L%)$#o%%)$#MF##$#B$#qJ%)$#o%%)$$<l##$%)$%*$%)$#o%%)"+
"$%+o%)$#o%%)$%wn%)$#V$#W$~~/*_____________Save_me_as_'S.java'____________*/";}
かつあげ。
>>982 次スレ立ってるんだから、あげるなよ・・・