Dict vs %
В предыдущей версии левостороннего обхода лабиринта тяжелую работу выполнял %. Это гарантирует, что когда мы поворачиваем налево или направо, наше направление (числа 0,1,2,3, хранящиеся в dc) остается в диапазоне 0-3. Можно использовать dict, чтобы напрямую сопоставить текущее направление со следующим после поворота CV или CCV.
Давайте сравним:
старый
dc = 0
while get_entity_type() != Entities.Treasure:
dc = (dc + 1) % 4
while not can_move(d[dc]):
dc = (dc - 1) % 4
move(d[dc])
новый
dc = East
while get_entity_type() != Entities.Treasure:
dc = l[dc]
while not move(dc):
dc = r[dc]
Еще один трюк — move ничего не делает (и возвращает False), когда перед нами стена. Итак, мы можем объединить can_move и move.
Конечно, это работает, потому что мы ввели словари:
l = {East:North, North:West, West:South, South:East}
r = {East:South, South:West, West:North, North:East}
