Скажем, вы пытаетесь посетить массив в шахматном порядке:
0 1 2 3 4 5 6 7
0 o • o • o • o •
1 • o • o • o • o
2 o • o • o • o •
3 • o • o • o • o
4 o • o • o • o •
5 • o • o • o • o
6 o • o • o • o •
7 • o • o • o • o
Итак, предположим, что вы посещаете черные элементы здесь и добавляете всех 4 белых соседей.
Вы не можете сделать это по краям или углам, потому что там только 3 и 2 белых соседа соответственно.Таким образом, вы должны добавить все 3 белых по краям и 0 для доступа за пределы.
Неэффективный способ сделать это - сделать что-то вроде
at each element
if element to the right is not out of bounds ...
Но я не хочу делать такие проверки.
Итак, я сделал разрезание цикла на полоски, так что:
at each element ON LEFT EDGE
add 3 elements i know are in bounds (right, up, down)
Затем специальный случай дляочень углы
at top left corner..
add 2 elements i know are in bounds (right, down)
Так что это закончилось очень длинным кодом кода, который работает, но не имеет проверки ограничений.Я ищу способ сократить длину блока кода и сделать его более понятным.
Какие-нибудь хитрости?