Obsah

Úloha 3

Šachová koncovka

Zadání

Limit: variabilní od 1s do 25s

Jak na to:

Overview

Implementace

Závisí na ukládání situací (uzlů):

Na zrychlení je potřeba mít předgenerované tabulky

Hash

Na zakodovani celé šachovnice do jednoho integeru v jave (32 bitů) by šlo něco takovýho:

//Čísla označují pozice na na šachovnici 0..6*0..6
//Pořadí jednotlivých figurek se nesmí měnit
//V co je proměněnej pěšák je vyjádřený proměnou mutace - stavy: 
//                 0(nic),1(dama),2(jezdec)   //Poupraveno - nesmí měnit na střelce
int BK=9,BV=23,Bp=7,CK=6,CV=40,mutace=0;
//Naskládám to tam odzadu
//Posun o 6 pozic tu je proto, že do 6 pozic nacpu číslo velké 0..63(šachovnice má 0..48,49)
int hash = mutace;
hash = (hash<<6) | BK;
hash = (hash<<6) | BV;
hash = (hash<<6) | Bp;
hash = (hash<<6) | CK;
hash = (hash<<6) | CV;
//A pak to zase vyzvednu, je potřeba vyzvedávat v opačném pořadí!
//Maska 63 je v binárním zápisu (26 nul)111111, aby se vytáhlo posledních 6 bitů 
CV = hash & 63;
hash = hash>>>6;
CK = hash & 63;
hash = hash>>>6;
Bp = hash & 63;
hash = hash>>>6;
BV = hash & 63;
hash = hash>>>6;
BK = hash & 63;
hash = hash>>>6;
mutace = hash & 3;
Generator tahů

Zkoušel si někdo udělat generátor tahů? Předpokládám že je nemožné ukládat si všechny možný tahy i v závislosti na rozestavění ostatních figurek - jestli blokují políčka. Jak se potom efektivně zjištuje například u střelce kam může a kam ne ?

Jediné co mě napadlo je zkusit cyklit od střelce směrem doleva nahoru, doprava nahoru atd. dokud nenarazí na jinou figurku/konec šachovnice. Tohle by šlo ještě vylepšit tím, že by se rovnou v poli reprezentujícím šachovnici označili pozice ostatních figurek a při tom cyklení by se jen koukalo jestli se nenarazilo na označený pole - odpadnou tak v nejhorším případě 4 testy na každé pole, bude je 1 test.

Generator tahů /poznamka/

No a hele tak jsem ohledne toho generovani tahu nasel neco v odkazu ze zadani tady , a napadlo mne, co teda udelat pro kazdou figurku boolean pole 14*14, ktery by se vzdycky posadilo na sachovnici tak, aby byla figurka na svym miste, cimz (po odecteni pripadu kde je neco v ceste) dostanem rovnou vsechny pozice figurky po tahu reprezentovany jednickou na sachovnici:

Pro pouziti v tomhle pripade by se jeste matice dala preskladat do pole (protoze sachovnice se reprezentuje vlastne v poli) a delat logickej and nad dvema polema..

Co myslite? nebo nekdo pouziva nejakej lepsi zpusob? JaRda