トップページ⇒tech
1001コメント392KB

七行プログラミング part4

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
7行×79文字なら言語は問いません。
過去作品は、もしかしたら>>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
0153デフォルトの名無しさんNGNG
>>152
__cdecl
0154デフォルトの名無しさんNGNG
>>149はコンパイルエローになる
0155デフォルトの名無しさんNGNG
>>154
アラーメッセージは聞こえますか?
0156デフォルトの名無しさんNGNG
>>153
そんな処理系バリバリ依存のキーワード持ち出すんだったら
void main()
でも別にかまわないだろ
0157デフォルトの名無しさんNGNG
ナにゆーてんの?
0158デフォルトの名無しさんNGNG
誰か return 0; がないのに突っ込もうよ。
0159デフォルトの名無しさんNGNG
>>157
2番目と4番目が仕様上は正しくないと言ってるんでしょ
このスレ的には短くなるなら多少の処理系依存はアリだったはずだが
0160デフォルトの名無しさんNGNG
処裏刑威尊上等
0161デフォルトの名無しさんNGNG
両方intでも問題無い。
明示castのペナルティあるけど
0162デフォルトの名無しさんNGNG
>>158
最近そこには、突っ込めなくなった。
0163デフォルトの名無しさんNGNG
保守
0164デフォルトの名無しさんNGNG
>>158
C++としてコンパイルすればいいじゃん
0165デフォルトの名無しさんNGNG
>>164
別にCでもできるぞ。
ただ、警告になるが。
0166デフォルトの名無しさんNGNG
BCCコンパイルランチャー
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc,char**argv){char option[64],CmdLine[256]="Bcc32 ";
int i;printf("オプションを入力してください");gets(option);strcat
(CmdLine,option);strcat(CmdLine," ");for(i=1;i<argc;i++)strcat(CmdLine,
argv[i]);system(CmdLine);printf("キー入力すると終了します");gets(option);}
*.c/cppの右クリックに追加して使えます。
なにげにオプション入力可能
0167デフォルトの名無しさんNGNG
149のをコンパイルしたら
elseifは定義されていません。」だってさ
0168デフォルトの名無しさんNGNG
キー入力すると・・・は
Enterを押すと・・・です。
0169デフォルトの名無しさんNGNG
暗号キー+XOP演算によるファイル暗号化
1.暗号キー作成
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
main(){int i=256;char k[256];FILE*f;
srand((unsigned)time(NULL));for(;i--;)
k[i]=rand()%256-127;f=fopen("Key.txt","wb");
fwrite(k,1,256,f);}
起動すると256Bの暗号キーファイル(key.txt)を作成します
0170デフォルトの名無しさんNGNG
暗号キー+XOP演算によるファイル暗号化
2.XOPによる暗号コード作成
#include<stdio.h>
main(int c,char**v)
{FILE *K,*R,*C;char a[256],b[256];int i;if(c<2)return 0;
K=fopen(v[1],"rb");R=fopen(v[2],"rb");C=fopen("code.txt","wb");
if(K==0||R==0||C==0)return 0;fread(b,1,256,K);while((i=fread
(a,1,256,R))==256){for(;i--;)a[i]=a[i]^b[i];fwrite(a,1,256,
C);}c=i;for(;i--;)a[i]=a[i]^b[i];fwrite(a,1,c,C);}
コマンドラインで v[1]=暗号キーファイル v[2]=元のファイルになるように
すると、暗号コード(code.txt)を吐きます。
0171デフォルトの名無しさんNGNG
暗号キー+XOR演算によるファイル暗号化
3.XORによる復号化
#include<stdio.h>
main(int c,char**v)
{FILE *K,*R,*C;char a[256],b[256];int i;if(c<2)return 0;
K=fopen(v[1],"rb");R=fopen(v[2],"rb");C=fopen("code.txt","wb");
if(K==0||R==0||C==0)return 0;fread(b,1,256,K);while((i=fread
(a,1,256,R))==256){for(;i--;)a[i]=a[i]^b[i];fwrite(a,1,256,
C);}c=i;for(;i--;)a[i]=a[i]^b[i];fwrite(a,1,c,C);}
コマンドラインで v[1]=暗号キーファイル v[2]=暗号ファイルになるように
すると、復号コード(source.txt)を吐きます。
実は暗号化とほとんどかわりません。"code.txt"を変えただけ
0172デフォルトの名無しさんNGNG
>>164
C++ なら cstdio で int main で std::printf, std::scanf じゃん。
0173デフォルトの名無しさんNGNG
>>169-171
全部まとめて7行に入るよね?
0174デフォルトの名無しさんNGNG
XOP演算って何ですか?
ぐぐっても出てきませんでした。
0175デフォルトの名無しさんNGNG
XOR なら知ってるが。
というか、なぜこのスレで?
0176デフォルトの名無しさんNGNG
little endianな7行md5
>131と違いcharの符号は問わない
検証してないが4GB超サイズでも逝ける筈

double sin(),fabs();unsigned s[64],X[32],B,C,x,y,z,E[64],j=8,l,m,n,u,g=16;main(
char*a){for(a=E;j--;l=g)a[j+8]=~(a[j]=1+j*34);for(;n==u;){for(memset(a=X,m=n=0,
u=64);n<u&&~(x=getchar());B+=!(C+=8))a[n++]=x;for(n-u?X[l=14+n/56*g]=C,a[n]=128
,X[++l]=B:0;m<l;m+=g){for(memcpy(s,E,g);++j<u;y=s[-j&3]+(j/g?j>31?y^(j&g?x|~z:x
^z):x&z|y&~z:x&y|~x&z)+X[m|"@AE@"[j/g]+"AECG"[j/g]*j&15]+(~0U+1.)*fabs(sin(j+1.
)),z="GLQVEINTDKPWFJOU"[j/g*4|j&3]-u,s[-j&3]=x+=y<<z|y>>32-z)x=s[1-j&3],y=s[2-j
&3],z=s[~j&3];for(;j--;E[j]+=s[j]);}}for(;++j<g;printf("%02x",255&j[a=E]));}
0177デフォルトの名無しさんNGNG
>>175
>>169,170
0178デフォルトの名無しさんNGNG
>>169-171 XORによる暗号化・復号

フィルタにしました。引数なしだと Key.txt にキー作成。
作成したキーファイルを引数にすると、標準入出力間で暗号化、もう一度かけると復号。
実質6行だし、もっと縮められそう。

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int i,x=256;main(int c,char**v){char a[256];FILE*f=fopen(v[1],"rb");if(c<2){
srand((unsigned)time(NULL));for(i=x;i--;)a[i]=rand()%x-127;fwrite(a,1,x,fopen(
"Key.txt","wb"));}if(f)for(fread(a,1,x,f);~(c=getchar());i%=x)putchar(c^a[i++])
;}
0179デフォルトの名無しさんNGNG
>>176
ヤ、ヤバいコードだ…
0180デフォルトの名無しさんNGNG
>176に改行追加

double sin(),fabs();unsigned s[63],X[32],B,C,x,y,z,E[63],j=8,l=14,m,g=16;char*a
;main(c){for(a=E;j--;)a[j+8]=~(a[j]=1+j*34);for(;c;){for(memset(a=X,m=x=0,64);x
<64?c=~getchar():0;B+=!(C+=8))a[x++]=~c;for(c||(X[l+=x/56*g]=C,a[x]=128,X[l+1]=
B);m<l;m+=g){for(memcpy(s,E,g);j-63;s[-j&3]=x+=y<<z|y>>32-z)x=s[-j++&3],y=s[2-j
&3],z=s[~j&3],y=s[-j&3]+X[m|"@AE@"[j/g]+"AECG"[j/g]*j&15]+(j/g?j>31?y^(j&g?x|~z
:x^z):x&z|y&~z:x&y|~x&z)+(~0U+1.)*fabs(sin(j+1.)),z="GLQVEINTDKPWFJOU"[j/g*4|j&
3]&31;for(;j--;E[j]+=s[j]);}}for(;++j<g;printf("%02x",255&j[a=E]));puts("");}
0181デフォルトの名無しさんNGNG
age
0182デフォルトの名無しさんNGNG
短くするためには処理系依存もかまわないという考えが醜いな。昔はよかった
0183デフォルトの名無しさんNGNG
endian不問なSHA1&MD5 (と言いつつbig endianでは未検証)

