七行プログラミング part4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG過去作品は、もしかしたら>>2-20あたりに。
■前スレ
http://pc2.2ch.net/test/read.cgi/tech/1033143528/
part 2
http://pc3.2ch.net/tech/kako/1018/10188/1018840143.html
part 1
http://pc.2ch.net/tech/kako/984/984182993.html
0232デフォルトの名無しさん
NGNG環境は何?あと、エラーメッセージとか。
0233デフォルトの名無しさん
NGNG(p=8;++p<82;printf("・\0○\0●\0\n"+m[p]))p%9?k():m[p]=9;for(a?d=a=p=9:s?s=0,
の行のk()が原因。確認はしていないけれど、
(p=8;++p<82;printf("・\0○\0●\0\n"+m[p]))p%9?k(),0:m[p]=9;for(a?d=a=p=9:s?s=0,
にすればうまくいくのではないかな?
0234デフォルトの名無しさん
NGNGオセロもテトリスもあった。
テトリスはJavaScriptだったが。
>>225
7行コードだから良いわけで
0235デフォルトの名無しさん
NGNG今インデントを展開して読んでみているのだが、凄まじいな
0236231
NGNGエラーは「左辺値が必要」です。
0237デフォルトの名無しさん
NGNGhttp://homepage3.nifty.com/coco-nut/
フェチはこっち
http://homepage3.nifty.com/coco-nut/fe/ero.html
0238デフォルトの名無しさん
NGNG僕のはVC6、Win98で通るが、展開してみたが、怪しそうなのは同じ
3項演算の所だった。
>>236
どこの位置にエラーがあるのかがわかんないよ。
でも、>>233と同じ所なのかな。それなら、>>233の方法か、
p%9?k():m[p]=9; → if(p%9)k();else m[p]=9;
t-6?scanf("%d%d",&p,&v),p+=v*9:++p;
↓
if(t-6){scanf("%d%d",&p,&v);p+=v*9;}else ++p;
と直すとか。
0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNG見やすいように書き換えていくのがいい
0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNG条件演算子は、void型には適用出来ない
p%9?k():m[p]=9; /* 何かしらの値を必要とするが k() は void型 */
また、代入より、条件演算子の方が、優先順位が高い
p%9?k():m[p]=9; /* 9を p%9?k():m[p] には代入出来ない */
よって、↓のようにすればコンパイル出来る
p%9?k(),0:(m[p]=9);
が、どっちみち、まともに動かない気がするが…?
0243デフォルトの名無しさん
NGNGまともにうごいているように見えるけど?
0244デフォルトの名無しさん
NGNG昔ずいぶん頑張って解読してこのソースコードは大体読めるようになったので、まず下のソースで間違いないと思う。
#include <stdio.h>
int*i,p,t,a,d,v,m[91]={-10,-9,-8,-1,1,8,9,10},s;void k(){if(m[p]==0)for(i=m;*i
;i++){for(v=p+*i;m[v]==9-t;v+=*i);if(v-p-*i&&m[v]==t&&(s=a=v=p,d))do m[v]=t,v
+=*i;while(m[v]-t);}}main(){for(m[40]=m[50]=s=t=3,m[41]=m[49]=6;s-1;a=d=0){for
(p=8;++p<82;printf("・\0○\0●\0\n"+m[p]))p%9?k(),v:m[p]=9;for(a?d=a=p=9:s?s=0,
puts("pass"):s++;a==9;k())t-6?scanf("%d%d",&p,&v),p+=v*9:++p;t=9-t;}return 0;}
具体的には、
p%9?k():m[p]=9; → p%9?k(),v:m[p]=9;
それにしても美しいソースコードです。
0245デフォルトの名無しさん
NGNGだから、
a=1+b=c; /* c を ( 1+b ) に代入出来ない */
と同じで、左辺値が必要なんだって言ってるの、OK?
p%9?k(),v:m[p]=9; /* 9 を ( p%9?k(),v:m[p] ) に代入する事は出来ない */
ちゃんと、優先順位を考えませう ( ?: の方が = より優先される )
0246245
NGNG変数と単項*演算子、[]演算子、->演算子は常に左辺値を生じさせる
また、.演算子も通常、左辺値を生じさせが、その他演算子は左辺値を生じさせない
by 規格
で、?:演算子で左辺値を生じさせる(↓のような)ものは規格外の動作
#include <stdio.h>
int main()
{
int i=1,j=2,k=3;
k>2?i:j=4; /* 4 を ( k>2 が真なら i に 偽なら j に ) 代入 */
printf("%d, %d, %d\n",i,j,k);
return 0;
}
0247デフォルトの名無しさん
NGNGhttp://www.catnet.ne.jp/kouno/c_faq/c3.html#16
ところで、?:演算子で左辺値を生じさせるって、
C++でもダメでしたっけ?
0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNG規格が手元にないので間違ってるかもしれませんが…
g++はもちろん、bccでも左辺値は生じますので、左辺値は生ずるものと考えられます
ちなみに、CとC++では解釈が変わります
>>246の?:演算子を例にすると、Cでは、
((k>2)?(i):(j))=4;
と解釈されますが、C++だと
(k>2)?(i):(j=4);
と解釈されます (:以降の扱いが変わる)
C++では、?〜:の間の動作と:以降の動作を同じにしたのだと思われます
と言う訳で、C++で左辺値を生じさせるためには
(k>2?i:j)=4;
のようにすればOKです ( g++ 及び bcc では動作確認 )
ちなみに、bccは駄目ですが、gccではCのソースでも、?:演算子は左辺値を生じます
が、↑に書いた通り、解釈が変わるので、同じソース ( >>246 ) をコンパイルしても
gcc と g++ で結果が変わります
0250248
NGNG感動した!
0251デフォルトの名無しさん
NGNG(p=8;++p<82;k(),printf("・\0○\0●\0\n"+m[p]))p%9||(m[p]=9);for(a?d=a=p=9:s?s=0,
でどう?
int*i,p,t,a,d,v,m[90]={-10,-9,-8,-1,1,8,9,10},s;void k(){if(m[p]==0)for(i=m;*i
;i++){for(v=p+*i;m[v]==9-t;v+=*i);if(v-p-*i&&m[v]==t&&(s=a=p,d))do m[s]=t,s+=*
i;while(m[s]-t);}}main(){for(m[41]=m[49]=s=t=3,m[40]=m[50]=6;s-1;a=d=0){for(p=
9;p<82;k(),printf("・\0○\0●\0\n"+m[p++]))p%9||(m[p]=9);for(a?a=d=p=9:s?puts(
"pass"),s=0:s++;a==9;k())t-6?scanf("%d%d",&p,&v),p+=v*9:++p;t=9-t;}return 0;}
>>248
パート1は度肝を抜く作品の目白押しなので、一度ゆっくりと読んでみ。
0252デフォルトの名無しさん
NGNG実行してないから分からんが、そのコードは
p%9||(m[p]=9);k();
と等価になるけど、
p%9?k(),v:m[p]=9;
とは、k()の実行条件が明らかに異なるけど、大丈夫なの?
つーか、本当に、1度、ソースを解読したの?
0253デフォルトの名無しさん
NGNG理解できないなら、実行してしか判断できないのに、
実行せずに文句言ってはいかんな。
0254デフォルトの名無しさん
NGNG理解するも何も、そんなコード、
元のソースが無い限り、読む気にならんて
0255デフォルトの名無しさん
NGNG0256デフォルトの名無しさん
NGNG理解できないなら四の五の言わずに実行しろよ(w
0257デフォルトの名無しさん
NGNG自分が読めないからって(w
いや俺も読めないけど(w
0258デフォルトの名無しさん
NGNGindentでも通したらいいんでないのか
いや漏れも読んでないけど
0259245==252==254
NGNG>それにしても美しいソースコードです。
が、自我自賛にしか聞こえないから、
ソースを読む気にもならんし、実行する気にもなれんのよ…
まぁ、それでも、>>244の演算子の問題が無ければ、
素直にコンパイル&実行してた思うし、>>252の発言もしてないよ
つーか、問題無く本当に動くの?
0260デフォルトの名無しさん
NGNG妙竹林な理屈をたてて実行しないことが正当化のように装い
それだけならまだしも、実行もしていないソースコードを批判するなんて
なんというか陰鬱な性格だな。
言い訳と嫉妬の人生を>>259かいま見た。
0261259
NGNGだぁ、もうウゼェな…
読めば良いんだろ?読めば。
つーわけで、k()は
void k(){if(m[p]==0)…
で、m[p]が0でないと実効されない。よって、
p%9||(m[p]=9);k();
p%9?k(),v:m[p]=9;
の2つのコードは等価
つーか、演算子の優先順位も知らねーで、
解読しただの、美しいコードだの、アホじゃねーのか?
だいたい、オセロのソースくれって言ったの、お前じゃねーのか?
このスレにでるまえに、他のスレでやってたのも、お前じゃねーのか?
ただ単に、自我自賛したいだけの、自作自演じゃねーのか?
オナニーなら、オナニーらしく、勝手に独りでやってくれよ
0262デフォルトの名無しさん
NGNG| 強い電波を感知しました .|
|____________|
/ /
/
_ ビビビビビ
/||__|∧ /
。.|.(O´∀`) /
|≡( )) ))つ
`ー| | |
(__)_)
0263259
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1058283913/40-44
で、
http://pc2.2ch.net/test/read.cgi/tech/1058283913/49
で、コンパイル出来ないと言われたが、
この後の経過を見ずに、誰からも誉めてもらえなかったので
>>219から自賛自演を始めたと予測
つーか、もう寝る
0264デフォルトの名無しさん
NGNGオセロを作った人は、もうこのスレを見ていないと思う。
というより、part1-2 あたりの人は、ほとんどきていないだろう。
激しく攻撃されていたからね。
0265248
NGNG> パート1は度肝を抜く作品の目白押しなので、一度ゆっくりと読んでみ。
了解っす。こんな凄いのがゴロゴロあるのか。
それらを作った神達はどこへ行ったんだろう?まだこのスレにいるのかな?
0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
NGNG>>4を見ればいいんじゃないかと
0268山崎 渉
NGNGHSP2.6です。
// ここから
t=10000:n="p.txt":z="2\n":title "0%":dim e,t+1:notesel z:notesave n
bsave n,z,3:a=3:s=3:repeat ,3:if a>t:break:if e.a=1{i=0}else{if(a!5)&(a\5=0){
i=0}else{i=1:b=cnt-2/4:if b<1{i=1}else{c=3:repeat b,3:if a\c=0 : i=0 : break
c+=2:loop}}}if i=1{h=a:str h:h+="\n":strlen l,h:bsave n,h,l,s:s+=l:d=a*3
if d<t{e.d=1}f=a*7:if f<t{e.f=1}g=a*11:if g<t{e.g=1}}r=a*100/t
if (p!r)&(r\10=0){title ""+r+"%"}p=r:a+=2:await:loop:title "100%":stop
// ここまで
1番最初にある変数tまでの素数を求め続けます。
10万までの素数を求めるのにpen3で約1分10秒かかりました。
元のソース
http://shobon.net/user/sword/prime.txt
実行ファイル
http://shobon.net/user/sword/prime7.zip
0270デフォルトの名無しさん
NGNGpart2 の 802-810 を見るとよいよ。
0271デフォルトの名無しさん
NGNG見ればわかるがC言語
#include<stdio.h>
#include<math.h>
void main(){int n,a=0,i,j;scanf("%d",&n);printf("%7d ",2);
for(i=3;i<=n;i+=2){for(j=3;j<=int(sqrt(i));j+=2)if(i%j==0){a=1;break;}
if(a==0){printf("%7d ",i);}else{a=0;}}}
100万までの素数を求めるのにセレロン1.2GHzで10秒くらいかな?
もっと短く、もっと速くできそうだけど短すぎるんで七行プログラミングにはどうかと・・・
0272デフォルトの名無しさん
NGNGpart2 の 802-810 を見るとよいよ。
0273デフォルトの名無しさん
NGNGもちろん、見ました
でも、短くするためとはいえ非効率かと
0274デフォルトの名無しさん
NGNG0275デフォルトの名無しさん
NGNGだよね。
0276デフォルトの名無しさん
NGNG簡単に7行以下になる題材だと…
まぁ、本人にとってはいろんな意味で勉強になるだろうが。
0277デフォルトの名無しさん
NGNGこころが安まる…
0278デフォルトの名無しさん
NGNG> 7行テトリスがぱくられていました
> http://www.tamagawa.ac.jp/GAKUBU/KOUGAKU/InfCEng/festa2002/
> http://www.tamagawa.ac.jp/GAKUBU/KOUGAKU/InfCEng/festa2002/sakuhin.html
0279デフォルトの名無しさん
NGNG見てきたよ
うは、完全にコピペじゃん。
彼が、S◆Q14CxNhI 氏ならいいんだけどね
0280デフォルトの名無しさん
NGNG0281デフォルトの名無しさん
NGNG> うは、完全にコピペじゃん。
> 彼が、S◆Q14CxNhI 氏ならいいんだけどね
Sタンは
http://www.isl.cs.gunma-u.ac.jp/~shingo/make/7line/7line.html
G馬大の人なので別人だぁね。
0282デフォルトの名無しさん
NGNG優秀な作品作る人はもう来なくなるだろうね
0283デフォルトの名無しさん
NGNGうれしいです。
7行でできることって限界がありますよね。
Windowsプログラムってしばらく出てませんよね。
0284デフォルトの名無しさん
NGNGそれとsageてね
0286デフォルトの名無しさん
NGNG俺は大学出だからな!
高卒死ね!
とか言ったりするんだろうな・・・
0287デフォルトの名無しさん
NGNG0288デフォルトの名無しさん
NGNGttp://www.gsic.titech.ac.jp/supercon/supercon2003/yosen.html
の回答を7行で作ってみた。
#include <stdio.h>
int m[10000],p,t,P,L,T,j,N=100;S(p,l,i){++l>L?P=p,L=l,T=t:0;for(;m[p]=i--;)j=(i
&1?N:1)*(i&2?1:-1)+p,(i&1?p/N:p%N)-(i&2?99:0)&&m[j]==t?S(j,l,3):0;m[p]=t;}main(
int A,char**B){FILE*f;if(A<2?puts("No argument.")*0:(f=fopen(B[1],"r"))||0*puts
("I/O error.")){for(;(t=getc(f))+1;t-10&&p<N*N?m[p++]=t:0);if(p-N*N)puts("Stra\
nge data.");else{for(;p--;)t=m[p],S(p,0,3);printf("x=%d,y=%d,t=%c,l=%d\n",P%N,P
/N,T,L);}}return 0;}
VC++6.0では警告も出ません。
実行速度については触れないで下さい(汗
0289デフォルトでない名無しさん
NGNGパズル N Queen
#include <stdio.h>
int q=5,b[16][16],n,i,j,k,l,m,o;void main(c,v)char**v;{for(n=0;;q++){for(i=0;i<q
;i++)for(j=0;j<q;j++)b[j][i]=0;while(q!=n){for(i=0;i<q;puts(""),i++)for(j=0;j<q;
printf(b[j][i]?"Q":"*"),j++);scanf("%d %d",&k,&l);b[k][l]=1;n++;puts("\n");for(i
=0;i<q;i++){for(j=0;j<q;j++){if(i!=l||j!=k){m=b[j][i]&1;o=n;n-=(i==l)&m?m:0;n-=(
j==k)&m?m:0;n-=(i-l==j-k)&m?m:0;b[j][i]-=!(o==n);}}}}puts("clear\n");}return;}
x yで座標指定。
・・・って六行になってしまった(;´Д`)
0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNG0292デフォルトの名無しさん
NGNG逆じゃね?N-Queenつったら8-Queenをかねる。
0293デフォルトの名無しさん
NGNG0294デフォルトの名無しさん
NGNGp (a=(2..100).to_a).each{|i|a.reject!{|j|j%i==0&&j>i}}
54バイト
perlならもっと短くできるかna.
0295デフォルトの名無しさん
NGNG0296山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0297デフォルトの名無しさん
NGNG0298デフォルトの名無しさん
NGNG0299デフォルトの名無しさん
NGNG0300デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNG0303デフォルトの名無しさん
NGNG0304abc
NGNGおかねもうけ情報見つけました
http://pocket.muvc.net/job/index.html
0305デフォルトの名無しさん
NGNG0306デフォルトの名無しさん
NGNG変数機能付き逆ポーランド記法電卓
#include <stdio.h>
int s[100],v[255],*t,j=0,l,k=0,c,m,o;void f(char *p){l=*t;c=*p;if(c=='+'){t--;
*t+=l;}if(c=='-'){t--;*t-=l;}if(c=='*'){t--;*t*=l;}if(c=='/'){t--;*t/=l;}if(c==
'^'){t--;for(m=1,o=*t;m<l;m++)*t*=o;}if(c==' '||c=='\0')if(k){t++;*t=j;j=0;k=0;
}if(c=='\0')return;if(c>='0'&&c<='9'){j=j*10+c-'0';k=1;}if(c>='a'&&c<='z'){j=
v[c];k=1;}f(p+1);}int main(){char n[1000];for(;;){t=s+1;gets(n);if(n[0]=='.')
break;if(n[1]=='='){f(n+2);v[n[0]]=*t;}else{f(n);printf("%d\n",*t);}}return 0;}
*"c=a 10 * b +"のように代入文が使えます。
*普通に"10 a +"のように入力すると計算結果を表示します。"a"とだけ入力するとaの中身を表示します
*変数はa-zまでが使えます
*使える演算子は+,-,*,/,^(べき乗)です
0307306
NGNGint s[100],v[255],*t,j=0,l,k=0,c,m,o;void f(char *p){l=*t;c=*p;if(c=='+')*--t+=l;
if(c=='-')*--t-=l;if(c=='*')*--t*=l;if(c=='/')*--t/=l;if(c=='%')*--t%=l;if(c==
'^'){t--;for(m=1,o=*t;m<l;m++)*t*=o;}if(c==' '||c==0)if(k){*++t=j;j=k=0;}if(c==
0)return;if(c>='0'&&c<='9'){j=j*10+c-'0';k=1;}if(c>='a'&&c<='z'){j=v[c];k=1;}
f(p+1);}int main(){char n[1000];for(;;){t=s+1;gets(n);if(n[0]=='.')break;if(n[1]
=='='){f(n+2);v[n[0]]=*t;}else{f(n);printf("%d\n",*t);}}return 0;}
少し短縮して剰余演算子(%)を使えるようにした
0308デフォルトの名無しさん
NGNG0309デフォルトの名無しさん
NGNG>306 >307とは別人だけど、==の消し方がわかりません。
そのほかのところをあちこち削ったら5行くらいにはなったけど、==がどうしても気になって。
だいぶ変形しないと==を消すのって難しい気がしました。
んで、いい方法あったら教えてください。
俺としては'+'とかを数字にして欲しかったな。
0310306
NGNG#include <stdio.h>
int s[99],v[255],*t=s,j=0,k,l,c,o;char n[99],*p;void f(){c=*p;c==32|!c?k?*++t=j,
j=k=0:o:c-=41;if(c){l=*t;c==2?*--t+=l:c==4?*--t-=l:c==1?*--t*=l:c==6?*--t/=l:c==
-4?*--t%=l:c>6&c<17?j=j*10+c-7,k=1:c>55?j=v[*p],k=1:--l;if(c==53)for(o=*--t;l;--
l)*t*=o;p++;f();}}int main(){while(*(p=gets(n))){if(n[1]-61)f();else p+=2,f(),v[
*n]=*t;printf("%d\n",*t);}return 0;}
==の効率的な減らし方が分からない……
無理矢理消そうとすると余計に長くなる気がする
0311デフォルトの名無しさん
NGNG0312309
NGNG#include <stdio.h>
int s[99],v[255],*t=s,j,k,l,o;char*p,c,n[999];f(){c=*p;c-32&c?c-=41:k?*++t=j,j=
k=0:o;if(c){l=*t;c==2?*--t+=l:c==4?*--t-=l:c==1?*--t*=l:c==6?*--t/=l:c==-4?*--t
%=l:c>6&c<17?j=j*10+c-7,k=1:c>55?j=v[*p],k=1:--l;if(c==53)for(o=*--t;l--;)*t*=o
;f(++p);}}main(){while(*(p=gets(n)))n[1]==61?f(p+=2),v[*n]=*t:f(),printf("%d\n"
,*t);return 0;}
三項演算子の優先順位の関係で、この状態から==を減らすのは俺にはできない。。
0313デフォルトの名無しさん
NGNGカラーテトリスなんて、大分前からあるだろうに。
ついでに7行テトリスの人↓
http://www.isl.cs.gunma-u.ac.jp/~shingo/make/7line/7line.html
0314デフォルトの名無しさん
NGNGそいつ痛いキャラになってしまったからなぁ
0315デフォルトの名無しさん
NGNG>>311が本人じゃないの?
0316デフォルトの名無しさん
NGNG0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNGhttp://www.isl.cs.gunma-u.ac.jp/~shingo/make/write/phone1-1.html
これを見る限り、ちょっと痛いっすよ。
なんていうのかこう、笑いの壷とか面白いこと、
他人が楽しめることとかもうちょっと考えてみたほうがいいかと。
これからも7行プログラミングネタ頑張って作成してくだちぃ。
0319デフォルトの名無しさん
NGNGアイタタタ
(再読)
アイター
0320part2の1
NGNGと、言ってみるテスト(・∀・)
0321デフォルトの名無しさん
NGNG0322デフォルトの名無しさん
NGNG>>169-171
0323デフォルトの名無しさん
NGNG自分の作品?もう少し難しい(79*7に収まりそうに無い)お題に挑戦してみよう
0324デフォルトの名無しさん
NGNG違う。参考までにしてるだけ。
0325デフォルトの名無しさん
NGNGこのあたりで、7行改め553文字以内という制限にしてみては?
つまり適当に改行を入れてコンパイルが通るようにすればOKとする。
例えば
#include<windows.h>int main(...もOKとなって少し制限が緩くなる。
0326デフォルトの名無しさん
NGNGスレ違いになるので却下。
0327デフォルトの名無しさん
NGNG独り立ちしたと言う事で。
>>325
それだとあまり変わらないから、1レスプログラミング見たいなのが良いな。
工夫しなくてもいろんなのが作れてしまうが。
0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNG0330デフォルトの名無しさん
NGNG0331デフォルトの名無しさん
NGNGっていうなら、お前が書けばいいだろって思う。
■ このスレッドは過去ログ倉庫に格納されています