maze-solver 1.0.3 → 1.0.4
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 +7 -0
- data/.travis.yml +3 -4
- data/Gemfile +5 -10
- data/README.md +8 -3
- data/Rakefile +4 -1
- data/bin/{maze-solver → maze_solver} +1 -1
- data/lib/maze_solver.rb +2 -2
- data/lib/maze_solver/version.rb +2 -1
- data/maze_solver.gemspec +3 -2
- data/spec/maze_solver_spec.rb +17 -11
- data/spec/spec_helper.rb +2 -2
- metadata +15 -17
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 65b2b4ce587ffb4460108ae78224764f56c4b7e0
|
4
|
+
data.tar.gz: d3e457a32167c377d2ae1cfcbbbed1a61660c0be
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fb92956349f9510af3b887cc6d208a51b427763bda1325a8968d54fd20c65e2ae29613be42cbec309aeabdc16d90323b822e18266e6345a4160c2d86c5b6413f
|
7
|
+
data.tar.gz: 82aca0db7cc21e38cc64f503133226e7f01522ddede93bf607ab1af8a519fad4ab63598222778b9807c8c75c70b747aaa528a2251d5899586caa662d6143f620
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -4,16 +4,11 @@ source 'https://rubygems.org'
|
|
4
4
|
|
5
5
|
gemspec
|
6
6
|
|
7
|
-
gem 'cane',
|
8
|
-
gem 'churn',
|
7
|
+
gem 'cane', require: false
|
8
|
+
gem 'churn', require: false
|
9
9
|
gem 'coveralls', require: false
|
10
|
-
gem 'json'
|
10
|
+
gem 'json'
|
11
11
|
gem 'rake'
|
12
12
|
gem 'rspec'
|
13
|
-
|
14
|
-
|
15
|
-
gem 'racc'
|
16
|
-
gem 'iconv'
|
17
|
-
gem 'rubinius-coverage'
|
18
|
-
gem 'rubysl', '~> 2.0'
|
19
|
-
end
|
13
|
+
gem 'rspec-its'
|
14
|
+
gem 'rubocop'
|
data/README.md
CHANGED
@@ -1,8 +1,13 @@
|
|
1
|
-
# Maze Solver
|
1
|
+
# Maze Solver
|
2
|
+
[](https://travis-ci.org/johnsyweb/ruby_maze_solver)
|
3
|
+
[](http://badge.fury.io/rb/maze-solver)
|
4
|
+
[](https://gemnasium.com/johnsyweb/ruby_maze_solver)
|
5
|
+
[](https://codeclimate.com/github/johnsyweb/ruby_maze_solver)
|
6
|
+
[](https://coveralls.io/r/johnsyweb/ruby_maze_solver?branch=master)
|
2
7
|
|
3
8
|
Written as an exercise in applying Ruby, this project solves mazes:
|
4
9
|
|
5
|
-
|
10
|
+
maze_solver etc/demo.maze 18 0 38 0
|
6
11
|
About to solve your 40x14 maze from (18, 0) to (38,0).
|
7
12
|
GO!
|
8
13
|
Solved!
|
@@ -31,7 +36,7 @@ Maze Solver is available from
|
|
31
36
|
|
32
37
|
## Usage
|
33
38
|
|
34
|
-
$
|
39
|
+
$ maze_solver filename start_x start_y end_x end_y
|
35
40
|
|
36
41
|
## Contributing
|
37
42
|
|
data/Rakefile
CHANGED
@@ -2,9 +2,12 @@
|
|
2
2
|
|
3
3
|
require 'bundler/gem_tasks'
|
4
4
|
require 'rspec/core/rake_task'
|
5
|
+
require 'rubocop/rake_task'
|
6
|
+
|
7
|
+
RuboCop::RakeTask.new
|
5
8
|
|
6
9
|
RSpec::Core::RakeTask.new('spec')
|
7
|
-
task default: [:spec]
|
10
|
+
task default: [:spec, :rubocop]
|
8
11
|
|
9
12
|
begin
|
10
13
|
require 'cane/rake_task'
|
@@ -7,7 +7,7 @@ require 'maze_solver'
|
|
7
7
|
|
8
8
|
def main(filename, start_x, start_y, end_x, end_y)
|
9
9
|
maze = MazeSolver::MazeSolver.new(from_file: filename)
|
10
|
-
puts "About to solve your #{maze.width}x#{maze.height} maze from "
|
10
|
+
puts "About to solve your #{maze.width}x#{maze.height} maze from " \
|
11
11
|
"(#{start_x}, #{start_y}) to (#{end_x},#{end_y})."
|
12
12
|
puts 'GO!'
|
13
13
|
if maze.solve start_x.to_i, start_y.to_i, end_x.to_i, end_y.to_i
|
data/lib/maze_solver.rb
CHANGED
@@ -24,7 +24,7 @@ module MazeSolver
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def width
|
27
|
-
grid.map
|
27
|
+
grid.map(&:length).max
|
28
28
|
end
|
29
29
|
|
30
30
|
def visitable?(x, y)
|
@@ -71,7 +71,7 @@ module MazeSolver
|
|
71
71
|
|
72
72
|
def from_file(filename)
|
73
73
|
grid = File.open(filename, 'r').readlines
|
74
|
-
grid.each
|
74
|
+
grid.each(&:strip!)
|
75
75
|
end
|
76
76
|
|
77
77
|
private
|
data/lib/maze_solver/version.rb
CHANGED
data/maze_solver.gemspec
CHANGED
@@ -13,7 +13,8 @@ Gem::Specification.new do |gem|
|
|
13
13
|
gem.homepage = 'https://github.com/johnsyweb/ruby_maze_solver#readme'
|
14
14
|
|
15
15
|
gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
16
|
-
gem.executables = gem.files.grep(
|
17
|
-
gem.test_files = gem.files.grep(
|
16
|
+
gem.executables = gem.files.grep(/^bin\//).map { |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(/^(test|spec|features)\//)
|
18
18
|
gem.require_paths = ['lib']
|
19
|
+
gem.licenses = 'MIT'
|
19
20
|
end
|
data/spec/maze_solver_spec.rb
CHANGED
@@ -4,7 +4,8 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
describe MazeSolver::MazeSolver do
|
6
6
|
context 'a simple 8 x 3 maze' do
|
7
|
-
let(:grid) do
|
7
|
+
let(:grid) do
|
8
|
+
<<-GRID
|
8
9
|
********
|
9
10
|
|
10
11
|
********
|
@@ -13,8 +14,8 @@ GRID
|
|
13
14
|
|
14
15
|
subject(:maze) { described_class.new(from_grid: grid) }
|
15
16
|
|
16
|
-
its(:width) { should
|
17
|
-
its(:height) { should
|
17
|
+
its(:width) { should be 8 }
|
18
|
+
its(:height) { should be 3 }
|
18
19
|
|
19
20
|
it 'is possible to visit an empty space' do
|
20
21
|
expect(maze).to be_visitable(0, 1)
|
@@ -40,16 +41,16 @@ GRID
|
|
40
41
|
end
|
41
42
|
|
42
43
|
it 'is soluble' do
|
43
|
-
expect(maze.solve(0, 1, 7, 1)).to
|
44
|
+
expect(maze.solve(0, 1, 7, 1)).to be true
|
44
45
|
end
|
45
46
|
|
46
47
|
it 'is soluble backwards' do
|
47
|
-
expect(maze.solve(7, 1, 0, 1)).to
|
48
|
+
expect(maze.solve(7, 1, 0, 1)).to be true
|
48
49
|
end
|
49
50
|
|
50
51
|
it 'is printable' do
|
51
|
-
expect(maze.to_s).to eq "********\n"
|
52
|
-
" \n"
|
52
|
+
expect(maze.to_s).to eq "********\n" \
|
53
|
+
" \n" \
|
53
54
|
"********\n"
|
54
55
|
end
|
55
56
|
|
@@ -80,7 +81,7 @@ GRID
|
|
80
81
|
subject(:maze) { described_class.new(from_grid: grid) }
|
81
82
|
|
82
83
|
it 'is soluble' do
|
83
|
-
expect(maze.solve(0, 1, 3, 3)).to
|
84
|
+
expect(maze.solve(0, 1, 3, 3)).to be true
|
84
85
|
end
|
85
86
|
end
|
86
87
|
|
@@ -101,7 +102,7 @@ GRID
|
|
101
102
|
subject(:maze) { described_class.new(from_grid: grid) }
|
102
103
|
|
103
104
|
it 'is insoluble' do
|
104
|
-
expect(maze.solve(0, 1, 3, 3)).to
|
105
|
+
expect(maze.solve(0, 1, 3, 3)).to be false
|
105
106
|
end
|
106
107
|
end
|
107
108
|
|
@@ -119,11 +120,16 @@ GRID
|
|
119
120
|
)
|
120
121
|
end
|
121
122
|
|
122
|
-
before
|
123
|
+
before do
|
124
|
+
expect(File)
|
125
|
+
.to receive(:open)
|
126
|
+
.with('test.maze', 'r')
|
127
|
+
.and_return(test_maze)
|
128
|
+
end
|
123
129
|
|
124
130
|
it 'is creatable' do
|
125
131
|
maze = MazeSolver::MazeSolver.new(from_file: 'test.maze')
|
126
|
-
expect(maze.solve(18, 0, 12, 6)).to
|
132
|
+
expect(maze.solve(18, 0, 12, 6)).to be true
|
127
133
|
end
|
128
134
|
end
|
129
135
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,12 +3,12 @@
|
|
3
3
|
require 'coveralls'
|
4
4
|
Coveralls.wear!
|
5
5
|
|
6
|
-
require 'rubygems'
|
7
6
|
require 'bundler/setup'
|
8
7
|
require 'maze_solver'
|
8
|
+
require 'rspec/its'
|
9
|
+
require 'rubygems'
|
9
10
|
|
10
11
|
RSpec.configure do |config|
|
11
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
12
12
|
config.run_all_when_everything_filtered = true
|
13
13
|
config.order = 'random'
|
14
14
|
end
|
metadata
CHANGED
@@ -1,33 +1,32 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maze-solver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Pete Johns
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-12-01 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description: A gem to solve a 2D maze.
|
15
14
|
email:
|
16
15
|
- paj-github@johnsy.com
|
17
16
|
executables:
|
18
|
-
-
|
17
|
+
- maze_solver
|
19
18
|
extensions: []
|
20
19
|
extra_rdoc_files: []
|
21
20
|
files:
|
22
|
-
- .coveralls.yml
|
23
|
-
- .gitignore
|
24
|
-
- .rspec
|
25
|
-
- .travis.yml
|
21
|
+
- ".coveralls.yml"
|
22
|
+
- ".gitignore"
|
23
|
+
- ".rspec"
|
24
|
+
- ".travis.yml"
|
26
25
|
- Gemfile
|
27
26
|
- LICENSE.txt
|
28
27
|
- README.md
|
29
28
|
- Rakefile
|
30
|
-
- bin/
|
29
|
+
- bin/maze_solver
|
31
30
|
- etc/demo.maze
|
32
31
|
- lib/maze_solver.rb
|
33
32
|
- lib/maze_solver/version.rb
|
@@ -35,30 +34,29 @@ files:
|
|
35
34
|
- spec/maze_solver_spec.rb
|
36
35
|
- spec/spec_helper.rb
|
37
36
|
homepage: https://github.com/johnsyweb/ruby_maze_solver#readme
|
38
|
-
licenses:
|
37
|
+
licenses:
|
38
|
+
- MIT
|
39
|
+
metadata: {}
|
39
40
|
post_install_message:
|
40
41
|
rdoc_options: []
|
41
42
|
require_paths:
|
42
43
|
- lib
|
43
44
|
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
-
none: false
|
45
45
|
requirements:
|
46
|
-
- -
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '0'
|
49
49
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
50
|
requirements:
|
52
|
-
- -
|
51
|
+
- - ">="
|
53
52
|
- !ruby/object:Gem::Version
|
54
53
|
version: '0'
|
55
54
|
requirements: []
|
56
55
|
rubyforge_project:
|
57
|
-
rubygems_version:
|
56
|
+
rubygems_version: 2.2.2
|
58
57
|
signing_key:
|
59
|
-
specification_version:
|
58
|
+
specification_version: 4
|
60
59
|
summary: Written as an exercise
|
61
60
|
test_files:
|
62
61
|
- spec/maze_solver_spec.rb
|
63
62
|
- spec/spec_helper.rb
|
64
|
-
has_rdoc:
|