七行プログラミング p ..
[2ch|▼Menu]
284:デフォルトの名無しさん
07/01/28 02:23:05
cygwinとかbsd系でdsp使える環境
#include <sys/ioctl.h>
#include <fcntl.h>
int main(void){int rfd,dfd;char buf[1024];rfd=open("/dev/random",O_RDONLY);dfd=
open("/dev/dsp",O_WRONLY);while(1){read(rfd,buf,1024);write(dfd,buf,1024);}}

音なるよ

285:デフォルトの名無しさん
07/01/28 02:42:59
それで4行なら7行で方形波生成+メロディ位いけるんじゃないか?

286:デフォルトの名無しさん
07/01/28 02:48:27
>>284
read, write未定義って言われる・・・

287:デフォルトの名無しさん
07/01/28 02:50:37
cygwinいれんのマンドクセ
会社行ったらやってみよ

288:デフォルトの名無しさん
07/01/28 02:51:01
#include <unistd.h>
か、
すげーーーーー音なった!!


289:デフォルトの名無しさん
07/01/28 02:52:09
ちなみに、cygwinです。

290:デフォルトの名無しさん
07/01/28 02:54:11
ちなみにどんな音がなるんだ?

291:デフォルトの名無しさん
07/01/28 02:56:16
いや、ノイズだよ。
ザーって。

292:デフォルトの名無しさん
07/01/28 02:56:56
/dev/random辺りから察して砂嵐だろう

293:デフォルトの名無しさん
07/01/28 02:57:52
ボリュームに気をつけたほうがいい。いつもので行ったら死にそうになった。

294:デフォルトの名無しさん
07/01/28 02:58:00
なんだ
ランダムだからどんなんかな〜と思ったけど、一音そんなに短いのか

295:284
07/01/28 02:58:13
>>288 thx
>>290 /dev/randomから読み取ってdspに直書きしてるだけだから>>291です
単一の音色のソフトシンセくらいなら作れる可能性があるね7行で

296:デフォルトの名無しさん
07/01/28 02:59:21
/dev/dspってすげーな。

> cat /cygdrive/c/WINDOWS/Media/tada.wav > /dev/dsp

普通にwav鳴らせるんだ・・・

297:デフォルトの名無しさん
07/01/28 03:00:55
こんな時間に人が沸いてきた方が驚きなんだけど。仕事中か?

298:デフォルトの名無しさん
07/01/28 03:00:59
ああ、>>ちなみにcygwinのコマンドラインで
cat /dev/random > /dev/dsp
などとしても音なるよ
同じことです

299:デフォルトの名無しさん
07/01/28 03:03:29
>>296
んだんだ
cygwinのdspさんはwaveファイルも使えるんだ

あとioctl()とか使ってサンプリングレートとかチャンネル数とか変えれるから、
ちょっと気張ればネット越しに音鳴らすサウンドサーバが出来る
mixingも自力で頑張ればウハウハ

コード自体はfreebsdでも動くから、bsd機をpxebootで起動させればHDDいらずで(ry


300:デフォルトの名無しさん
07/01/28 03:36:23
#include <windows.h>
int d[]={659,195,2,739,184,2,783,164,4,739,220,2,659,220,2,622,246,4,659,220,2,
739,220,2,493,195,4,554,184,2,622,184,2,659,164,4,587,184,2,523,184,2,493,195,4
,440,220,2,391,220,2,361,246,4,391,220,2,440,220,2,493,195,2,440,195,2,391,246,
2,361,246,2,329,164,2,329,184,2,659,195,2,739,184,2,783,164,4,739,220,2,659,220
,2,622,246,4,659,220,2,739,220,2,493,195,4,554,184,2,622,184,2,659,164,4,587,1\
84,2,523,184,2,493,195,4,440,220,2,391,220,2,369,293,6,391,293,2,391,195,8};vo\
id b(int x,int y, int z){if(y){for(int i=0;i<z/50;++i){Beep(x,25);Beep(y,25);}}
else{Beep(x,z);}Sleep(0);}int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){fo\
r(int i=0;i<sizeof(d);i+=3)b(d[i],d[i+1],d[i+2]*100);return 0;}
ノートが周波数そのままなので、七行超えてしまた。Beep()で音が鳴るPCでどうぞ。
Bio_100%の蟹味噌のインスパイアです。

301:デフォルトの名無しさん
07/01/28 03:53:05
>>300
すげー、ピコピコなってるよ・・・

