Task description click here.
Example script bin/example_usage.rb
contains example patterns from the task description.
Invader and Search area are the same objects.
radar_example = '' # Loaded from file or something
string = <<-PATTERN
--o-----o--
---o---o---
--ooooooo--
-oo-ooo-oo-
ooooooooooo
o-ooooooo-o
o-o-----o-o
---oo-oo---
PATTERN
invader = InvadersScanner::Area.from_string(string) # Invader definition
search_area = InvadersScanner::Area.from_string(radar_example) # Radar example definition
# Scanning
# default minimum_similarity is 80
scanner = InvadersScanner::Scanner.new(input: search_area, search_pattern: invader, minimum_similarity: 70)
matches = scanner.scan # Scan returns array of Match instances
matches.each do
match.similarity # Similarity in %
match.coordinates # Array of coordinates [start_coordinate, end_coordinate]
end
- Current algorithm doesnt check partial patterns on edges, eg. Search pattern:
--o-----o--
---o---o---
--ooooooo--
-oo-ooo-oo-
ooooooooooo
o-ooooooo-o
o-o-----o-o
---oo-oo---
Looking in area:
-oo-ooo-oo-
ooooooooooo
o-ooooooo-o
o-o-----o-o
---oo-oo---
-----------
-----------
-----------
- Searching algorithm is based on brute force, chunks of size pattern are taken from input and compared, after comparing next chunk is taken if fits in area.
- Running tests
bundle exec rspec
generates SimpleCov report incoverage
directory. - Rubocop linter
bundle exec rubocop