/* unsigned=32bitなSHA1 */
unsigned*p,H[186],*q=H,n,d=8,z,l,h;F(v){q[n/4]|=(v&255)<<(~n&3)*8;}L(c){q=H+90;
F(c);if(++n>63){for(n=80,p=memcpy(q-5,H,20);n;1[p--]=d/4|d<<30)d=q[13]^q[8]^q[2
]^*q,q[16]=d>>31|d+d,d=p[1],z=p[2],c=p[3],p[-1]=(*p<<5|*p>>27)+p[4]+0x5a827999+
*q+++(--n/5&4?n>39?c^d&(z^c):882459459+(d&(z|c)|z&c):(39<n?341275144:0x6fe0483d
)+(d^z^c));for(memset(H+90,0,64);H-p--;)*p+=p[5];}}main(){for(;n=d--;n+=8,F(~z)
)n=d^3,F(z=d*34+1);for(q[4]=0xc3d2e1f0;z=~getchar();h+=!(l+=8))L(~z);for(L(128)
;n-56;)L(0);for(q[14]=h,n=63,L(q[15]=l);n<5;)printf("%08x",H[n++]);}

/* unsigned=32bitなMD5 */
double sin(),fabs();unsigned*q,s[63],X[63],B,C,x,y,E[63],j=8,g=16;F(v){q[y/4]|=
(v&255)<<y%4*8;}L(z){F(z);if(++y>63){for(memcpy(s,E,g);j-63;y=s[-j&3]+X["@AE@"[
j/g]+"AECG"[j/g]*j&15]+(j/g?j>31?y^(j&g?x|~z:x^z):x&z|y&~z:x&y|~x&z)+fabs(sin(j
+1.))*(~0U+1.),z="GLQVEINTDKPWFJOU"[j/g*4|j&3]&31,s[-j&3]=x+=y<<z|y>>32-z)x=s[-
j++&3],y=s[2-j&3],z=s[~j&3];for(;j--;E[j]+=s[j])X[j]=y=0;}}main(){for(q=E;y=j--
;y+=8,F(~x))F(x=--y*34+1);for(q=X;x=~getchar();B+=!(C+=8))L(~x);for(L(128);y-56
;)L(0);for(X[14]=C,X[15]=B,y=63,L(0);++j<g;printf("%02x",E[j/4]>>j%4*8&255));}
0184デフォルトの名無しさんNGNG
#include <stdio.h>
main(){int q1,q2,a;do{printf("8桁の数字を入力して覚えてください:");
scanf("%d",&q1);}while(q1>99999999||q1<10000000);do{
printf("\nさっきとは違う8桁の数字を入力してください:");scanf("%d",&q2)}
while(q2>99999999||q2<10000000||q2==q1);for(i=0;i<99;i++){printf("\n");}
printf("最初に入力した数字をどうぞ:");scanf("%d",&a);if(q1==a){
printf("正解。\n次に入力した数字をどうぞ:");scanf("%d",&a);if(q2==a){for(i=0;i<99;i++){printf("\n");}
printf("大正解。\nそれではもう一度最初に入力した数字をどうぞ:");scanf("%d",&a);if(q1==a){
printf("\nすごい・・・あなたは神です。\n");}else{printf("\n残念。正解は%dでした。\n",q1);}
}else{printf("\nはずれ。正解は%d\n",q2);}}else{printf("\nアホですか?正解は\n1回目%d\n2回目%d\n",q1,q2);}}

いくらプログラムを始めたばかりとはいえ、こんな糞プログラムも7行で作れないなんて・・・
みなさんすごいですね。
0185デフォルトの名無しさんNGNG
>>183
すごいな… MD5にSHA1とは
0186デフォルトの名無しさんNGNG
>>145

<SCRIPT>p='123456789一二三四五六七八九�T�U�V�W�X�Y�Z�[�\東南西北白発中'
y=[];t=[];q=document;function d(){for(i in t)q.all['b'+i].value=p.charAt(t[i])}
onload=d;function z(x,y){return x-y}for(i=0;i<34;i++)for(j=0;j<4;j++)y[i*4+j]=i
for(i in y){j=parseInt(Math.random()*135);s=y[i];y[j]=y[i];y[i]=s}for(i=0;i<12;
i++)t[i]=y.pop();t.sort(z);for(i in t)q.write('<BUTTON ID=b',i,' onClick=t[',i,
']=99;t.sort(z);t[11]=y.pop();d()></BUTTON>')</SCRIPT>

がんばれば5行いけそう。
0187デフォルトの名無しさんNGNG
>>183
Mac OS 9.2.2でSHA1は動作確認できました。
ただMD5の方は動かず。
プロトタイプのせいかと思い厳密に書き換えても変わりませんでした。

実行結果:
"" = 3973fc7d22cf0064330b8e9bada4e926
"a" = c1baf895b258ff07288aecb035ece53e
"abc" = c24dad17ee73db1464a5c8bd367f9ac0
"message digest" = 0d3cdbfdb20c7624283e63cd816dc8a6

