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}

code