? @facing : most_right(state, tiles)] end def in_space(state, tiles) surrounding(state.you.position).all? do |tile| tile.type != 'wall' end end def most_right(state, tiles) face_index = DIRECTIONS.index @facing (-1..2).find_index do |offset| next_dir = DIRECTIONS[(face_index + offset) % 4] free(apply_move(next_dir, state.you.position), tiles) && next_dir end end end THE WALKER Thursday, 13 December 12
end def targetable?(square, state) square.is_stash && square.position != state.you.stash.position && !square.treasures.empty? end end class Seeker # some caching logic elided def choose(state, tiles) return nil if abort?(state, tiles) tiles.find do |pos, tile| targetable?(tile, state) && @gridsearch.move(tiles, state.you.position, pos) end end end Thursday, 13 December 12