コンパイラはMrC 5.0d3c1
0188デフォルトの名無しさんNGNG
>>187
↓の追加・変更でMD5が正常に動くならsin()の演算精度の違いが原因かと
これでも異なる場合は>183のMD5にミスがあると思われ

unsigned T[]={
0xd76aa478,0xe8c7b756,0x242070db,0xc1bdceee,0xf57c0faf,0x4787c62a,0xa8304613,0xfd469501,
0x698098d8,0x8b44f7af,0xffff5bb1,0x895cd7be,0x6b901122,0xfd987193,0xa679438e,0x49b40821,
0xf61e2562,0xc040b340,0x265e5a51,0xe9b6c7aa,0xd62f105d,0x02441453,0xd8a1e681,0xe7d3fbc8,
0x21e1cde6,0xc33707d6,0xf4d50d87,0x455a14ed,0xa9e3e905,0xfcefa3f8,0x676f02d9,0x8d2a4c8a,
0xfffa3942,0x8771f681,0x6d9d6122,0xfde5380c,0xa4beea44,0x4bdecfa9,0xf6bb4b60,0xbebfbc70,
0x289b7ec6,0xeaa127fa,0xd4ef3085,0x04881d05,0xd9d4d039,0xe6db99e5,0x1fa27cf8,0xc4ac5665,
0xf4292244,0x432aff97,0xab9423a7,0xfc93a039,0x655b59c3,0x8f0ccc92,0xffeff47d,0x85845dd1,
0x6fa87e4f,0xfe2ce6e0,0xa3014314,0x4e0811a1,0xf7537e82,0xbd3af235,0x2ad7d2bb,0xeb86d391};

fabs(sin(j+1.))*(~0U+1.) -> T[j]
0189デフォルトの名無しさんNGNG
thx。テーブルに置き換えたら正しく動作しました。
その後置き換え部分のみ比較してみたら一致したので
おやと思い置き換えた部分をいろいろいじった結果
fabs(sin(j+1.))*(~0U+1.)をunsignedにキャストすることでも動作。
どうやら原因は全ての数がdoubleにキャストされてから加算され
unsignedへ戻す時にオーバーフローしてy==UINT_MAXになる為のようでした。
お騒がせしました。
0190デフォルトの名無しさんNGNG
オーバーフロー対策した7行MD5

double sin(),fabs();unsigned*q,s[65],X[63],B,C,x,y,E[65],j=8,g=16;L(z){q[y/4]|=
z<<y%4*8;if(!~j?s[y]=E[y],++y>63:0){for(;j-63;y=s[-j&3]+X["@AE@"[j/g]+"AECG"[j/
g]*j&15]+(j/g?j>31?y^(j&g?x|~z:x^z):x&z|y&~z:x&y|~x&z)+(unsigned)(fabs(sin(j+1.
))*(~0U+1.)),z="GLQVEINTDKPWFJOU"[j/g*4|j&3]&31,s[-j&3]=x+=y<<z|y>>32-z)x=s[3&-
j++],y=s[2-j&3],z=s[~j&3];for(;j--;E[j]+=s[j])X[j]=y=0;}}main(){for(q=E;y=j--;y
+=8,L(255&~x))L(x=--y*34+1);for(q=X;x=~getchar();B+=!(C+=8))L(~x);for(L(128);y-
56;)L(0);for(X[14]=C,X[15]=B,L(y=64);++j<g;printf("%02x",E[j/4]>>j%4*8&255));}
0191189NGNG
>>190
それでも7行に収めてしまうとは。感服しますた。
0192デフォルトの名無しさんNGNG
age
0193nanaNGNG
このスレ最高!!!
0194デフォルトの名無しさんNGNG
/*>>190を見てスゲーなと思いつつも、7行目の "X[14]=C,X[15]=B" が
  エディアンに依存するのでは無いかと思ったり
  fabs(sin(xxx))を毎回呼ぶと処理が重そうだなと思ったり…
  と言う訳で頑張って挑戦してみました
  七行プログラムは初めてなのでミスってたらスマソ

  MD5 エディアン非依存 のハズ… */

