Jest to technika kodowania wszystkich kierunków jako tablic - każdej pary di[i],dj[i]
jest w innym kierunku.
Jeśli wyobrazimy sobie, że mamy kawałek w miejscu x, y i chcemy dodać do jego wartości x i y, aby przenieść go w pobliskie miejsce, 1,0 to wschód, -1,0 to zachód, 0,1 to południe, 0, -1 to północ i tak dalej.
(Tutaj powiedziałem, że górny lewy to 0,0, a dolny prawy to 4,4 i pokazałem, jaki ruch każdy indeks tablic wykona od centralnego punktu, X, na 2,2.)
.....
.536.
.1X0.
.724.
.....
Sposób, w jaki jest ustawiony, jeśli zrobisz ^1
( ^
będąc bitowym XOR) na indeksie, otrzymasz odwrotny kierunek - 0 i 1 to przeciwieństwa, 2 i 3 to przeciwieństwa i tak dalej. (Innym sposobem ustawienia jest pójście zgodnie z ruchem wskazówek zegara, zaczynając od północy - wtedy^4
dostajesz się w przeciwnym kierunku.)
Teraz możesz przetestować wszystkie kierunki z danego punktu, przechodząc nad di
i dj
tablice, zamiast wpisywać każdy kierunek w osobnej linii (w sumie osiem!) (Tylko nie zapomnij sprawdzić granic :))
diK
i djK
formuj wszystkie kierunki rycerzy zamiast wszystkich sąsiednich kierunków. Tutaj ^1
odwróci się wzdłuż jednej osi, ^4
da przeciwny skok skoczka.
.7.6.
0...5
..K..
1...4
.2.3.
d={0,1,0,-1,0}
do tego: pary przedmiotów, któred[i], d[i+1]
dają mi cztery główne kierunki.