かに味噌なつかしす( ´ー`)



302:300
07/01/28 04:30:09
#include <windows.h>
int d[]={659,195,2,739,184,2,783,164,4,739,220,2,659,220,2,622,246,4,659,220,2,
739,220,2,493,195,4,554,184,2,622,184,2,659,164,4,587,184,2,523,184,2,493,195,4
,440,220,2,391,220,2,361,246,4,391,220,2,440,220,2,493,195,2,440,195,2,391,246,
2,361,246,2,329,164,2,329,184,2,659,195,2,739,184,2,783,164,4,739,220,2,659,220
,2,622,246,4,659,220,2,739,220,2,493,195,4,554,184,2,622,184,2,659,164,4,587,1\
84,2,523,184,2,493,195,4,440,220,2,391,220,2,369,293,6,391,293,2,391,195,8};vo\
id b(int x,int y, int z){for(int i=0;i<z/50;++i){Beep(x,25);Beep(y,25);}}int W\
INAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){for(int i=0;i<sizeof(d)/sizeof(in\
t);i+=3)b(d[i],d[i+1],d[i+2]*100);return 0;}
酷いバグを直して19バイト削減。曲データ抜きなら4行だから、まぁアリってことにしてくださいm(__)m

303:300
07/01/28 04:53:31
あ、横が80文字になってるし。WinMainのintは省略できるし、b()なんて
関数化する必要ないし。漏れアホス、回線切って首吊ってきます

304:デフォルトの名無しさん
07/01/28 09:21:18
>>300の真似をしてみました。
VC8以外でコンパイルできるかは不明なり。
#include <windows.h>
char a[]="949=>9>>=;9848;>>=969444949=>9>>=;98468946899===;98989;<= ;;;;98643"
"134445454545656767878989:9:;<=>",b[]="94942929999;4;468222246894942929999;46"
"894449991335566116611; 113344 4445454;;;9998886664441111111",c[]="888888822"
"2288444444448448888888222288888422844@4444444444448844444444844@@@@422422422"
"4224224224444";int x[99],i,j=32;main(){float s=110;while(j<99)x[j++]=s*=1.05\
95;for(j=0;a[i];++i,j=0)while(j++<c[i]-48)Beep(x[a[i]],30),Beep(x[b[i]],30);}


305:デフォルトの名無しさん
07/01/28 09:31:50
げ、スペースが一箇所詰まってしまた。

#include <windows.h>
char a[]="949=>9>>=;9848;>>=969444949=>9>>=;98468946899===;98989;<= ;;;;98643"
"134445454545656767878989:9:;<=>",b[]="94942929999;4;468222246894942929999;46"
"894449991335566116611; 113344  4445454;;;9998886664441111111",c[]="888888822"
"2288444444448448888888222288888422844@4444444444448844444444844@@@@422422422"
"4224224224444";int x[99],i,j=32;main(){float s=110;while(j<99)x[j++]=s*=1.05\
95;for(j=0;a[i];++i,j=0)while(j++<c[i]-48)Beep(x[a[i]],30),Beep(x[b[i]],30);}

これでちゃんと鳴る……といいな。


306:デフォルトの名無しさん
07/01/28 09:39:48
>>296
ワロス

知らんかった

307:デフォルトの名無しさん
07/01/28 09:57:20
>>305
鳴ったよー。gcc cygwin で確認

308:279
07/01/28 10:24:12
言った本人が何もしないのもあれなので作ってみたが、
レベル高すぎて投下する気なくす…orz

309:デフォルトの名無しさん
07/01/28 10:38:30
>>305
すげーww
なんかめちゃくちゃなつかしい

310:デフォルトの名無しさん
07/01/28 11:42:10
>>305
bcc5.5だと
1.05\
95;
の部分がエラーになったんだけど、直したら聞けました。つーかすげーこれww

311:デフォルトの名無しさん
07/01/28 12:04:42
#include <unistd.h>
#include <fcntl.h>
char a[]="949=>9>>=;9848;>>=969444949=>9>>=;98468946899===;98989;<= ;;;;98643"
"134445454545656767878989:9:;<=>",b[]="94942929999;4;468222246894942929999;46"
"894449991335566116611; 113344  4445454;;;9998886664441111111",c[]="888888822"
"2288444444448448888888222288888422844@4444444444448844444444844@@@@422422422"
"4224224224444";int x[99],d,i,j=32,k=8000,l=8;m(a,b,s){char r[4096];s*=2;a=k/a
;b=k/b;for(j=s;j--;)r[j]=(!(j%a)+!(j%b))*32;write(d,r,s);}main(){float s=1\
10;while(j<99) x[j++]=s*=1.0595;d=open("/dev/dsp",2);for(i=0;a[i];m(x[a\[i]],\
x[b[i]],30*c[i]-48),++i);}

>>305
がんばったけど、7行に出来ない(orz
とりあえず音はなるけど、和音とかしらんので鳴るだけでいいと思ってる (´・ω・` ス

312:デフォルトの名無しさん
07/01/28 12:12:40
>>311
#include <unistd.h>
#include <fcntl.h>
char a[]="949=>9>>=;9848;>>=969444949=>9>>=;98468946899===;98989;<= ;;;;98643"
"134445454545656767878989:9:;<=>",b[]="94942929999;4;468222246894942929999;46"
"894449991335566116611; 113344  4445454;;;9998886664441111111",c[]="888888822"
"2288444444448448888888222288888422844@4444444444448844444444844@@@@422422422"
"4224224224444";int x[99],d,i,j=32,k=8000,l=8;m(a,b,s){char r[4096];s*=2;a=k/a
;b=k/b;for(j=s;j--;)r[j]=(!(j%a)+!(j%b))*32;write(d,r,s);}main(){float s=110;
while(j<99) x[j++]=s*=1.0595;d=open("/dev/dsp",2);for(i=0;a[i];m(x[a[i]],x[b[\
i]],30*c[i]-48),++i);}

こうだな

313:デフォルトの名無しさん
07/01/28 12:18:47
#include <unistd.h>
#include <fcntl.h>
char a[]="949=>9>>=;9848;>>=969444949=>9>>=;98468946899===;98989;<= ;;;;98643"
"134445454545656767878989:9:;<=>",b[]="94942929999;4;468222246894942929999;46"
"894449991335566116611; 113344  4445454;;;9998886664441111111",c[]="888888822"
"2288444444448448888888222288888422844@4444444444448844444444844@@@@422422422"
"4224224224444";int x[99],d,i,j=32,k=8000,l=8;m(a,b,s){char r[4096];for(j=s;j\
--;)r[j]=(!(j%a)+!(j%b))*32;write(d,r,s);}main(){float s=110;while(j<99) x[j+\
+]=k/(s*=1.0595);d=open("/dev/dsp",2);for(i=0;a[i];m(x[a[i]],x[b[i]],60*c[i]-
96),++i);}

>>312もうちょっと
後はデータをファイルに持たせるとか…か

314:デフォルトの名無しさん
07/01/28 12:21:34
>>311-313
dsp1.cpp:7: error: expected constructor, destructor, or type conversion before '(' token
dsp1.cpp:7: error: expected `,' or `;' before '(' token
dsp1.cpp: In function `int main()':
dsp1.cpp:7: warning: converting to `int' from `float'
dsp1.cpp:10: error: `m' undeclared (first use this function)
dsp1.cpp:10: error: (Each undeclared identifier is reported only once for each function it appears in.)
dsp1.cpp:10:11: warning: no newline at end of file

って、出る('A`)

315:デフォルトの名無しさん
07/01/28 12:25:41
m(a,b,s){
多分、この書き方なんですけど、これってCでいいんですか?

316:デフォルトの名無しさん
07/01/28 12:31:09
>>284に戻るけど…

using System;using System.IO;class Program{static void Main(string[]args){try{
int i=int.Parse(args[1]);byte[]h=new byte[]{82,73,70,70,36,0,(byte)i,0,87,65, 
86,69,102,109,116,32,16,0,0,0,1,0,1,0,68,172,0,0,68,172,0,0,1,0,8,0,100,97,116
,97,0,0,(byte)i,0};using(FileStream f=new FileStream(args[0],FileMode.Create))
{f.Write(h,0,44);h=new byte[i*65536];Random r=new Random(DateTime.Now.Second);
r.NextBytes(h);f.Write(h,0,i*65536);}}catch{Console.Write("Error");}}}

使い方:
hoge.exe savepath length
長さは(0〜255)*65536Bでつ。

317:デフォルトの名無しさん
07/01/28 12:56:06
>>302
require"base64";require'zlib';require"Win32API";$o=Win32API.new("kernel32","B\
eep",%w(i i),'v');def b(x,y,z)(0...z/50).map{$o.call x,25;$o.call y,25}end;b=
"eJybzHSYgYnhMdMOIMnPvISBBci+A2RPBpN5TN+AIhA2RPwt42GgiBZYfR6Y\nnMwE0uUNZnODSY\
iaHYwg9e1gMpMRZA6EDREHqQGxD4PVfIOqYWLwZFwCJiEm\n08NthYyqjGxAtiojSOQwAwcDAE8gP\
SA=\n";d=Zlib::Inflate.inflate(Base64.decode64(b)).unpack("S*");(0...d.size/3
).map{|i|i*=3;b d[i],d[i+1],d[i+2]*100}

ワーイ。rubyで、6行できたよー。

318:デフォルトの名無しさん
07/01/28 13:14:40
>>314
C++じゃなくてCで

>>315
暗黙に int とみなされる

319:デフォルトの名無しさん
07/01/28 13:38:54
>>318
なったよw

320:デフォルトの名無しさん
07/01/28 13:41:13
>>313
データをファイルに持たせるのはルール違反

321:デフォルトの名無しさん
07/01/28 13:54:52
beep ついてねーよヽ(`Д´)ノウワァァン
ということで cygwin 専用 beep エミュ。
音程が合わない時は BASE_FREQを適当に調整してください。

#include <windows.h>
#include <stdio.h>
#define BASE_FREQ8000
WINAPI BOOL Beep(DWORD freq, DWORD time){int t,tf,dt;static FILE *fp=0;if(!fp)
fp=fopen("/dev/dsp","wb");if(!freq||freq>BASE_FREQ/2)tf=0x7fffffff;else tf=
BASE_FREQ/2/freq;for(t=0;t<time*BASE_FREQ/1000;t++){dt=((t/tf))%2?127:0;fwrite
(&dt,1,1,fp);}fflush(fp);return TRUE;}

322:321
07/01/28 14:31:09
無駄が多すぎた。
#include <windows.h>
#include <stdio.h>
FILE *p;WINAPI BOOL Beep(DWORD f, DWORD m){int B=4000,t=0,g,d;p=p?p:fopen("/de"
"v/dsp","wb");g=!f||f>B?(1<<31)-1:B/f;for(;t<m*B/500;t++){d=t/g%2?127:0;fwrite(
&d,1,1,p);}fflush(p);return TRUE;}

323:デフォルトの名無しさん
07/01/28 16:23:05
Cの&& ||ってショートサーキット評価だっけ?

324:デフォルトの名無しさん
07/01/28 16:26:07
そうだぜ

325:デフォルトの名無しさん
07/01/28 16:32:51
thx
もう少し縮められそうだ

326:305
07/01/28 16:54:21
おー、なんか皆がんばっとる!('ω`*)
徹夜して作った甲斐がありました!

327:デフォルトの名無しさん
07/01/28 17:24:11
標準入力からMMLを読んでビープで再生する
A-G: 音符; R: 休符 (数値を後置して長さ, ドットを後置して付点)
Tn: Tempo; Ln: Length
On: Octave (n=0-7); >: Octave+; <: Octave-

#include <stdio.h>
#include <windows.h>
int r,c,d,n,j,a,o=4,l=4,t=120,f[84],g[]={0,2,3,5,7,8,10};w(a){ungetc(a,stdin);
}y(){return getchar();}float s=27.5;q(int*p){for(r=0;'0'<=(d=y())&&d<='9';)r=r
*10+d-'0';w(d);r?*p=r:0;}main(){for(;j<84;j++,s*=1.0595)f[j]=s;while((c=y())!=
EOF)c+=c<'a'||'z'<c?0:'A'-'a','A'<=c&&c<'H'||c=='R'?c-'R'?a=g[c-'A']+12*o,(d=y
())=='+'||d=='#'?a+=a!=83:d=='-'?a-=!!a:w(d):0,n=l,q(&n),j=120000*((d=y())-'.'
?w(d),2:3)/t/n,c-'R'?Beep(f[a],j):Sleep(j):c=='L'?q(&l):c=='O'?q(&o),o=o>7?7:o
:c=='T'?q(&t):c=='>'?o+=o!=7:c=='<'?o-=!!o:0;}//9行47桁

俺の力ではこれ以上短くできない…orz

328:デフォルトの名無しさん
07/01/28 17:35:05
あら。一行78文字になってた

#include <stdio.h>
#include <windows.h>
int r,c,d,n,j,a,o=4,l=4,t=120,f[84],g[]={0,2,3,5,7,8,10};w(a){ungetc(a,stdin);}
y(){return getchar();}float s=27.5;q(int*p){for(r=0;'0'<=(d=y())&&d<='9';)r=r*\
10+d-'0';w(d);r?*p=r:0;}main(){for(;j<84;j++,s*=1.0595)f[j]=s;while((c=y())!=E\
OF)c+=c<'a'||'z'<c?0:'A'-'a','A'<=c&&c<'H'||c=='R'?c-'R'?a=g[c-'A']+12*o,(d=y()
)=='+'||d=='#'?a+=a!=83:d=='-'?a-=!!a:w(d):0,n=l,q(&n),j=120000*((d=y())-'.'?w(
d),2:3)/t/n,c-'R'?Beep(f[a],j):Sleep(j):c=='L'?q(&l):c=='O'?q(&o),o=o>7?7:o:c==
'T'?q(&t):c=='>'?o+=o!=7:c=='<'?o-=!!o:0;}

329:デフォルトの名無しさん
07/01/28 17:56:04
ソース解読するための
整形ツールって無いですか?

330:デフォルトの名無しさん
07/01/28 17:56:22
時代が20年くらい巻き戻ったな、このスレ

331:デフォルトの名無しさん
07/01/28 17:56:33
GNU Indentは?

332:デフォルトの名無しさん
07/01/28 18:31:01
>>331
いけました。サンクス

333:デフォルトの名無しさん
07/01/28 21:03:16
>>329
過去スレに7行のもあった希ガス

334:デフォルトの名無しさん
07/01/28 22:42:27
'A' とかは数字の即値で書いたほうが短そう

335:デフォルトの名無しさん
07/01/28 22:48:24
>>284
BSD系って君が言ったから

OSXは、/dev/dspねぇ。。

336:デフォルトの名無しさん
07/01/28 22:50:04
>>334
上でも出てるがそりゃ邪道だ

337:デフォルトの名無しさん
07/01/28 23:04:34
>>335
多分あるよ。
FreeBSD5のカーネル付近から/dev/以下は自動的に作られるから。
ls -l /dev/dsp ってやってみて

それでもnot foundならkldload snd_driverでカーネルにサウンドドライバロードさせてみて
で、 ls -l /dev/dsp

338:デフォルトの名無しさん
07/01/28 23:19:02
>>336
そんなん言ったら数字とか英字の判断は、
C的にはisdigitとかisalphaを使うべきとこだよ。
>'0'<=(d=y())&&d<='9';
isdigit(d=y());
こっちのほうが圧倒的に短いし。


339:デフォルトの名無しさん
07/01/28 23:23:16
#includeディレクティブが一行食うから
よほど文字種判別ばかりやってるコード
じゃないと短くはならんでしょ

340:デフォルトの名無しさん
07/01/28 23:30:01
>>338
テレックスで用いられるようなアルファベットが連続していない文字コードを考慮すると
'A'<=c&&c<'H'||c=='R'

'A'==c||'B'==c||'C'==c||'D'==c||'E'==c||'F'==c||'G'==c||'R'==c
ないし
!('A'-c||'B'-c||'C'-c||'D'-c||'E'-c||'F'-c||'G'-c||'R'-c)
と書かないといけないのか。
流石にこのスレ的にはつらいな

341:デフォルトの名無しさん
07/01/28 23:31:26
!('A'-c&&'B'-c&&'C'-c&&'D'-c&&'E'-c&&'F'-c&&'G'-c&&'R'-c) だた

342:デフォルトの名無しさん
07/01/28 23:58:46
>>339
うちの環境だと #include<stdio.h> すれば問題なかった……っていうと、
これも邪道かなー。正しくは #include<ctype.h> だし。
どのみち環境に対して何の仮定もおかないで書くのはつらい。
mainでreturnしないのも本来問題あるわけだし。
まー、最終的には個人の裁量だから、この話題はヤメにしよう。宗教論争になりそうだ。

343:デフォルトの名無しさん
07/01/29 00:15:11
print"第一数字(半角数字で入力してください):";i=gets.to_i;print"第二数字(半角数\
字で入力してください):";j=gets.to_i;puts"\n足し算:%g + %g = %g"%[i,j,i+j],"引\
き算:%g - %g = %g"%[i,j,i-j],"掛け算:%g * %g = %g"%[i,j,i*j],"べき算:%g の %g\
乗 = %g"%[i,j,i**j]

ワーイ、rubyで4行、け言語できたよー。

344:デフォルトの名無しさん
07/01/29 03:05:51
>>343
毛言語とはまた怪訝な言語じゃの

345:デフォルトの名無しさん
07/01/29 13:22:28
めそ

346:デフォルトの名無しさん
07/01/29 13:39:59
モキュ

347:デフォルトの名無しさん
07/01/30 08:57:38
和音に挑戦しようと思ったんじゃが
乗り遅れたか


348:デフォルトの名無しさん
07/01/30 11:13:16
キー押して音鳴らすようなの作れそうじゃね?

349:デフォルトの名無しさん
07/01/30 22:38:47
今更ながら>>305に感動

350:305
07/02/01 01:13:43
本体部分を50バイト削減ー。
でもデータ作成に挫折った。キリのいいところまで入らない。

#include <windows.h>
char a[]=" 747:7:@:@C@AC@ACCCCCC<7<7HFHLOMLJLMLHJCJCJLMOQOMLMOTOMHHLMOOHJLMOQ"
"QTSQOOOOONMMMLLLJHGEGEC",b[]=" 747747:7:@:>@:>@>7542<7<7<<77<77>>>77>7>>77>>"
">77<<<777<7<<7:77755<<<55789:;<=>?@ABCCC>>>7",c[]="1822822822222222<<6666666"
"62442642222426624422224222222266426622242642422222222222222222228";float f(i)
{return i?f(i-1)*1.0595:55;}main(i,t){for(i=t=0;c[i]&&(t--||(t=c[++i]-*c));Be\
ep(f(b[i]-*b),40))Beep(f(a[i]-*a),40);}


351:デフォルトの名無しさん
07/02/01 01:18:38
(t--||(t=c[++i]-*c)って鼻から悪魔出ないか?

352:デフォルトの名無しさん
07/02/01 01:23:55
||は副作用ぶった切るから大丈夫だよ

353:デフォルトの名無しさん
07/02/01 01:29:56
f()を数えてなかった……。訂正、10バイト削減。

354:デフォルトの名無しさん
07/02/01 01:30:37
>>351
--が前置演算子だと動かないね。

355:デフォルトの名無しさん
07/02/01 01:50:03
本当に20年前に戻った気がするな・・・

356:デフォルトの名無しさん
07/02/01 03:11:00
>>351
鼻から悪魔が出る って表現気に入った

357:デフォルトの名無しさん
07/02/01 10:56:16
>>356
常套句。鼻から悪魔で検索してみろ

358:デフォルトの名無しさん
07/02/01 11:48:49
なるほど。生まれる前から言われてた言葉だったのか。
勉強になるなぁ。

359:デフォルトの名無しさん
07/02/01 12:03:57
351は鼻から悪魔が出るんじゃないかな。

360:デフォルトの名無しさん
07/02/01 18:29:14
出ないでない

361:デフォルトの名無しさん
07/02/01 18:30:34
351なら出ても仕様違反ではないけどな

362:デフォルトの名無しさん
07/02/01 18:45:17
どこが悪いの?

363:デフォルトの名無しさん
07/02/01 18:52:07
>>361
> c[i]&&(t--||(t=c[++i]-*c))
||はsequence pointだからt--とt=c[++i]-*cはこの順に値の変更が行われることが保証されてる

364:305
07/02/01 23:42:07
副作用完了点とか意識してなかったわ('д`)

365:デフォルトの名無しさん
07/03/04 18:06:55
int puts(const char*);int main(void){return puts("age")<0;}

366:デフォルトの名無しさん
07/03/04 18:12:19
かなりの趣味スレですね

367:デフォルトの名無しさん
07/03/04 18:19:55
ageるからには何かネタないの?

368:デフォルトの名無しさん
07/03/04 18:24:12
>>365
ネタもなしにあげとはずいぶんなおまーんこですね
↑この一文を解釈して動くプログラミング言語を作ってくれ

369:デフォルトの名無しさん
07/03/04 19:13:21
宣言だけ書いとけば、使ったライブラリを勝手にリンクしてくれる、と解釈。
つまりincludeの省略か。
しかしそんなもん俺に作れるわきゃーない。

370:デフォルトの名無しさん
07/03/04 19:16:36
Cの話なら、#includeしなくても直にプロトタイプ宣言すれば済むじゃん?

371:デフォルトの名無しさん
07/03/04 21:44:22
(・д・)どのCの話だ?

372:デフォルトの名無しさん
07/03/04 21:53:15
#includeディレクティブとリンカがどのライブラリをリンクするかは関係ないでs

373:デフォルトの名無しさん
07/03/04 22:58:55
#DEFINE ネタもなしにあげとはずいぶんなおまーんこですね main(){return(0);}

374:デフォルトの名無しさん
07/03/04 23:02:34
このスレではreturnに括弧つけるのは許されないだろ、常識的に考えて…

375:デフォルトの名無しさん
07/03/05 04:16:30
って言うか生きてたんだなおまいら。

376:デフォルトの名無しさん
07/03/05 07:42:48
main関数でreturnしなかった場合、
戻り値は0になると決められているから、
return(0);は書く必要すらない。
-10文字

377:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/03/06 01:27:49
>>377
gcc -std=c99 -pedantic test.c

379:デフォルトの名無しさん
07/03/06 01:35:29
99じゃしょうがないな


380:デフォルトの名無しさん
07/05/01 07:42:12
age

381:デフォルトの名無しさん
07/05/01 15:53:57
WinMainって
int WINAPI WinMain(HMODULE,HMODULE,LPSTR,int)
これじゃだめなのかな
bcc5.5.1とvc8.0では一応通ったんだけど

382:デフォルトの名無しさん
07/05/01 17:33:41
HINSTANCEもHMODULEも意味のない構造体へのポインタだから大丈夫だろ。

383:デフォルトの名無しさん
07/05/01 18:55:53
全く問題ない

384:デフォルトの名無しさん
07/05/02 12:56:16
動けばいいってんなら、HWNDでもいいし、void*でもいいだろ。

385:デフォルトの名無しさん
07/05/02 13:00:03
綺麗に書くなんて下の下だな
短く書け。ただし環境依存するな。

386:デフォルトの名無しさん
07/05/02 13:05:28
>>385
長いし環境依存だし、しかも纏めようとしてる辺りが気に入らない
(´・ω・`) で?

387:デフォルトの名無しさん
07/05/02 13:08:16
HWND環境依存じゃないだろ?
今手元にヘッダファイル無いけど…

388:デフォルトの名無しさん
07/05/02 13:16:48
帰り値も 必要ないんじゃないのか?

389:デフォルトの名無しさん
07/05/02 13:19:25
main型の返り値に関しては微妙だな

390:デフォルトの名無しさん
07/05/02 14:20:55
HWNDとかいう時点で十分に環境依存な気がするんだが、これは言ったらダメか。

391:デフォルトの名無しさん
07/05/02 15:07:24
WinMainな時点でWindows前提なんだから議論の余地はないだろうが

392:デフォルトの名無しさん
07/05/02 15:14:24
(´・ω・`) で?

393:デフォルトの名無しさん
07/05/02 16:45:18
このスレでの環境依存というのはそういう意味ではなくて、
開発環境に依存するコードを書くなって事じゃないかな。
#includeなくても動く環境とか、main関数でreturnがいらない環境とか、
そういう環境もあるけど、それに依存するコードは駄目だよって意味じゃない?

394:デフォルトの名無しさん
07/05/02 17:55:57
(д)゚ ゚

395:デフォルトの名無しさん
07/05/02 17:57:14
結論を出す必要は無いんだよ。 思ったようにコード書けばいいじゃない。


396:デフォルトの名無しさん
07/05/02 18:16:13
今までこのスレ(過去スレ含)に出てきたコードを見てると
修正を加えないとコンパイルさえ通らないのばかり
よってセーフ

397:デフォルトの名無しさん
07/05/02 18:33:02
大事なのは面白い事

398:デフォルトの名無しさん
07/05/02 20:34:19
アウトセーフ決めるのは自分だし。
その限界の中でどれだけ短く出来るかが面白い。

399:デフォルトの名無しさん
07/05/02 22:55:14
コンパイルが通らないようなのは全然駄目だと思うが、
全然駄目なのを発表するのは自由なんじゃないの?

多くの人に評価されたいなら、コンパイルくらい通して欲しいね

400:デフォルトの名無しさん
07/05/03 00:05:35
まぁ試した、というか動く処理系を明記して欲しいわな。

401:デフォルトの名無しさん
07/05/06 13:58:47
コメントも7行に入るんですか?

402:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/06 14:58:40
その7行にしたほうのコードを見せなきゃわからんだろ

404:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/06 15:16:57
そうだったんですかっ!

ありがとうございます。

407:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/06 19:14:41
11行 orz


一応32bit Win2K(とたぶんXP)のNt(Zw)TerminateProcessをフクーするドライバ
ビルドしてテストできる環境は少ないと思うから面白くないかもしれない
ZwCloseとかのフックならntddk.hで宣言されてるので宣言文いらないし、
さらに環境を絞ったハードコードやら、アンインストール時に修復しない青画面直行OK仕様ならもっと削れる

けど、この内容では俺にはもうむりぽ

409:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/06 19:34:09
普通のプログラミングのときの習慣を忘れればいろいろ短くなる気が

411:デフォルトの名無しさん
07/05/06 19:40:00
B を const にすりゃ いけるんじゃないの?

412:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/06 20:29:25
先ほどの>>409>>405ではなく>>404でした

414:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/06 21:12:22
というか標準入出力にすればいいんでないかい?

417:デフォルトの名無しさん
07/05/06 23:02:19
>>409
・1度しか呼ばれない関数は定義しない
 eもgもmainに展開する
・代入で無く初期化を使う
 int x;x=0;→int x=0;
・なるべくライブラリを使う
 freadとか
・whileよりforを使う
・繰り返しは1行になるようにする
・不要なスペース、変数、typedefを削る

これで随分削れると思う
ところでハフマン符号じゃなくてランレングスだよね

418:デフォルトの名無しさん
07/05/07 00:23:37
>>417
アドバイスありがとうございます
挑戦してみます

419:デフォルトの名無しさん
07/05/07 03:33:22
>>412
mainの仮引数ってそんなんで大丈夫なのか?

更に短くするコツとしては、
* 関数の戻り値の型が int の時は省略する。
* 仮引数に int がある場合は、K&R式の宣言を使うと短くなる場合がある。
例えば2引数のmainなら、main(c,v)char**v{} とするのが一番短い。

420:デフォルトの名無しさん
07/05/07 03:35:04
どうせすぐ終了するんだし、fcloseなんかしない、っていう手もあるなw

421:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/07 06:38:51
>>421
すごいっすねw

423:デフォルトの名無しさん
07/05/07 21:11:00
>>420
mainからreturnかexitで終了するかしたらプログラムが終了する前に閉じられてないストリームは閉じられるはず。

424:デフォルトの名無しさん
07/05/07 22:12:53
すみません
ランレングスでした

425:デフォルトの名無しさん
07/05/08 17:57:09
誰かお題ちょーらい

426:デフォルトの名無しさん
07/05/08 19:10:47
viみたいな簡易エディタがほしいな

427:デフォルトの名無しさん
07/05/08 20:02:38
URLリンク(www.itmedia.co.jp)
お題
ナンプレ自動作成ソフト

428:デフォルトの名無しさん
07/05/08 20:13:47
>>427
URLリンク(www.timedia.co.jp)
これよめ
くず

429:デフォルトの名無しさん
07/05/08 22:52:28
>>428
結局その最後の解き味を判定する評価関数がすべてだよなあ

430:デフォルトの名無しさん
07/05/08 23:56:02
作成より前に解くほうってもう出てたっけ? 7行で。
7行じゃなけりゃそんなに難しいお題じゃないけど。

431:デフォルトの名無しさん
07/05/09 02:36:40
枝刈りなしのバックトラックなら7行で書けたが、
答えが出ないからあってるのかわからん・・・

432:デフォルトの名無しさん
07/05/12 17:48:24
計算で出せばよくね?

一定の時間のクリック数/一定の期間にクリックできる最大数

433:デフォルトの名無しさん
07/05/12 17:50:06
誤爆かね

434:デフォルトの名無しさん
07/05/12 17:51:03
ばれたかねww

435:デフォルトの名無しさん
07/05/13 01:12:28
まさか>>429へのレスのつもりじゃなかろうなと心配した

436:デフォルトの名無しさん
07/05/13 10:24:33
「結局その最後の解き味を判定する評価関数がすべてだよなあ」


「計算で出せばよくね?
一定の時間のクリック数/一定の期間にクリックできる最大数」


考えただけでわらっちゃう

誤爆してすみませんでした。

437:デフォルトの名無しさん
07/05/30 23:58:22
保守

438:デフォルトの名無しさん
07/06/25 23:29:07
CやC++のコメントを除去するプログラムって過去に上がってたっけ?


439:デフォルトの名無しさん
07/06/27 02:14:02
Perlで作ればいいだろう

440:デフォルトの名無しさん
07/06/27 16:09:05

/* hogehoge /* fugafuga */ hagehage */

こんな風なコメントのときどう処理すればいいですか?


441:デフォルトの名無しさん
07/06/27 20:50:44
>>440
手動

442:デフォルトの名無しさん
07/06/27 20:57:52
コメントの中なに書いても良いんだから

/* hogehoge /* fugafuga hagehage */

/* hogehoge fugafuga */ hagehage */

なんかもあり


443:デフォルトの名無しさん
07/06/27 21:33:13
>>442
>なんかもあり

上の例は全部コメントだからありだけど、下の例はダメだよ。

だから >>440
hagehage */
が残るのがコメント除去ツールとしては正しい処理だね。

もちろん /* から */ までと言っても、
\/* asdf */ みたいにエスケープされていたら、それはコメントにならない。

コメント閉じをエスケープするには /* *\/ と書く。

というわけで /* \*/ は正しいコメントだ。


444:デフォルトの名無しさん
07/06/27 21:42:53
>>443は書き方間違った
>コメント閉じをエスケープするには /* *\/ と書く。
フツーはこう書くけど、これ、別にエスケープじゃないね。
ごめん。

445:デフォルトの名無しさん
07/07/04 00:58:13
VCじゃネストコメント文だめっぽいな
Dならイイらしいが

446:デフォルトの名無しさん
07/07/04 02:18:22
>>438ですが、
少しでも役に立つものがあれば…と思ったのですが、
7行の題材としてはあまり面白くなかったですかね。
頑張れば5行くらいで書けるでしょうし。

いい題材が浮かびません…。


447:デフォルトの名無しさん
07/07/04 03:47:17
>>445
コメントのネストは伝統的にないことになってるはず。
>>446
5行で書く方法を思いつかない…orz

こんなコメントとか
/* printf("*/ \"\\"); */
Shift JISの2バイト目をきちんと処理できるように書くには7行じゃ足りない気がするんだけど…。



448:デフォルトの名無しさん
07/07/04 23:04:50
>>447
ヒント:7行でありさえすればいい

449:デフォルトの名無しさん
07/07/05 00:09:34
>>447
>/* printf("*/ \"\\"); */
これは、コメント削除処理した結果が
\"\\"); */
になればいいんですよね?

Shift JISの2バイト目をきちんと処理できるかどうかを検証する文字列って
どんなのなのでしょうか?


450:デフォルトの名無しさん
07/07/05 08:38:24
>>449
> Shift JISの2バイト目をきちんと処理できるかどうかを検証する文字列って
ソ/* */
とか?

451:デフォルトの名無しさん
07/07/05 08:43:43
ちょっと違うな。こういうのか?
printf("ソ");/* */

452:デフォルトの名無しさん
07/07/05 10:04:12
こんなかんじで。
#include <stdio.h>
int main(int, char *[]) {
  printf("表");/* ");/* */
  return 0;
}

というか、別に入力文字コードはUTF-8限定でもいいと思うんだけど。

453:デフォルトの名無しさん
07/07/05 11:18:18
(^ω^;) (*ノ *)ノ

454:デフォルトの名無しさん
07/07/05 17:15:43
n869 にこんな例があるな。

m = n//**/o
+ p;

m = n + p;


455:デフォルトの名無しさん
07/07/05 17:34:54
> \/* asdf */ みたいにエスケープされていたら、それはコメントにならない。

ダウト。\/ というシーケンスは規格では定義されていない。

456:デフォルトの名無しさん
07/07/05 18:49:59
>>455>>443=444並のあわてんぼさん。

457:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/06 01:16:35
>>457
乙w

461:デフォルトの名無しさん
07/07/06 01:17:21
久々にレスが多いなw

462:デフォルトの名無しさん
07/07/06 01:48:49
>>459
最初からワイド文字では駄目ですか?

463:デフォルトの名無しさん
07/07/06 02:00:33
最初からワイド文字とはどういう意味ですか?


464:デフォルトの名無しさん
07/07/06 02:18:04
入出力は全部wchar_tで行って、エンコーディングには関知しないという意味です。

465:デフォルトの名無しさん
07/07/06 09:42:29
2進数のビットの左右の反転ってどのくらい短く書ける?
unsigned int a を左右反転させて b にっ ka

466:デフォルトの名無しさん
07/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
07/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
07/07/06 11:08:31
何度もすまんが色々間違っていた気がしてきた
何でわざわざ同じ変数内で入れ換えてるんだ俺…

469:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/06 13:18:28
久しぶりだな
スレがあるのw

472:デフォルトの名無しさん
07/07/06 13:20:42
スレはずっとあるよ。なくならないよ。

473:デフォルトの名無しさん
07/07/06 13:21:26
>>472
すまね
誤爆したw

レス

474:デフォルトの名無しさん
07/07/06 13:28:51

  ( ゚д゚)      「誤爆」
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄
 
  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄

  ( ゚д゚)
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄

  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_ 
  \/    /

475:デフォルトの名無しさん
07/07/06 13:30:18
>>474
七行でよろw

476:465
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/06 13:43:04
#include<stdio.h>
printf("  ( ゚д゚)      「誤爆」\n_(__つ/ ̄ ̄ ̄/_ \n  \/    /\n     ̄ ̄ ̄ 
  ( ゚д゚ )\n_(__つ/ ̄ ̄ ̄/_ \n  \/    /\n     ̄ ̄ ̄\n  ( ゚д゚)\n_(__つ/ ̄ ̄ ̄/_ 
  \/    /\n  ( ゚д゚ )\n_(__つ/ ̄ ̄ ̄/_ \n  \/    /");

479:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/07 01:31:44
>>476の方が短かった……orz

481:デフォルトの名無しさん
07/07/07 01:34:25
~0 と ~0u のビット表現って必ず等しい?

482:デフォルトの名無しさん
07/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
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/07 03:44:19
int を for の最初の項に入れると一文字減る

486:デフォルトの名無しさん
07/07/07 03:45:04
ごめん>>485は勘違い

487:デフォルトの名無しさん
07/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
07/07/07 04:29:11
なんか34文字でできたっぽい
dmcでテストした

r(n){return n?r(n*2)*2+!!(n<0):0;}


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5325日前に更新/140 KB
担当:undef