double sin(),fabs();unsigned c,m=64,n,v,w,x,y,z,T[68],X[18];L(i){n||(w=*T+=w,x=
T[1]+=x,y=T[2]+=y,z=T[3]+=z);X[n/4]=X[n/4]>>8|i<<24;for(m=++n-64;m<64;n=m/16,v=
x,w+=T[m+4]+X["AECG"[n]*m+"PAEP"[n]&15]+(n?n-1?y^(n-2?x|~z:x^z):x&z|y&~z:x&y|~x
&z),c="GLQVEINTDKPWFJOU"[n*4|m++&3]&31,x+=w<<c|w>>32-c,w=z,z=y,y=v,n=0);}main()
{for(;m--;T[m/4]|=(m<8?1+34*m:526-34*m)<<m%4*8,T[m+4]=fabs(sin(m+1.))*(~0U+1.))
;for(;c=~getchar();L(~c),X[17]+=!(X[16]+=8));for(L(128);n-56;L(0));for(;n-32;L(
X[n/4+2]>>n%4*8&255),n<56&&n&1&&printf("%02x",T[n/8]>>n/2%4*8&255));puts("");}
0195194NGNG
>>194で>>190は
>…がエディアンに依存するのでは
と書いてますけど、>>190のソースの半分位は理解出来なかったので
勘違いかもしれません。
と言う訳で、私の勘違いで気分を悪くされたら、ごめんなさいm(_ _)m
0196デフォルトの名無しさんNGNG
s/エディアン/エンディアン/g
0197デフォルトの名無しさんNGNG
/* >>79で出来てるようですが、C++だったので
   C Only で作ってみましたが、少し余裕があったので
   コンパイル時の警告やエラーを避けて作りました
   本当は読み込みの規準を甘くしようとも考えましたが
   フォーマットに手を出すときりが無く七行では無理っぽいので…
   (なら実行時エラーを何とかしろと言う話もありますが…)

   24bit画像 to 8bitグレースケール */

#include <stdio.h>
unsigned char b[1078];int j=1024,l=1078,x,y;FILE*I,*O;void R(int i){fread(b,1,i
,I);}void W(int i){fwrite(b,1,i,O);}void E(int i,int v){for(j=4;j--;b[i+j]=v>>8
*j);}void D(int i){for(j=4;j--;y=y<<8|b[i+j]);}int main(int c,char*v[]){if(c==3
){I=fopen(v[1],"rb");O=fopen(v[2],"wb");for(;--j;b[j+53]=j&3?j/4:0);R(54);D(18)
;x=y;c=x+x*3%4;for(D(22),E(2,c*y+l),E(10,l),E(28,8),E(34,c*y),W(l);y--;R(x&3),E
(0,0),W(c-x))for(l=x;l--;R(3),*b=*b*.114+b[1]*.587+b[2]*.299,W(1));}return 0;}
0198197NGNG
/* fclose()を加えましたが関数の宣言が反則っぽいので
   怒るコンパイラもあるかもしれませんが
   手持ちのコンパイラでは大丈夫でした

   24bit画像 to 8bitグレースケール ※ sizeof(size_t)==sizeof(int) */

typedef void v;typedef int s;unsigned char b[1078];v*I,*O,*fopen(v*,v*);s x,y,j
=1024,l=1078,fread(v*,s,s,v*),fwrite(v*,s,s,v*),fclose(v*);v R(s i){fread(b,1,i
,I);}v W(s i){fwrite(b,1,i,O);}v E(s i,s w){for(j=4;j--;b[i+j]=w>>8*j);}v D(s i
){for(j=4;j--;y=y<<8|b[i+j]);}s main(s c,char*a[]){if(c==3){I=fopen(a[1],"rb");
for(O=fopen(a[2],"wb");--j;b[j+53]=j&3?j/4:0);R(54);D(18);x=y;c=x+x*3%4;D(22);E
(2,c*y+l);E(10,l);E(28,8);E(34,c*y);for(W(l);y--;R(x&3),E(0,0),W(c-x))for(l=x;l
--;R(3),*b=*b*.114+b[1]*.587+b[2]*.299,W(1));fclose(O);fclose(I);}return 0;}
0199デフォルトの名無しさんNGNG
a
0200デフォルトの名無しさんNGNG
/* 使い道は無いと思いますが8ビット以下に対応しました
   多数の警告が出ると思いますが (これ以上はムリポ)
   取り敢えずコンパイルは出来ると思います (と思いたい)

   〜8bit画像 -> 〜8bitグレースケール (色数は減らない)
    24bit画像 ->  8bitグレースケール */

