- 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
- 369 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 19:13:21 ]
- 宣言だけ書いとけば、使ったライブラリを勝手にリンクしてくれる、と解釈。
つまりincludeの省略か。 しかしそんなもん俺に作れるわきゃーない。
- 370 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 19:16:36 ]
- Cの話なら、#includeしなくても直にプロトタイプ宣言すれば済むじゃん?
- 371 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 21:44:22 ]
- (・д・)どのCの話だ?
- 372 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 21:53:15 ]
- #includeディレクティブとリンカがどのライブラリをリンクするかは関係ないでs
- 373 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 22:58:55 ]
- #DEFINE ネタもなしにあげとはずいぶんなおまーんこですね main(){return(0);}
- 374 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 23:02:34 ]
- このスレではreturnに括弧つけるのは許されないだろ、常識的に考えて…
- 375 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 04:16:30 ]
- って言うか生きてたんだなおまいら。
- 376 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 07:42:48 ]
- main関数でreturnしなかった場合、
戻り値は0になると決められているから、 return(0);は書く必要すらない。 -10文字
- 377 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 01:23:37 ]
- どんな処理系だそれは。
% cat test.c #include <stdio.h> main(void){printf("hello, world\n");} % gcc -ansi -pedantic test.c % ./a.exe hello, world % echo $? 13 それとも、言ってるのはこういう意味じゃない?
- 378 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 01:27:49 ]
- >>377
gcc -std=c99 -pedantic test.c
- 379 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 01:35:29 ]
- 99じゃしょうがないな
- 380 名前:デフォルトの名無しさん [2007/05/01(火) 07:42:12 ]
- age
- 381 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 15:53:57 ]
- WinMainって
int WINAPI WinMain(HMODULE,HMODULE,LPSTR,int) これじゃだめなのかな bcc5.5.1とvc8.0では一応通ったんだけど
- 382 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 17:33:41 ]
- HINSTANCEもHMODULEも意味のない構造体へのポインタだから大丈夫だろ。
- 383 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 18:55:53 ]
- 全く問題ない
- 384 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 12:56:16 ]
- 動けばいいってんなら、HWNDでもいいし、void*でもいいだろ。
- 385 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 13:00:03 ]
- 綺麗に書くなんて下の下だな
短く書け。ただし環境依存するな。
- 386 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 13:05:28 ]
- >>385
長いし環境依存だし、しかも纏めようとしてる辺りが気に入らない (´・ω・`) で?
- 387 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 13:08:16 ]
- HWND環境依存じゃないだろ?
今手元にヘッダファイル無いけど…
- 388 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 13:16:48 ]
- 帰り値も 必要ないんじゃないのか?
- 389 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 13:19:25 ]
- main型の返り値に関しては微妙だな
- 390 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 14:20:55 ]
- HWNDとかいう時点で十分に環境依存な気がするんだが、これは言ったらダメか。
- 391 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 15:07:24 ]
- WinMainな時点でWindows前提なんだから議論の余地はないだろうが
- 392 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 15:14:24 ]
- (´・ω・`) で?
- 393 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 16:45:18 ]
- このスレでの環境依存というのはそういう意味ではなくて、
開発環境に依存するコードを書くなって事じゃないかな。 #includeなくても動く環境とか、main関数でreturnがいらない環境とか、 そういう環境もあるけど、それに依存するコードは駄目だよって意味じゃない?
- 394 名前:デフォルトの名無しさん [2007/05/02(水) 17:55:57 ]
- (д)゚ ゚
- 395 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 17:57:14 ]
- 結論を出す必要は無いんだよ。 思ったようにコード書けばいいじゃない。
- 396 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 18:16:13 ]
- 今までこのスレ(過去スレ含)に出てきたコードを見てると
修正を加えないとコンパイルさえ通らないのばかり よってセーフ
- 397 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 18:33:02 ]
- 大事なのは面白い事
- 398 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 20:34:19 ]
- アウトセーフ決めるのは自分だし。
その限界の中でどれだけ短く出来るかが面白い。
- 399 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 22:55:14 ]
- コンパイルが通らないようなのは全然駄目だと思うが、
全然駄目なのを発表するのは自由なんじゃないの? 多くの人に評価されたいなら、コンパイルくらい通して欲しいね
- 400 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 00:05:35 ]
- まぁ試した、というか動く処理系を明記して欲しいわな。
- 401 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 13:58:47 ]
- コメントも7行に入るんですか?
- 402 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 14:46:07 ]
- すみません
あの #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; } これ7行にするとコンパイルできないんですよ どうしたらいいですか?
- 403 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 14:58:40 ]
- その7行にしたほうのコードを見せなきゃわからんだろ
- 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;} もう少し短くなりそうだが
|

|