[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 05/09 20:03 / Filesize : 140 KB / Number-of Response : 601
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

七行プログラミング part5



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


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;}

もう少し短くなりそうだが



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 ]
総和テーブルでいいじゃんか






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<140KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef