Це техніка кодування всіх напрямків як масивів - кожна пара di[i],dj[i]
має різний напрямок.
Якщо ми уявимо, що у нас є фрагмент у місці x, y, і ми хочемо додати його x та його значення y, щоб перемістити його в сусіднє місце, 1,0 - це схід, -1,0 - захід, 0,1 південь, 0, -1 - північ тощо.
(Тут я сказав, що верхній лівий - 0,0, а правий нижній - 4,4, і показано, який рух буде робити кожен індекс масивів від центральної точки, X, на 2,2.)
.....
.536.
.1X0.
.724.
.....
Як це налаштовано, якщо ви робите ^1
( ^
побіжно XOR) на індексі, ви отримуєте зворотний напрямок - 0 і 1 - це протилежності, 2 і 3 - протилежності тощо. (Ще один спосіб встановити це - рухатися за годинниковою стрілкою, починаючи з півночі - тоді ^4
ви отримуєте протилежний напрямок.)
Тепер ви можете протестувати всі напрямки з певної точки, перебираючи їх di
і dj
масиви, замість того, щоб виписувати кожен напрямок у своєму власному рядку (всього для восьми!) (Просто не забудьте зробити перевірку меж :))
diK
і djK
сформувати всі напрямки лицарів замість усіх сусідніх напрямків. Тут, ^1
перекинувшись по одній осі, ^4
дасть протилежний рицарський стрибок.
.7.6.
0...5
..K..
1...4
.2.3.
d={0,1,0,-1,0}
для цього: елементи пар дляd[i], d[i+1]
дають мені чотири кардинальні вказівки.