battlesnake 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -0
- data/Gemfile.lock +1 -1
- data/lib/battlesnake/board.rb +60 -3
- data/lib/battlesnake/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f8520692a2004710c7e4c597c44248819caf6b7f5f864985a70a6ab3fa85e44
|
4
|
+
data.tar.gz: 66547ac978ce2a6c48a575d9bc6d6b57630c3e980445882278fef94c08a0b466
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c37667f70cfcc7ad968e4563341b00cb46f336f3ffe86a14a7fd8d0112fccea55cb545479d8e7423c7377c1293a45a7406a024ac1380e18eff62a40325a78ca
|
7
|
+
data.tar.gz: 55ea92d1d7e6e0ae6d163a23f7d517c3144e9adec7c312615294a6f33613d95830dea08b5865249674239f046a08e54e77a1baa5ecc6911daab1ae22ba24c229
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,31 @@
|
|
1
1
|
# Battlesnake
|
2
2
|
|
3
|
+
## 0.1.5 (2023-01-04)
|
4
|
+
|
5
|
+
### Added
|
6
|
+
|
7
|
+
- Board
|
8
|
+
- #available_neighbors(location) returns neighboring locations available for moving.
|
9
|
+
- #flood_fills(location) returns hash of reachable locations by direction
|
10
|
+
|
11
|
+
### Changed
|
12
|
+
|
13
|
+
- Board
|
14
|
+
- #find_path(from, to, max_distance: nil) skips recursion if manhattan distance is greater than
|
15
|
+
max_distance.
|
16
|
+
|
17
|
+
## 0.1.4 (2023-01-03)
|
18
|
+
|
19
|
+
### Added
|
20
|
+
|
21
|
+
- Board
|
22
|
+
- #food?(location) returns true if location is food.
|
23
|
+
|
24
|
+
### Changed
|
25
|
+
|
26
|
+
- Board
|
27
|
+
- #occupied_locations no longer includes food.
|
28
|
+
|
3
29
|
## 0.1.3 (2022-11-07)
|
4
30
|
|
5
31
|
### Added
|
data/Gemfile.lock
CHANGED
data/lib/battlesnake/board.rb
CHANGED
@@ -41,12 +41,13 @@ module Battlesnake
|
|
41
41
|
end
|
42
42
|
|
43
43
|
##
|
44
|
-
# List of all occupied locations on the board; snakes,
|
44
|
+
# List of all occupied locations on the board; snakes, hazards, etc.
|
45
|
+
# Does NOT include food, since we don't want to avoid that.
|
45
46
|
#
|
46
47
|
# @return [Array<Location>] list of occupied locations
|
47
48
|
def occupied_locations
|
48
49
|
return @occupied_locations if defined?(@occupied_locations)
|
49
|
-
@occupied_locations = snakes.map(&:body).flatten +
|
50
|
+
@occupied_locations = snakes.map(&:body).flatten + hazards
|
50
51
|
end
|
51
52
|
|
52
53
|
##
|
@@ -79,6 +80,16 @@ module Battlesnake
|
|
79
80
|
on_board?(location) && !occupied?(location)
|
80
81
|
end
|
81
82
|
|
83
|
+
##
|
84
|
+
# Whether the supplied location is food.
|
85
|
+
#
|
86
|
+
# @param [Location] location being tested for availability.
|
87
|
+
#
|
88
|
+
# @return [Boolean] true if location is food.
|
89
|
+
def food?(location)
|
90
|
+
food.include?(location)
|
91
|
+
end
|
92
|
+
|
82
93
|
##
|
83
94
|
# List of directions (up, down, left, right) available for moving from given _Location_.
|
84
95
|
#
|
@@ -91,6 +102,33 @@ module Battlesnake
|
|
91
102
|
end
|
92
103
|
end
|
93
104
|
|
105
|
+
##
|
106
|
+
# List of neighboring locations available for moving from given _Location_.
|
107
|
+
#
|
108
|
+
# @param [Location] location from which moving is desired.
|
109
|
+
#
|
110
|
+
# @return [Array<Location>] list of locations
|
111
|
+
def available_neighbors(location)
|
112
|
+
Location::DIRECTIONS.map{ |direction| location.move(direction) }.select{ |l| available?(l) }
|
113
|
+
end
|
114
|
+
|
115
|
+
##
|
116
|
+
# List reachable locations in each orthogonal direction.
|
117
|
+
#
|
118
|
+
# @return [Hash] hash of reachable locations by direction
|
119
|
+
def flood_fills(location)
|
120
|
+
fills = Location::DIRECTIONS.map{ |direction| [direction, []]}.to_h
|
121
|
+
|
122
|
+
available_directions(location).each do |direction|
|
123
|
+
@flood_fill_checked = []
|
124
|
+
@flood_fill_matches = []
|
125
|
+
|
126
|
+
fills[direction] = flood_fill(location.move(direction)) #.uniq(&:coords)
|
127
|
+
end
|
128
|
+
|
129
|
+
fills
|
130
|
+
end
|
131
|
+
|
94
132
|
##
|
95
133
|
# List of valid, consecutive paths from one location to the next. Paths may not:
|
96
134
|
#
|
@@ -106,8 +144,11 @@ module Battlesnake
|
|
106
144
|
#
|
107
145
|
# @return [Array<Path>] a list of paths, which themselves are lists of consecutive, valid locations.
|
108
146
|
def find_path(from, to, max_distance: nil)
|
147
|
+
distance = from.distance(to)
|
148
|
+
return nil if max_distance && max_distance < distance
|
149
|
+
|
109
150
|
@paths = []
|
110
|
-
@ideal_path_size =
|
151
|
+
@ideal_path_size = distance + 1
|
111
152
|
@shortest_path_size = max_distance || @ideal_path_size
|
112
153
|
@ideal_path_size_found = false
|
113
154
|
|
@@ -116,6 +157,22 @@ module Battlesnake
|
|
116
157
|
@paths.select{ |path| path.size == @shortest_path_size }.first
|
117
158
|
end
|
118
159
|
|
160
|
+
private
|
161
|
+
|
162
|
+
def flood_fill(location)
|
163
|
+
@flood_fill_checked << location.coords
|
164
|
+
|
165
|
+
unless occupied?(location)
|
166
|
+
@flood_fill_matches << location
|
167
|
+
|
168
|
+
available_neighbors(location).each do |neighbor|
|
169
|
+
flood_fill(neighbor) unless @flood_fill_checked.include?(neighbor.coords)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
@flood_fill_matches
|
174
|
+
end
|
175
|
+
|
119
176
|
def recursive_paths(from, to, path)
|
120
177
|
head = path.last
|
121
178
|
|
data/lib/battlesnake/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: battlesnake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jaime Bellmyer
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-01-
|
11
|
+
date: 2023-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|