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

2021-03-23 11:14  
Nu tävlar programskapare om att kunna skriva ett så minimalistiskt schackprogram som möjligt. Foto: Óscar Teledo G

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”?

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.

Läs mer: Antikytheramekanismens sista hemligheter kan vara avslöjade

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.

Felix Björklund

Mer om: Schackdator Spel

Kommentarer

Välkommen att säga din mening på Ny Teknik.

Principen för våra regler är enkel: visa respekt för de personer vi skriver om och andra läsare som kommenterar artiklarna. Alla kommentarer modereras efter publiceringen av Ny Teknik eller av oss anlitad personal.

  Kommentarer

Debatt

Läs mer