|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
|
Page 1 of 1
|
[ 5 posts ] |
|
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22571 Location: Silicon Valley
|
Наверное надо поговорить о самописанных шахматных программах, и начать с Toldeo Nanochess, которые пролетали уже у нас, но теперь у них есть страничка в википедии ( https://en.wikipedia.org/wiki/Toledo_Nanochess) и новый веб-сайт: http://www.nanochess.org/chess3.htmlи чуть более новая версия от 20 ноября 2009 года: | | | | Code: /**************************************************************************\ | Toledo Nanochess (c) Copyright 2009 Oscar Toledo G. All rights reserved | | 1257 non-blank characters. Evolution from my winning IOCCC 2005 entry. | | o Use D2D4 algebraic style for movements. biyubi@gmail.com Nov/20/2009 | | o On promotion add a number for final piece (3=N, 4=B, 5=R, 6=Q) | | o Press Enter alone for computer to play. | | o Full legal chess moves. http://www.nanochess.org | | o Remove these comments to get 1326 bytes source code (*NIX end-of-line) | \**************************************************************************/ char*l="ustvrtsuqqqqqqqqyyyyyyyy}{|~z|{}" " 76Lsabcddcba .pknbrq PKNBRQ ?A6J57IKJT576,+-48HLSU"; #define F getchar()&z #define v X(0,0,0,21, #define Z while( #define _ ;if( #define P return--G,y^=8, B,i,y,u,b,I[411],*G=I,x=10,z=15,M=1e4;X(w,c,h,e,S,s){int t,o,L,E,d,O=e,N=-M*M,K =78-h<<x,p,*g,n,*m,A,q,r,C,J,a=y?-x:x;y^=8;G++;d=w||s&&s>=h&&v 0,0)>M;do{_ o=I[ p=O]){q=o&z^y _ q<7){A=q--&2?8:4;C=o-9&z?q["& .$ "]:42;do{r=I[p+=C[l]-64]_!w|p ==w){g=q|p+a-S?0:I+S _!r&(q|A<3||g)||(r+1&z^y)>9&&q|A>2){_ m=!(r-2&7))P G[1]=O, K;J=n=o&z;E=I[p-a]&z;t=q|E-7?n:(n+=2,6^y);Z n<=t){L=r?l[r&7]*9-189-h-q:0 _ s)L +=(1-q?l[p/x+5]-l[O/x+5]+l[p%x+6]*-~!q-l[O%x+6]+o/16*8:!!m*9)+(q?0:!(I[p-1]^n)+ !(I[p+1]^n)+l[n&7]*9-386+!!g*99+(A<2))+!(E^y^9)_ s>h||1<s&s==h&&L>z|d){p[I]=n,O [I]=m?*g=*m,*m=0:g?*g=0:0;L-=X(s>h|d?0:p,L-N,h+1,G[1],J=q|A>1?0:p,s)_!(h||s-1|B -O|i-n|p-b|L<-M))P y^=8,u=J;J=q-1|A<7||m||!s|d|r|o<z||v 0,0)>M;O[I]=o;p[I]=r;m? *m=*g,*g=0:g?*g=9^y:0;}_ L>N){*G=O _ s>1){_ h&&c-L<0)P L _!h)i=n,B=O,b=p;}N=L;} n+=J||(g=I+p,m=p<O?g-3:g+2,*m<z|m[O-p]||I[p+=p-O]);}}}}Z!r&q>2||(p=O,q|A>2|o>z& !r&&++C*--A));}}}Z++O>98?O=20:e-O);P N+M*M&&N>-K+1924|d?N:0;}main(){Z++B<121)*G ++=B/x%x<2|B%x<2?7:B/x&4?0:*l++&31;Z B=19){Z B++<99)putchar(B%x?l[B[I]|16]:x)_ x-(B=F)){i=I[B+=(x-F)*x]&z;b=F;b+=(x-F)*x;Z x-(*G=F))i=*G^8^y;}else v u,5);v u, 1);}}
| | | | |
P.S. Про все версии шахматных микропрограмм от Оскара Толедо Гутьерреса: http://www.nanochess.org/chess.htmlP.P.S. А ещё он выпустил книжку в 2014 году с 180 страницами комментариев к своему коду http://www.lulu.com/shop/oscar-toledo-gutierrez/toledo-nanochess-the-commented-source-code/hardcover/product-21429040.htmlhttp://www.amazon.com/Toledo-Nanochess-Commented-Source-Code/dp/1304864375
|
28 Jan 2016 13:29 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22571 Location: Silicon Valley
|
Пропустил исходник через сишный препроцессор и вручную причесал: | | | | Code: char*l="ustvrtsuqqqqqqqqyyyyyyyy}{|~z|{}" " 76Lsabcddcba .pknbrq PKNBRQ ?A6J57IKJT576,+-48HLSU";
B,i,y,u,b,I[411],*G=I,x=10,z=15,M=1e4;
X(w,c,h,e,S,s) { int t,o,L,E,d,O=e,N=-M*M,K=78-h<<x,p,*g,n,*m,A,q,r,C,J,a=y?-x:x; y^=8; G++; d=w||s&&s>=h&&X(0,0,0,21, 0,0)>M; do { if(o=I[p=O]) { q=o&z^y; if(q<7) { A=q--&2?8:4; C=o-9&z?q["& .$ "]:42; do { r=I[p+=C[l]-64]; if(!w|p==w) { g=q|p+a-S?0:I+S; if(!r&(q|A<3||g)||(r+1&z^y)>9&&q|A>2) { if(m=!(r-2&7)) return --G,y^=8,G[1]=O,K; J=n=o&z; E=I[p-a]&z; t=q|E-7?n:(n+=2,6^y); while(n<=t) { L=r?l[r&7]*9-189-h-q:0; if(s) L+=(1-q?l[p/x+5]-l[O/x+5]+l[p%x+6]*-~!q-l[O%x+6]+o/16*8:!!m*9)+(q?0:!(I[p-1]^n)+!(I[p+1]^n)+l[n&7]*9-386+!!g*99+(A<2))+!(E^y^9); if(s>h||1<s&s==h&&L>z|d) { p[I]=n,O[I]=m?*g=*m,*m=0:g?*g=0:0; L-=X(s>h|d?0:p,L-N,h+1,G[1],J=q|A>1?0:p,s); if(!(h||s-1|B-O|i-n|p-b|L<-M)) return--G,y^=8,y^=8,u=J; J=q-1|A<7||m||!s|d|r|o<z||X(0,0,0,21, 0,0)>M; O[I]=o; p[I]=r; m?*m=*g,*g=0:g?*g=9^y:0; } if(L>N) { *G=O; if(s>1) { if(h&&c-L<0) return --G,y^=8,L; if(!h)i=n,B=O,b=p; } N=L; } n+=J||(g=I+p,m=p<O?g-3:g+2,*m<z|m[O-p]||I[p+=p-O]); } } } } while(!r&q>2||(p=O,q|A>2|o>z&!r&&++C*--A)); } } } while(++O>98?O=20:e-O); return --G,y^=8,N+M*M&&N>-K+1924|d?N:0; }
main() { while(++B<121) *G++=B/x%x<2|B%x<2?7:B/x&4?0:*l++&31; while(B=19) { while(B++<99)putchar(B%x?l[B[I]|16]:x); if(x-(B=getchar()&z)) { i=I[B+=(x-getchar()&z)*x]&z; b=getchar()&z; b+=(x-getchar()&z)*x; while(x-(*G=getchar()&z)) i=*G^8^y; } else X(0,0,0,21, u,5); X(0,0,0,21, u,1); } }
| | | | |
|
28 Jan 2016 14:07 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22571 Location: Silicon Valley
|
Интересно, что Toledo nanoChess включёна в регулярные тестовые соревнования шахматных движков: http://www.computerchess.org.uk/ccrl/404/Сейчас она (программа) там занимает 466-е место...
|
30 Jan 2016 16:33 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22571 Location: Silicon Valley
|
Получил книжку - читаю Там кроме nanochess все другие его шахматные программки напечатаны
|
14 Feb 2016 09:17 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22571 Location: Silicon Valley
|
Добавил вокруг доски буквы A-H и цифры 1-8, а то тяжко было каждый раз ходы делать, вычисляя позицию: | | | | Code: #include <stdio.h>
char*l="ustvrtsuqqqqqqqqyyyyyyyy}{|~z|{} 76Lsabcddcba .pknbrq PKNBRQ ?A6J57IKJT576,+-48HLSU";
int B,i,y,u,b,I[411],*G=I,x=10,z=15,M=1e4;
X(w,c,h,e,S,s) { int t,o,L,E,d,O=e,N=-M*M,K=78-h<<x,p,*g,n,*m,A,q,r,C,J,a=y?-x:x; y^=8; G++; d=w||s&&s>=h&&X(0,0,0,21, 0,0)>M; do { if(o=I[p=O]) { q=o&z^y; if(q<7) { A=q--&2?8:4; C=o-9&z?q["& .$ "]:42; do { r=I[p+=C[l]-64]; if(!w|p==w) { g=q|p+a-S?0:I+S; if(!r&(q|A<3||g)||(r+1&z^y)>9&&q|A>2) { if(m=!(r-2&7)) return --G,y^=8,G[1]=O,K; J=n=o&z; E=I[p-a]&z; t=q|E-7?n:(n+=2,6^y); while(n<=t) { L=r?l[r&7]*9-189-h-q:0; if(s) L+=(1-q?l[p/x+5]-l[O/x+5]+l[p%x+6]*-~!q-l[O%x+6]+o/16*8:!!m*9)+(q?0:!(I[p-1]^n)+!(I[p+1]^n)+l[n&7]*9-386+!!g*99+(A<2))+!(E^y^9); if(s>h||1<s&s==h&&L>z|d) { p[I]=n,O[I]=m?*g=*m,*m=0:g?*g=0:0; L-=X(s>h|d?0:p,L-N,h+1,G[1],J=q|A>1?0:p,s); if(!(h||s-1|B-O|i-n|p-b|L<-M)) return --G,y^=8,y^=8,u=J; J=q-1|A<7||m||!s|d|r|o<z||X(0,0,0,21, 0,0)>M; O[I]=o; p[I]=r; m?*m=*g,*g=0:g?*g=9^y:0; } if(L>N) { *G=O; if(s>1) { if(h&&c-L<0) return --G,y^=8,L; if(!h)i=n,B=O,b=p; } N=L; } n+=J||(g=I+p,m=p<O?g-3:g+2,*m<z|m[O-p]||I[p+=p-O]); } } } } while(!r&q>2||(p=O,q|A>2|o>z&!r&&++C*--A)); } } } while(++O>98?O=20:e-O); return --G,y^=8,N+M*M&&N>-K+1924|d?N:0; }
main() { while(++B<121) *G++=B/x%x<2|B%x<2?7:B/x&4?0:*l++&31; while(B=19) { #ifdef DEBUG FILE *f = fopen("out","at"); #endif printf(" | A B C D E F G H |\n-+-----------------+-"); while(B++<99) { #ifdef DEBUG fprintf(f,"%i %i %c\n",B,B%x,l[B[I]|16]); #endif if((B%x)==0) printf("\n%i|",10-B/x); else if((B%x)==9) printf(" |%i",10-B/x); else{putchar(' ');putchar(B%x?l[B[I]|16]:x);} } printf("\n-+-----------------+-\n | A B C D E F G H |\n>>>"); #ifdef DEBUG fclose(f); #endif if(x-(B=getchar()&z)) { i=I[B+=(x-getchar()&z)*x]&z; b=getchar()&z; b+=(x-getchar()&z)*x; while(x-(*G=getchar()&z)) i=*G^8^y; } else X(0,0,0,21, u,5); X(0,0,0,21, u,1); } }
| | | | |
процесс игры теперь выглядит так: P.S. Погонял тесты - когда функция возвращает кучу всего через запятую (типа такого return --G,y^=8,N+M*M&&N>-K+1924|d?N:0;), а с той стороны принимают только один int, то в него записывается последнее из списка (т.е. N+M*M&&N>-K+1924|d?N:0)
|
17 Feb 2016 14:26 |
|
|
|
Page 1 of 1
|
[ 5 posts ] |
|
Who is online |
Users browsing this forum: No registered users and 51 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|