Javascript og sjakk

Utfordringen: Kan du slå 1024 byte Javascript i sjakk?

Hvor vanskelig kan det være å slå en datamaskin i sjakk? Spesielt hvis datamaskinen bare har noen få linjer med kode å starte fra. Føler du deg skarp nok til å teste «The Kilobyte's Gambit»?

Sjakkprogrammet bruker bare 1K, og er dermed av det svært minimalistiske slaget.
Sjakkprogrammet bruker bare 1K, og er dermed av det svært minimalistiske slaget.

Hvor vanskelig kan det være å slå en datamaskin i sjakk? Spesielt hvis datamaskinen bare har noen få linjer med kode å starte fra. Føler du deg skarp nok til å teste «The Kilobyte's Gambit»?

  • Spill

Sjakk har eksistert i rundt 1500 år og er et av de eldste og mest mytiske spillene vi har. Sjakkdatamaskiner har ikke like lang historie.

Den første moderne sjakkspillmaskinen kan sies å ha blitt introdusert på 1950-tallet da de første algoritmene som beskrev spillet for dataprogrammer ble utviklet.

Spol tiden litt fremover. I 1997 får Deep Blue overskrifter som maskinen som knakk en verdensmester i sjakk.

I dag er det ingen tvil om at datamaskiner og maskinlæring kan trumfe mennesker - så da har programskapere siktet seg mot en ny gren: nemlig å kunne skrive et så minimalistisk sjakkprogram som mulig.

Program på 1K

En av de største i dette området er programmereren Óscar Teledo G som har satt sammen programmet 1K Chess. Et spill som akkurat som navnet antyder, bare trenger 1 kilobyte for å fungere. Nå har skaperen Matt Round tatt Mr. Toledo-koden og kastet den i Javascript for å få et grafisk utseende som den populære Netflix-serien Queens Gambit.

Er du nysgjerrig på hvordan 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)}

1K holder nok ikke til å slå Magnus Carlsen. Sluttstillingen i parti mellom TUs redaktør og 1K Chess (1-0). Ikke et parti for historiebøkene.
1K holder nok ikke til å slå Magnus Carlsen. Sluttstillingen i parti mellom TUs redaktør Ole Petter Pedersen og 1K Chess (1-0). Ikke et parti for historiebøkene.

Mer enn dette er ikke nødvendig, og koden ovenfor inkluderer alt fra hvordan et spill er satt opp, hvilke trekk som er tillatt og hvordan datamaskinen skal handle. Det eneste programmet ikke inneholder, er å flagge for når det blir sjakk matt / remis.

– Ved å se fire trekk fram tar et poengsystem hensyn til faktorer som verdien av brikker, den relative styrken på ulike deler av brettet og hvor fort det kan vinne. Det kaller opp en ekstern funksjon for å oppdatere stillingen og displaykoden kaller opp funksjoner som utløser bevegelser, skriver forfatteren som en forklaring på spillet sitt.

Du kan gå til denne siden for å spille.

 

Artikkelen ble først publisert av Ny Teknik.

Les også

Kommentarer (3)

Kommentarer (3)
Til toppen