unsigned char b[54];int d,k,l,p,r,s,x,y,z;void*I,*O,*fopen();R(i){fread(b,1,i,I
);}W(i){for(r+=2;--r;fwrite(b,1,i,O));}E(i,j){for(k=4;k--;b[i+k]=j>>8*k);}D(i){
for(k=4;k--;d=d<<8|b[i+k]);}main(i,v)char**v;{I=fopen(v[1],"rb");R(i=54);D(18);
O=fopen(v[2],"wb");x=d;D(22);y=d;D(28);l=d>8?8:d;E(28,l);i+=4<<l;E(10,i);l=x*l+
31>>5<<2;s=l*y;E(2,s+i);E(34,s);W(54);for(i=0;(d<9?p=s,l=2,x=1,y=1<<d,z=2,0:256
)>i;W(4))E(0,i++*65793);for(;y--;R(x&3),E(0,0),W(l-x))for(i=x;i--;R(3),*b=.114*
*b+.587*b[1]+.299*b[2],W(1))r=z;for(;p--;W(1))R(1);}
0201デフォルトの名無しさんNGNG
/* 何度も何度もスマソ
   グレースケールは多分(バグが無ければ)これで最後です
   基本的には>>200と同じですが、Offsetに対応しました
   そのため、逆にOffsetが不正だと変な動作を… */

unsigned char b[54];int d,k,l,p,r,x,y,z;void*I,*O,*fopen();F(i){for(r+=2;--r;i<
0?fwrite(b,1,-i,O):fread(b,1,i,I));}C(i,j){for(k=4;k--;i<0?d=d<<8|b[k-i]:(b[i+k
]=j>>8*k));}main(i,v)char**v;{I=fopen(v[1],"rb");O=fopen(v[2],"wb");F(i=54);C(-
28,0);z=d;C(-22,0);y=d;C(-18,0);x=d;C(-10,0);C(28,l=z<9?z:8);d-=i+=4<<l;l=31+x*
l>>5<<2;C(34,p=y*l);C(2,p+i);C(10,i);F(-54);for(z<9?x=1,y=1<<z,l=z=2:(i=z=p=0,r
=d+1023,F(1));i>255==z;F(-4))C(0,i++*65793);for(;y--;F(x&3),C(0,0),F(x-l))for(i
=x;i--;*b=.114**b+.587*b[1]+.299*b[2],r=z,F(-1))F(3);for(r=d;p--;F(-1))F(1);}
0202デフォルトの名無しさんNGNG
今の質をみていると、やはり糞スレだな。
パート1の初期のメンバーは熱かったな。
0203デフォルトの名無しさんNGNG
>>202
初期よりも、むしろ100以降だろ?
・・・と、主観が入りまくるので、この手の話は、や め な い か ?

今日見つけた7行プログラム?
http://game3.2ch.net/test/read.cgi/mmominor/1057397294/244
0204デフォルトの名無しさんNGNG
とりあえず表計算。
機能的には最悪だがサムだけはできる。

//0はなんでもよしという意味
//1 1 I 155 0 0 0 1行1列に155を代入
//4 5 A 1 4 6 5   4列5行に1列5行と6列5行の和を代入する。
//D          同じく割り算
//M          同じく引き算
//X          同じく掛け算
//4 5 S 1 2 0 5   4列5行に1列の2行から5行のサム
//0 0 s 8 4 0 9   8行の4列から9列を昇順ソートする

#include <stdio.h>
#include <memory.h>
void main(){short a,b,d,e,f,g,x=0,y=0,p[10][10],q;char c;memset(p,0,200);while(1)
{for(y=0;y<10;y++){for(x=0;x<10;)printf("%d\t",p[x++][y]);printf("\n");}
printf("指令を入力してください。");scanf("%d %d %c %d %d %d %d",
&a,&b,&c,&d,&e,&f,&g);switch(c){case 'E':return;case 'I':p[a][b]=d;break;case 'M':
p[a][b]=p[d][e]-p[f][g];break;case 'A':p[a][b]=p[d][e]+p[f][g];break;case 'X':
p[a][b]=p[d][e]*p[f][g];break;case 'D':p[a][b]=p[d][e]/p[f][g];break;case 'S':
p[a][b]=0;for(q=0;q<=g-e;q++)p[a][b]+=p[d][e+q];break;}}}

ごめんなさい9行です。
0205デフォルトでない名無しさんNGNG
#include <stdio.h>
#include <memory.h>
int a,b,c,d,e,f,g,x=0,y=0,p[10][10]={0},q;void main(){while(1){for(y=0;y<10;y++)
{for(x=0;x<10;)printf("%d\t\n",p[x++][y]);}printf("Command?");scanf("%d %d %c %"
"d %d %d %d",&a,&b,&c,&d,&e,&f,&g);p[a][b]=(c-65)?c-68?c-73?c-77?c-83?c-88?p[a][
b]:p[d][e]*p[f][g]:0:p[d][e]-p[f][g]:d:p[d][e]/p[f][g]:p[d][e]+p[f][g];switch(c)
{case 69:return;case 83:for(q=0;q<=g-e;q++)p[a][b]+=p[d][e+q];}}}

