七行プログラミング part4

このエントリーをはてなブックマークに追加
667雪ん子
無い持ち駒が打てるようになっていたのを修正。
また伸びた・・・欝だ。

#include<stdio.h>
char*k=" 歩香桂銀金角飛王",d[82]={2,3,4,5,8,5,4,3,2,0,7},h[64],b[9],f=81,a=32,
c=16,t,i,j,u,m,n,v,w,s,*p,z,e;main(){d[c]=6;d[f]=1;for(i=18;i<27;)d[i++]=1;for(
;~--i;)d[80-i]=d[i]?d[i]+a:0;for(;;){for(z=i=0;i<f;++i%9||puts("|\n"))u=d[i],j=
u%c,printf("|%c%.2s%c"," +"[u/c&1],k+j*2,"^_ "[j?u/a:2]);puts("先手");for(i=64;
~--i;z|=h[i]&8,a-i||puts("\n後手"))h[i]&&printf("%.2s",k+h[i]*2);printf("\n%s\
手入力\n",t?"後":"先");if(z)return!printf("%s手の勝利",i<a?"後":"先");l:scanf(
"%4s",b);for(i=4;i--;)b[i]-=49;e=8-b[2];i=e+b[3]*9;if(*b-63){*b=8-*b;j=*b+b[1]*
9;m=*(p=d+i);u=d[j];z=!u|(u&a)==t||m&&u/a==m/a;if(!z){m=t?i-j:j-i;s=u%a;v=7<m&m
<11;w=v|m*m==1;n=s<2&m==9|s==3&(m==19|m==17)|s==4&(v|m==-8|m==-10)|(s&8||21<s)&
(w|-7<m&m<-11)|(s==5|c<s&s<22)&(w|m==-9);if(!n){v=j;do v+=s%c==6&!(m%8&&m%10)?(
(e>*b)+(b[3]>b[1])*9-5)*2:s%c==7?z=m%9?1:9,j>i?-z:z:m&&s==2&m%9==0?t?9:-9:f-v;
while((z=v-i)&&!d[v]);}if(!z|n){for(m=a-t;d[j]=m<64-t&&h[m]||(h[m]=*p%c,0);m++)
;*p=u;if(s<8?t?j<54&i>53:i<27&j>26:0){for(puts("成る?y/n");n-'y'&&n-'n';scanf(
"%c",&n));*p|=n-'n'?c:0;}}}t=z?t:a-t;}else{j=b[1]+1;for(u=i%9;u<f&&~t+d[u+=9];)
;if(d[i]||i>f|j==1&u<f)goto l;for(u=a-t;u<64-t&&h[u]!=j;u++);h[u]==j||(h[u]=0,t
=a-t,d[i]=j+t);}}}