Populärteknik

Utmaningen: Kan du slå 1024 byte Javascript i schack?

Hur svårt kan det vara att slå en dator i schack? Särskilt om datorn bara har ett par rader kod att utgå ifrån. Känner du dig tillräckligt vass för att testa ”The Kilobyte’s Gambit”?

Publicerad

Schack har funnits i runt 1500 år och är ett av de äldsta samt mest mytomspunna spel vi har. Schackdatorer kanske inte har lika lång historia.

Den första moderna schackspelande maskinen kan sägas ha introducerats på 50-talet då de första algoritmerna som beskrev spelet för datorprogram togs fram.

Spola fram tiden något. 1997 får Deep Blue rubriker som maskinen som knäckte en schackvärldsmästare.

Nuförtiden är det inget snack om att datorer och ai kan övertrumfa människor – så då har programskapare siktat in sig på en ny gren: nämligen att kunna skriva ett så minimalistiskt schackprogram som möjligt.

En av storheterna i det här gebitet är programmeraren Óscar Teledo G som har plitat ihop programmet 1K Chess. Ett spel som precis som namnet antyder endast behöver 1 kb för att fungera. Nu har kreatören Matt Round tagit herr Toledos kod och kastat in det i Javascript för att få en grafisk framtoning som den populära Netflix-serien Queens Gambit.

Nyfiken på hur koden ser ut?

”for(B=y=u=b=0,x=10,z=15,I=[],l=[];l[B]=("ustvrtsuqqqqqqqq"+"yyyyyyyy}{|~z|{}@G@TSb~?A6J57IKJT576,+-48HLSUmgukgg OJNMLK  IDHGFE").charCodeAt(B)-64,B++<120;I[B-1]=B%x?B/x%x<2|B%x<2?7:B/x&4?0:l[u++]:7);X=(c,h,e,S,s)=>{c^=8;for(var T,o,L,E,D,O=20,G,N=-1e8,n,g,d=S&&X(c,0)>1e4,C,R,A,K=78-h<<9,a=c?x:-x;++O<99;)if((o=I[T=O])&&(G=o&z^c)<7){A=G--&2?8:4;C=9-o&z?l[61+G]:49;do{R=I[T+=l[C]];g=D=G|T+a-e?0:e;if(!R&&(G||A<3||g)||(1+R&z^c)>9&&G|A>2){if(!(2-R&7))return K;for(E=n=G|I[T-a]-7?o&z:6^c;E;E=!E&&!d&&!(g=T,D=T<O?g-3:g+2,I[D]<z|I[D+O-T]|I[T+=T-O])){L=(R&&l[R&7|32]*2-h-G)+(G?0:n-o&z?110:(D&&14)+(A<2)+1);if(S>h||1<S&S==h&&L>2|d){I[T]=n,I[g]=I[D],I[O]=D?I[D]=0:0;L-=X(c,h+1,E=G|A>1?0:T,S,L-N);if(!(h||S-1|B-O|T-b|L<-1e4))return W(I,B=b,c,y=E);E=1-G|A<7|D|!S|R|o<z||X(c,0)>1e4;I[O]=o;I[T]=R;I[D]=I[g];D?I[g]=G?0:9^c:0}if(L>N||!h&L==N&&Math.random()<.5)if(N=L,S>1)if(h?s-L<0:(B=O,b=T,0))return N}}}while(!R&G>2||(T=O,G|A>2|z<o&!R&&++C*—A))}return-K+768<N|d&&N};Y=(V)=>{X(8,0,y,V);X(8,0,y,1)};Z=(U)=>{b=U;I[b]&8?W(I,B=b):X(0,0,y,1)}”

Mer än så här behövs inte, och i koden ovan så ingår allt från hur ett spel sätts upp, vilka drag som är tillåtna och hur datorn ska agera. Det enda som programmet inte innehåller är att flagga för när det blir schackmatt/remi.

”Genom att titta fyra steg framåt, ett poängsystem tar med faktorer som värdet på pjäser, de relativa styrkorna på olika delar av brädet och hur snabbt det kan vinna. Det påkallar en extern funktion för att uppdatera displayen och display-koden påkallar funktioner som triggar drag”, skriver upphovsmannen som förklaring till sitt spel.