>>204のを七行に縮めてみる
0206デフォルトの名無しさんNGNG
最後 for(q=e;q<=g;p[a][b]+=p[d][q++]); とかの方がよくね?
0207デフォルトの名無しさんNGNG
#include <stdio.h>
int a,b,d,e,f,g,x,y,p[10][10]={0};char c=0;int main(){for(;c-69;scanf("%d %d %"
"c %d %d %d %d",&a,&b,&c,&d,&e,&f,&g)){if(c){if(c-83)e=p[d][e],g=p[f][g],p[a][b
]=c-65?c-68?c-73?c-77?c-88?p[a][b]:e*g:e-g:d:e/g:e+g;else for(p[a][b]=0;e<=g;)p
[a][b]+=p[d][e++];}for(y=-1;++y<10;puts(""))for(x=0;x<10;)printf("%d\t",p[x++][
y]);printf("指令を入力してください。");}return 0;}
0208デフォルトの名無しさんNGNG
        ( ⌒)     ∩_ _
       /,. ノ      i .,,E)
      ./ /"      / /"
      ./ / _、_    / ノ'
  _n  / / ,_ノ` )/ /  グッジョブ!! おまいら最高!
 ( l (   _、_   / _、_
  \ \ヽ( <_,` ) |( ,_ノ` )      n
   ヽ___ ̄ ̄  )  ̄     \    ( E)
     /    /  フ     /ヽ ヽ_//
0209デフォルトの名無しさんNGNG
グローバル変数の初期値が0であるというのは、仕様なのでしょうか、VC++などの実装なのでしょうか。
調べる余裕はないですが、もしそうなら>>207は6Byte短くなります。

また、
"%d %d %"(改行)"c %d %d %d %d" ではなくて、
"%d %d %\(改行)c %d %d %d %d" とすると、さらに1Byte減ります。

gccでは文句を言われるので判断は避けますが、return 0;は、void main()にすると短くなります。

途中で、c-=65;にして、条件式の2桁の数字群を1桁に落としてみると字数が減るかも。
学校に行くのでアイディアだけですみません。
0210デフォルトの名無しさんNGNG
>>209
> グローバル変数の初期値が0であるというのは
仕様。
0211デフォルトの名無しさんNGNG
x,y のループを x,y に分けないでひとつのforにしたら、短くなる。
0212デフォルトの名無しさんNGNG
そだね。xyに分けるのは人間の都合だよね
0213デフォルトの名無しさんNGNG
SHA1 と MD5 のコードはどういう風に使うんでしょうか。入力が分からない・・ヽ(´Д`;)ノ
0214デフォルトの名無しさんNGNG
>>213
コンソールから実行
※ SHA1→実行ファイル FILE→対象ファイル
SHA1 < FILE

バイナリファイルで正しい値が出ない時は
#include <stdio.h>
をソースの頭に加えて、矛盾する宣言等を手直しし、
main()の頭に
stdin=freopen("対象ファイル","rb",stdin);
を加えて何も指定せずに実行すれば正しい値がでるはず
0215山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0216213NGNG
>>214
五日ぶりにカキコ
できました、ありがとうございました。
0217デフォルトの名無しさんNGNG
//ヤター!エミュレータできたよ
import java.awt.*;import java.awt.event.*;public class MorphyOne{
public static void main(String[] arguments) {Canvas canvas = new
Canvas();canvas.setBackground(Color.black);canvas.setSize(640, 200);
final Frame frame = new Frame("MorphyOne Emulator");frame.addWindowListener
(new WindowAdapter() {public void windowClosing(WindowEvent e) {
frame.dispose();}});frame.add(canvas, BorderLayout.CENTER);
frame.pack();frame.show();}}
0218デフォルトの名無しさんNGNG
最近mainのreturn 0;とかincludeとかしっかり書いている人がいるね
書いてないのを作品と認めない俺としてはかなり評価しています。がんばれ!
0219デフォルトの名無しさんNGNG
オセロとテトリスのソースきぼんぬ。
自分でも作ってみたいので、参考にさせてください。
0220デフォルトの名無しさんNGNG
>>219
オセロは過去に出た。ハズ。
0221デフォルトの名無しさんNGNG
>>219
七行スレ嫁
つーか、絶対、知ってて言ってるだろ?
つーか、この後に、もっと短くしたソース晒して
自慢したいだけだろ?
0222デフォルトの名無しさんNGNG
>>220
過去スレ調べたけど、既に消えてました。
マジです。
お願いします。
>>221
そんなことないです
0223デフォルトの名無しさんNGNG
>>222
おまいの目は節穴だ
0224デフォルトの名無しさんNGNG
おまえら死ねよ
0225デフォルトの名無しさんNGNG
誰かさぁ、今まで出た七行プログラムのコード、コンパイルしてどっかに置いといてよ。
インタープリター系はそのままで。

