Skip to content

mariuszmikolajczak/invaders-scanner

Repository files navigation

Invaders scanner

Rspec GitHub Super-Linter

Task description click here.

Usage

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

Notes

  • 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.

Development

  • Running tests bundle exec rspec generates SimpleCov report in coverage directory.
  • Rubocop linter bundle exec rubocop

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages