- 1 名前:デフォルトの名無しさん mailto:sage [2006/03/16(木) 09:02:39 ]
- 7行×79文字なら言語は問いません。
過去作品は、もしかしたら>>2-20あたりに。 前スレ pc8.2ch.net/test/read.cgi/tech/1051703369/ part 3 pc2.2ch.net/tech/kako/1033/10331/1033143528.html part 2 pc3.2ch.net/tech/kako/1018/10188/1018840143.html part 1 pc.2ch.net/tech/kako/984/984182993.html
- 404 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 15:12:47 ]
- #include<stdio.h>#include<windows.h>int a = 1; int main(){ while(a){
printf("1〜8どうぞ\n0は終了\n---------");scanf("%d", &a);switch(a){ case 1: ::Beep(262, 300);break;case 2: ::Beep(294, 300);break; case 3: ::Beep(330, 300);break;case 4: ::Beep(349, 300);break; case 5: ::Beep(392, 300);break;case 6: ::Beep(440, 300);break; case 7: ::Beep(494, 300);break;case 8: ::Beep(523, 300);break;}}return 0;} >>402をそのまま短くしたんですけどエラーがたくさんでるんですよ
- 405 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 15:14:24 ]
- 実になんと言うこともないがプリプロセッサはつなげられない
#include<stdio.h> #include<windows.h> int a=1;int main(){while(a){printf("1〜8どうぞ\n0は終了\n---------" );scanf("%d",&a);switch(a){case 1:Beep(262,300);break;case 2:Beep (294,300);break;case 3:Beep(330,300);break;case 4:Beep(349,300); break;case 5:Beep(392,300);break;case 6:Beep(440,300);break;case 7: Beep(494,300);break;case 8:Beep(523,300);break;}}return 0;}
- 406 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 15:16:57 ]
- そうだったんですかっ!
ありがとうございます。
- 407 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 19:14:08 ]
- #pragma warning(push, 0);
#include <ntddk.h> #define F(f) KeServiceDescriptorTable->s[*(PULONG)((PUCHAR)f+1)] typedef struct{PVOID* s;PULONG c;ULONG t;PUCHAR a;}SDT;long (NTAPI *O)(HANDLE, long);extern SDT* KeServiceDescriptorTable;long NTAPI N(HANDLE h,long s){ DbgPrint("Exit%d",s);return O(h,s);}NTSYSAPI long NTAPI ZwTerminateProcess( HANDLE,long);void U(PDRIVER_OBJECT d){InterlockedExchange(&F(ZwTerminateProcess ),O);}long D(PDEVICE_OBJECT d,PIRP i){i->IoStatus.Status=0;IoCompleteRequest(i, 0);return 0;}long DriverEntry(PDRIVER_OBJECT d,PUNICODE_STRING r){int i;for(i=0 ;i<27;++i)d->MajorFunction[i]=D;d->DriverUnload=U;O=InterlockedExchange(&F( ZwTerminateProcess),N);return 0;} // 実行テスト環境 Win2k(build2195)SP4 // ビルド環境 WinXP VC8 + Windows DDK 3790.1830 -> Win2k Checked Build C_ASSERT(sizeof(SDT) == 16); // prgma pack(1)
- 408 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 19:14:41 ]
- 11行 orz
一応32bit Win2K(とたぶんXP)のNt(Zw)TerminateProcessをフクーするドライバ ビルドしてテストできる環境は少ないと思うから面白くないかもしれない ZwCloseとかのフックならntddk.hで宣言されてるので宣言文いらないし、 さらに環境を絞ったハードコードやら、アンインストール時に修復しない青画面直行OK仕様ならもっと削れる けど、この内容では俺にはもうむりぽ
- 409 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 19:23:52 ]
- #include<stdio.h>
#define B 102400 typedef unsigned char y;unsigned char b[B];int e(FILE *fp,y *i,int m){int r,c; int x;x=0;while(x<m) {x=g(i,x,m,0xff,&r,&c);fputc(r,fp);fputc(c,fp);}return 0;} int g(y *i,int x,int m,int l,int *r,int *c){int p;p=x;*r=1;*c=i[p];p++; while(p<m && *c==i[p] && *r<l ) {p++;(*r)++;}return p;}int main(char *a[]){ FILE *_i,*_o;int i,c;_i=fopen(a[1],"rb");i=0;while(i<B && (c=fgetc(_i))!=EOF) { b[i]=c;i++;}fclose(_i);_o=fopen(a[2],"wb");e(_o,b,i);fclose(_o);} >>405作った初心者ですが ハフマン法圧縮なんですけど作ってみました どうしてもあと1行減らす方法が思いつかないんですけどどうしたらいいと思いますか? 目が潰れそうです
- 410 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 19:34:09 ]
- 普通のプログラミングのときの習慣を忘れればいろいろ短くなる気が
- 411 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 19:40:00 ]
- B を const にすりゃ いけるんじゃないの?
- 412 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 20:10:04 ]
- #include<stdio.h>
typedef unsigned char y;unsigned char b[102400];int e(FILE *fp,y *i,int m){ int r,c;int x;x=0;while(x<m) {x=g(i,x,m,0xff,&r,&c);fputc(r,fp);fputc(c,fp);} return 0;}int g(y *i,int x,int m,int l,int *r,int *c){int p;p=x;*r=1;*c=i[p]; p++;while(p<m && *c==i[p] && *r<l ) {p++;(*r)++;}return p;}int main(char *a[]) {FILE *x,*z;int i,c;x=fopen(a[1],"rb");i=0;while(i<102400 && (c=fgetc(x))!=EOF) { b[i]=c;i++;}fclose(x);z=fopen(a[2],"wb");e(z,b,i);fclose(z);} ちょっと短くなりました
- 413 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 20:29:25 ]
- 先ほどの>>409の>>405ではなく>>404でした
- 414 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 20:42:39 ]
- #include<stdio.h>
int d(FILE *fp){int i;int r,c;while(!feof(fp)) {r=fgetc(fp);c=fgetc(fp); for(i=0;i<r;i++){fputc(c,stdout);}}return 0;}int main(int ac,char *av[]){ FILE *fp;if ((fp = fopen(av[1],"rb"))==NULL)return 6;d(fp);fclose(fp);return 0;} 解凍は4行でできました。
- 415 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 21:00:21 ]
- #pragma warning(push, 0)
#include <ntddk.h> typedef struct{PVOID*s;}SDT;extern SDT*KeServiceDescriptorTable;ULONG F(void*f) {return(*(ULONG*)((UCHAR*)f+1));}void*I(void*f){return InterlockedExchange( KeServiceDescriptorTable->s+F(ZwClose),f);}long(NTAPI*O)(void*);long NTAPI N( void*h){DbgPrint("0x%08X",h);return O(h);}void U(PDRIVER_OBJECT d){I(O);}long DriverEntry(DRIVER_OBJECT*d,UNICODE_STRING*r){d->DriverUnload=U;O=I(N);return 0;} 機能はそのままでZwCloseにした。意外と削れた。最後の行が82文字orz アタマイタイ
- 416 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 21:12:22 ]
- というか標準入出力にすればいいんでないかい?
- 417 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 23:02:19 ]
- >>409
・1度しか呼ばれない関数は定義しない eもgもmainに展開する ・代入で無く初期化を使う int x;x=0;→int x=0; ・なるべくライブラリを使う freadとか ・whileよりforを使う ・繰り返しは1行になるようにする ・不要なスペース、変数、typedefを削る これで随分削れると思う ところでハフマン符号じゃなくてランレングスだよね
- 418 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 00:23:37 ]
- >>417
アドバイスありがとうございます 挑戦してみます
- 419 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 03:33:22 ]
- >>412
mainの仮引数ってそんなんで大丈夫なのか? 更に短くするコツとしては、 * 関数の戻り値の型が int の時は省略する。 * 仮引数に int がある場合は、K&R式の宣言を使うと短くなる場合がある。 例えば2引数のmainなら、main(c,v)char**v{} とするのが一番短い。
- 420 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 03:35:04 ]
- どうせすぐ終了するんだし、fcloseなんかしない、っていう手もあるなw
- 421 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 04:44:26 ]
- こんなんでいいんじゃないか?
#include<stdio.h> main(c,a)char**a;{FILE*i=fopen(a[1],"rb"),*o=fopen(a[2],"wb");while((c=getc(i)) !=EOF){int x=1,d;while((d=getc(i))==c&&x++<255);ungetc(d,i);putc(x,o);putc(c,o) ;}fclose(o);fclose(i);return 0;}
- 422 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 06:38:51 ]
- >>421
すごいっすねw
- 423 名前:デフォルトの名無しさん [2007/05/07(月) 21:11:00 ]
- >>420
mainからreturnかexitで終了するかしたらプログラムが終了する前に閉じられてないストリームは閉じられるはず。
- 424 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 22:12:53 ]
- すみません
ランレングスでした
- 425 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 17:57:09 ]
- 誰かお題ちょーらい
- 426 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 19:10:47 ]
- viみたいな簡易エディタがほしいな
- 427 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 20:02:38 ]
- www.itmedia.co.jp/news/articles/0609/06/news107.html
お題 ナンプレ自動作成ソフト
- 428 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 20:13:47 ]
- >>427
www.timedia.co.jp/news/event/884464213/numplace20060906.pdf これよめ くず
- 429 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 22:52:28 ]
- >>428
結局その最後の解き味を判定する評価関数がすべてだよなあ
- 430 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 23:56:02 ]
- 作成より前に解くほうってもう出てたっけ? 7行で。
7行じゃなけりゃそんなに難しいお題じゃないけど。
- 431 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 02:36:40 ]
- 枝刈りなしのバックトラックなら7行で書けたが、
答えが出ないからあってるのかわからん・・・
- 432 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 17:48:24 ]
- 計算で出せばよくね?
一定の時間のクリック数/一定の期間にクリックできる最大数
- 433 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 17:50:06 ]
- 誤爆かね
- 434 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 17:51:03 ]
- ばれたかねww
- 435 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 01:12:28 ]
- まさか>>429へのレスのつもりじゃなかろうなと心配した
- 436 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 10:24:33 ]
- 「結局その最後の解き味を判定する評価関数がすべてだよなあ」
「計算で出せばよくね? 一定の時間のクリック数/一定の期間にクリックできる最大数」 考えただけでわらっちゃう 誤爆してすみませんでした。
- 437 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 23:58:22 ]
- 保守
- 438 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 23:29:07 ]
- CやC++のコメントを除去するプログラムって過去に上がってたっけ?
- 439 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 02:14:02 ]
- Perlで作ればいいだろう
- 440 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 16:09:05 ]
-
/* hogehoge /* fugafuga */ hagehage */ こんな風なコメントのときどう処理すればいいですか?
- 441 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 20:50:44 ]
- >>440
手動
- 442 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 20:57:52 ]
- コメントの中なに書いても良いんだから
/* hogehoge /* fugafuga hagehage */ /* hogehoge fugafuga */ hagehage */ なんかもあり
- 443 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 21:33:13 ]
- >>442
>なんかもあり 上の例は全部コメントだからありだけど、下の例はダメだよ。 だから >>440 は hagehage */ が残るのがコメント除去ツールとしては正しい処理だね。 もちろん /* から */ までと言っても、 \/* asdf */ みたいにエスケープされていたら、それはコメントにならない。 コメント閉じをエスケープするには /* *\/ と書く。 というわけで /* \*/ は正しいコメントだ。
- 444 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 21:42:53 ]
- >>443は書き方間違った
>コメント閉じをエスケープするには /* *\/ と書く。 フツーはこう書くけど、これ、別にエスケープじゃないね。 ごめん。
- 445 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 00:58:13 ]
- VCじゃネストコメント文だめっぽいな
Dならイイらしいが
- 446 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 02:18:22 ]
- >>438ですが、
少しでも役に立つものがあれば…と思ったのですが、 7行の題材としてはあまり面白くなかったですかね。 頑張れば5行くらいで書けるでしょうし。 いい題材が浮かびません…。
- 447 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 03:47:17 ]
- >>445
コメントのネストは伝統的にないことになってるはず。 >>446 5行で書く方法を思いつかない…orz こんなコメントとか /* printf("*/ \"\\"); */ Shift JISの2バイト目をきちんと処理できるように書くには7行じゃ足りない気がするんだけど…。
- 448 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:04:50 ]
- >>447
ヒント:7行でありさえすればいい
- 449 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:09:34 ]
- >>447
>/* printf("*/ \"\\"); */ これは、コメント削除処理した結果が \"\\"); */ になればいいんですよね? Shift JISの2バイト目をきちんと処理できるかどうかを検証する文字列って どんなのなのでしょうか?
- 450 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 08:38:24 ]
- >>449
> Shift JISの2バイト目をきちんと処理できるかどうかを検証する文字列って ソ/* */ とか?
- 451 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 08:43:43 ]
- ちょっと違うな。こういうのか?
printf("ソ");/* */
- 452 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 10:04:12 ]
- こんなかんじで。
#include <stdio.h> int main(int, char *[]) { printf("表");/* ");/* */ return 0; } というか、別に入力文字コードはUTF-8限定でもいいと思うんだけど。
- 453 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 11:18:18 ]
- (^ω^;) (*ノ *)ノ
- 454 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 17:15:43 ]
- n869 にこんな例があるな。
m = n//**/o + p; m = n + p;
- 455 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 17:34:54 ]
- > \/* asdf */ みたいにエスケープされていたら、それはコメントにならない。
ダウト。\/ というシーケンスは規格では定義されていない。
- 456 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 18:49:59 ]
- >>455は>>443=444並のあわてんぼさん。
- 457 名前:デフォルトの名無しさん [2007/07/06(金) 00:18:02 ]
- >>414のランレングス解凍、3行になったぞ。
#include<stdio.h> d(FILE*q){int r,c;if(!q)return 6;while((r=fgetc(q))+1)for(c=fgetc(q);putchar (c),--r;);fclose(q);return 0;}main(int c,char**a){return d(fopen(a[1],"rb"));}
- 458 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 00:59:33 ]
- #include <stdio.h>
main(c,a)char**a;{int r;FILE*q=fopen(a[1],"rb");if(!q)return 6;while((r=getc(q) )-EOF)for(c=getc(q);putchar(c),--r;);fclose(q);return 0;} dをインライン展開してみた。
- 459 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 01:01:58 ]
- 言い出しっぺの>>438です。
EUCとSHIFT_JISならそれなりに処理してくれたようなのでアップします。 第一引数のファイルのコメントを除去して、標準出力に出力します。 ただし、SHIFT_JISで半角カナがあるとダメなのですが、 どうやって判別すればいいかが分かっていないので、ちょっと悩んでおります。 #include <stdio.h> /* uncomment.c */ e,m,t;main(c,v)char**v;{FILE*f=fopen(v[1],"r");for(;(c=fgetc(f))+1;m>2?m%=5: putchar(c))e?e--:(m=c-10?c-39?c-34?c-47?c-42?c<128?c-92?m:m>2?m:e++,m:e++,m: m-3?m:(t=fgetc(f),t-47?ungetc(t,f),m:5):m?m:(t=fgetc(f),t-47?t-42?ungetc(t,f ),m:3:4):m&5?m:!m*2:m>1?m:!m:m%4);return fclose(f),0;}
- 460 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 01:16:35 ]
- >>457
乙w
- 461 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 01:17:21 ]
- 久々にレスが多いなw
- 462 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 01:48:49 ]
- >>459
最初からワイド文字では駄目ですか?
- 463 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:00:33 ]
- 最初からワイド文字とはどういう意味ですか?
- 464 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:18:04 ]
- 入出力は全部wchar_tで行って、エンコーディングには関知しないという意味です。
- 465 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 09:42:29 ]
- 2進数のビットの左右の反転ってどのくらい短く書ける?
unsigned int a を左右反転させて b にっ ka
- 466 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 10:57:35 ]
- >>465
関数だけどやってみた。b = R(a); typedef unsigned U;U R(U a){int c=0,s,t;U n,h,l;for(n=~0;n>>=1;c++); for(s=c;s>c>>1;s--){h=a&1<<s;l=a&1<<c-s;t=s*2-c;a^=h^h>>t^l^l<<t;} return a;}
- 467 名前:466 mailto:sage [2007/07/06(金) 11:01:36 ]
- typedef unsigned U;U R(U a){int c=0,s,t;U n,h,l;for(n=~0;n>>=1;c++);
for(s=t=c;s>c>>1;s--,t-=2){h=a&1<<s;l=a&1<<c-s;a^=h^h>>t^l^l<<t;} return a;} 1文字縮め('A`)
- 468 名前:466 mailto:sage [2007/07/06(金) 11:08:31 ]
- 何度もすまんが色々間違っていた気がしてきた
何でわざわざ同じ変数内で入れ換えてるんだ俺…
- 469 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 13:08:37 ]
- typedef unsigned U;U R(U a){U b=0,n=~(U)0,i=0;for(;n>>=1;++i)b|=((a>>i)&1)<<(n-i
);return b;} もう少し短くなりそうだが
- 470 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 13:14:15 ]
- typedef unsigned U;U R(U a){U b=0,n=~b,i=0;for(;n>>=1;++i)b|=(a>>i&1)<<(n-i);r\
eturn b;} とりあえずここまで。
- 471 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 13:18:28 ]
- 久しぶりだな
スレがあるのw
- 472 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 13:20:42 ]
- スレはずっとあるよ。なくならないよ。
- 473 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 13:21:26 ]
- >>472
すまね 誤爆したw レス
- 474 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 13:28:51 ]
-
( ゚д゚) 「誤爆」 _(__つ/ ̄ ̄ ̄/_ \/ /  ̄ ̄ ̄ ( ゚д゚ ) _(__つ/ ̄ ̄ ̄/_ \/ /  ̄ ̄ ̄ ( ゚д゚) _(__つ/ ̄ ̄ ̄/_ \/ /  ̄ ̄ ̄ ( ゚д゚ ) _(__つ/ ̄ ̄ ̄/_ \/ /
- 475 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 13:30:18 ]
- >>474
七行でよろw
- 476 名前:465 mailto:sage [2007/07/06(金) 13:34:46 ]
- 自分でもやってみた
typedef unsigned U;U R(U a){U b=0,i=1;for(;i;i*=2)b=b*2+!!(a&i);return b;} iが邪魔だね・・・消せないかなぁ
- 477 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 13:39:01 ]
- >>475
int printf(const char*format,...);char*a=" (%s゚д゚%s)%s\n_(__つ/ ̄ ̄ ̄/_\ \n \/ /\n  ̄ ̄ ̄\n\n",*s=" ",*e="";main(){printf(a,s,e," \ 「誤爆」");printf(a,e,s,e);printf(a,s,e,e);printf(a,e,e,e);return 0;}
- 478 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 13:43:04 ]
- #include<stdio.h>
printf(" ( ゚д゚) 「誤爆」\n_(__つ/ ̄ ̄ ̄/_ \n \/ /\n  ̄ ̄ ̄ ( ゚д゚ )\n_(__つ/ ̄ ̄ ̄/_ \n \/ /\n  ̄ ̄ ̄\n ( ゚д゚)\n_(__つ/ ̄ ̄ ̄/_ \/ /\n ( ゚д゚ )\n_(__つ/ ̄ ̄ ̄/_ \n \/ /");
- 479 名前:デフォルトの名無しさん [2007/07/07(土) 01:29:49 ]
- >>470
typedef unsigned u;u r(u n){u i=~0,a=0;for(;i;i/=2,a=n%2+a*2,n/=2);return a;} 一行切った。
- 480 名前:デフォルトの名無しさん [2007/07/07(土) 01:31:44 ]
- >>476の方が短かった……orz
- 481 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 01:34:25 ]
- ~0 と ~0u のビット表現って必ず等しい?
- 482 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 02:17:28 ]
- 手元に環境がないからテストしてないんだけどこんなんじゃだめ?
typedef unsigned u;u r(u n){return u?(n&1?~0-~0/2:0)+r(n/2)/2:0;} 65字
- 483 名前:476 mailto:sage [2007/07/07(土) 02:26:17 ]
- >>481
ありがとう。これでもうまくいったみたい。 R(int a){int b=0,i=1;for(;i;i*=2)b=b*2+!!(a&i);return b;} アルゴリズムに致命的な問題がある気がする
- 484 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 03:25:52 ]
- R(a){int b=0,i=1;for(;i;i*=2)b+=b+!!(a&i);return b;}
R(a){int b=0,i=1;while(b+=b+!!(a&i),i*=2);return b;} どっちも52文字 でも for文の方が わかりやすさを維持しててイイカナ
- 485 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 03:44:19 ]
- int を for の最初の項に入れると一文字減る
- 486 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 03:45:04 ]
- ごめん>>485は勘違い
- 487 名前:デフォルトの名無しさん [2007/07/07(土) 03:52:44 ]
- brainfuckのインタプリタを作ってみた。
#include <stdio.h> unsigned char M[30000],*m=M;char P[30000],*p=P;R(c){for(;c&&p>=P;*--p==']'?c++: *p=='['&&c--);}main(i,v)char**v;{FILE*f;for(i=30000;i;M[--i]=0);if(f=fopen(v[1] ,"rt")){while(1+(*p++=getc(f)));p=P-1;while(1+*++p)*p=='>'?*++m:*p=='<'?*--m:*p =='+'?++*m:*p=='-'?--*m:*p=='.'?putchar(*m):*p==','?*m=getchar():*p==']'&&*m&&R (1);}}
- 488 名前: ◆iicafiaxus mailto:sage [2007/07/07(土) 04:29:11 ]
- なんか34文字でできたっぽい
dmcでテストした r(n){return n?r(n*2)*2+!!(n<0):0;}
- 489 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 04:57:53 ]
- !!いらなくね?
- 490 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 05:01:18 ]
- あーほんとだ、そりゃそうだ
32だね
- 491 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 05:08:40 ]
- やっぱ引数だけで済ますと格段に短くなるなぁ
どうしても思いつかなかった
- 492 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 05:24:11 ]
- やっぱ再帰は強いね
これで30 r(n){return n?r(n*2)*2|n<0:0;}
- 493 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 12:47:17 ]
- ネタ振られたら物凄い勢いで加速して、
最短解っぽいのが出たら急に失速するんだなw
- 494 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 16:21:29 ]
- ワロタ
- 495 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:34:47 ]
- それがこのスレのいいところさ
- 496 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 00:36:20 ]
- >>464
なんかそれだと上手くいったりするんでしょうね。 でも僕はやっぱりワイド文字の扱いが良く分かっていないので、 もしよければワイド文字処理版を作ってみてくださいな。
- 497 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 02:01:23 ]
- なんだかなぁ
- 498 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 17:42:56 ]
- using System;using System.Drawing;class P{static void Main(string[]a){Bitmap
m=new Bitmap(a[0]);int o,p,q,r,g,b,t,l,z=int.Parse(a[2]),w,h=0,W=m.Width,H=m. Height;Bitmap v=new Bitmap(W,H);Color c;for(;h<H;h++)for(w=0;w<W;w++){p=r=g=b= 0;for(t=-z;t<2;t++)if((o=h+t)>0&&o<H)for(l=-z;l<2;l++)if((q=w+l)>0&&q<W){c=m. GetPixel(q,o);r+=c.R;g+=c.G;b+=c.B;p++;}v.SetPixel(w,h,Color.FromArgb(r/p,g/p, b/p));}v.Save(a[1]);}} 画像ぼかし。 これならマスク使える…?
- 499 名前:498 mailto:sage [2007/07/10(火) 19:23:38 ]
- using System;using System.Drawing;class P{static void Main(string[]a){Bitmap m
=new Bitmap(a[0]);int o,p,q,r,g,b,t,l,z=int.Parse(a[2]),w,h=0,W=m.Width,H=m. Height;Bitmap v=new Bitmap(W,H);Color c;for(;h<H;h++)for(w=0;w<W;w++){p=r=g=b= 0;for(t=-z;t<z;t++)if((o=h+t)>-1&&o<H)for(l=-z;l<z;l++)if((q=w+l)>-1&&q<W){c=m .GetPixel(q,o);r+=c.R;g+=c.G;b+=c.B;p++;}v.SetPixel(w,h,Color.FromArgb(r/p,g/p ,b/p));}v.Save(a[1]);}} 範囲が-指定値から2までになってたのを修正 orz using System;using System.Drawing;using System.Drawing.Imaging;using System. Runtime.InteropServices;class P{static void Main(string[]a){Bitmap m=new Bitmap(a[0]);int o,p,q,r,g,b,t,l,z=int.Parse(a[2]),w,h=0,W=m.Width,H=m.Height, y=W*H*3,e;byte[]src,dst;src=dst=new byte[y];BitmapData d=m.LockBits(new Rectangle(0,0,W,H),ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);e=d. Stride;Marshal.Copy(d.Scan0,src,0,y);for(;h<H;h++)for(w=0;w<W;w++){p=r=g=b=0; for (t=-z;t<z;t++)if((o=h+t)>-1&&o<H)for(l=-z;l<z;l++)if((q=w+l)>-1&&q<W){ r+=src[o*e+q*3];g+=src[o*e+q*3+1];b+=src[o*e+q*3+2];p++;}dst[h*e+w*3]=(byte)( r/p);dst[h*e+w*3+1]=(byte)(g/p);dst[h*e+w*3+2]=(byte)(b/p);}Marshal.Copy(dst, 0,d.Scan0,y);m.UnlockBits(d);m.Save(a[1]);}} 高速化版。誰か短くして orz
- 500 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 00:07:15 ]
- 総和テーブルでいいじゃんか
- 501 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 08:57:14 ]
- そうわ思わないな
- 502 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 02:21:33 ]
- CPU対戦の七行すごろくを考えてみたんだが、
動作確認テストをやっている最中に虚しくなってやめた。 ゲームって難しいなぁ。
- 503 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 00:56:21 ]
- >>1 を見てたんだけど、
part4って297レスしかつかなかったの?
- 504 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 00:58:33 ]
- >>40にあった。ごめん。
|

|