頼むって。いや、マジで。
0226c_sugarNGNG
>>225
俺、そのうちやるかもしれない。
0227デフォルトの名無しさんNGNG
>>225
レスごとに、001.c 002.cpp 003.pl … の様にし、
ソース以外のレスを全てコメントで括ってやって
即コンパイル or 実行 出来るようにするなら分かるけど、
コンパイルした後のファイルなんて環境違ったら、意味無いし…
つーか、そう言うのは言い出しっぺがやるもんだ
0228デフォルトの名無しさんNGNG
#include <stdio.h>
#include <conio.h>

int main(){
puts("\n|゚∀゚)プッ\a")
getch();
reurn 0;
}
0229デフォルトの名無しさんNGNG
>>222
っていうか、オセロなんて7行で可能なの?
0230デフォルトの名無しさん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():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;}
0231デフォルトの名無しさんNGNG
>>230
コンパイル通らないよ
0232デフォルトの名無しさんNGNG
>>231
環境は何?あと、エラーメッセージとか。
0233デフォルトの名無しさんNGNG
ああ、オセロ6行はgccで通らないはず。確か
(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
>>219
オセロもテトリスもあった。
テトリスはJavaScriptだったが。

>>225
7行コードだから良いわけで
0235デフォルトの名無しさんNGNG
ひさびさにオセロを見た
今インデントを展開して読んでみているのだが、凄まじいな
0236231NGNG
WinXPでBCCです。
エラーは「左辺値が必要」です。
0237デフォルトの名無しさんNGNG
スケベはこっちで
http://homepage3.nifty.com/coco-nut/
フェチはこっち
http://homepage3.nifty.com/coco-nut/fe/ero.html
0238デフォルトの名無しさんNGNG
>>233
僕のは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デフォルトの名無しさんNGNG
デバッガで追いかけても理解できない俺は屑ですか?
0240デフォルトの名無しさんNGNG
理解したいならソースに改行/タブを入れて見やすくしてから
見やすいように書き換えていくのがいい
0241デフォルトの名無しさんNGNG
・・・文が変だな
0242デフォルトの名無しさんNGNG
>>233&&238
条件演算子は、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
>>242
まともにうごいているように見えるけど?
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
>>244
だから、
a=1+b=c; /* c を ( 1+b ) に代入出来ない */
と同じで、左辺値が必要なんだって言ってるの、OK?
p%9?k(),v:m[p]=9; /* 9 を ( p%9?k(),v:m[p] ) に代入する事は出来ない */
ちゃんと、優先順位を考えませう ( ?: の方が = より優先される )
0246245NGNG
ついでだから、もう少し。
変数と単項*演算子、[]演算子、->演算子は常に左辺値を生じさせる
また、.演算子も通常、左辺値を生じさせが、その他演算子は左辺値を生じさせない
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デフォルトの名無しさんNGNG
C FAQの3.16にも同じようなことが書いてありますね。
http://www.catnet.ne.jp/kouno/c_faq/c3.html#16

ところで、?:演算子で左辺値を生じさせるって、
C++でもダメでしたっけ?
0248デフォルトの名無しさんNGNG
このオセロってやっぱり人間V.S.人間?
0249デフォルトの名無しさんNGNG
>>247
規格が手元にないので間違ってるかもしれませんが…

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++ で結果が変わります
0250248NGNG
すげぇー、CPUとの対戦かよ。
感動した!
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
>>251
実行してないから分からんが、そのコードは
p%9||(m[p]=9);k();
と等価になるけど、
p%9?k(),v:m[p]=9;
とは、k()の実行条件が明らかに異なるけど、大丈夫なの?
つーか、本当に、1度、ソースを解読したの?
■ このスレッドは過去ログ倉庫に格納されています