mars_rovers 0.0.1.1

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.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in mars_rovers.gemspec
4
+ gemspec
data/README ADDED
@@ -0,0 +1,33 @@
1
+ == MARS ROVERS
2
+
3
+ Plots the position of the squad of robotic rovers to be landed on a plateau on Mars by NASA
4
+
5
+ == INPUT
6
+ The first line of input is the upper-right coordinates of the plateau, the lower-left coordinates are assumed to be 0,0.
7
+ The rest of the input is information pertaining to the rovers that have been deployed. Each rover has two lines of input.
8
+ The first line gives the rover's position, and the second line is a series of instructions telling the rover how to explore the plateau.
9
+ The position is made up of two integers and a letter separated by spaces, corresponding to the x and y c o-ordinates and the
10
+ rover's orientation.
11
+ Each rover will be finished sequentially, which means that the second rover won't start to move until the first one has finished moving.
12
+
13
+ == OUTPUT
14
+ The output for each rover should be its final co-ordinates and heading.
15
+
16
+ == INPUT AND OUTPUT
17
+
18
+ Test Input:
19
+ 5 5
20
+ 1 2 N
21
+ LMLMLMLMM
22
+ 3 3 E
23
+ MMRMMRMRRM
24
+
25
+ Expected Output:
26
+ 1 3 N
27
+ 5 1 E
28
+
29
+ == INSTALLATION:
30
+ gem install mars_rovers
31
+
32
+ == COMMAND LINE:
33
+ mars_rovers plot -f [filename]
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/mars_rovers ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'mars_rovers/cli'
4
+ MarsRovers::CLI.start
@@ -0,0 +1,9 @@
1
+ Feature: Rover
2
+ In order to plot rover coordinates and heading
3
+ As a CLI
4
+ I want to call mars_rovers gem
5
+
6
+ Scenario: mars_rovers is a command
7
+ When I run `mars_rovers plot -f coordinates`
8
+ Then the output should contain "1 3 N" or "5 1 E"
9
+
@@ -0,0 +1 @@
1
+ require 'aruba/cucumber'
@@ -0,0 +1,3 @@
1
+ require "mars_rovers/version"
2
+ require "mars_rovers/rover"
3
+
@@ -0,0 +1,14 @@
1
+ require 'thor'
2
+ require 'mars_rovers'
3
+
4
+ module MarsRovers
5
+ class CLI < Thor
6
+
7
+ desc "plot", "Plots coordinates and headers"
8
+ method_option :file, :aliases => "-f"
9
+ def plot
10
+ puts MarsRovers::Rover.plot(options[:file])
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ 5 5
2
+ 1 2 N
3
+ LMLMLMLMM
4
+ 3 3 E
5
+ MMRMMRMRRM
@@ -0,0 +1,174 @@
1
+ module MarsRovers
2
+
3
+ class Rover
4
+
5
+ def self.get_rover_mov(results)
6
+ rover_mov = []
7
+
8
+ line_count = results.count
9
+
10
+ (1..line_count).each do |index|
11
+ if index % 2 == 0
12
+ rover_mov << results[index]
13
+ end
14
+ end
15
+
16
+ return rover_mov.compact
17
+ end # get_rover_mov
18
+
19
+ def self.get_rover_pos(results)
20
+ rover_pos = []
21
+
22
+ line_count = results.count
23
+
24
+ (1..line_count).each do |index|
25
+ unless index % 2 == 0
26
+ rover_pos << results[index]
27
+ end
28
+ end
29
+
30
+ return rover_pos.compact
31
+ end # get_rover_pos
32
+
33
+ def self.move_one_step_horizontal(coor,x)
34
+ case coor
35
+ when 'E'
36
+ return x + 1
37
+ when 'W'
38
+ return x - 1
39
+ else
40
+ # do nothing
41
+ end
42
+ end # move_one_step_horizontal
43
+
44
+ def self.move_one_step_vertical(coor,y)
45
+ case coor
46
+ when 'N'
47
+ return y + 1
48
+ when 'S'
49
+ return y - 1
50
+ else
51
+ # do nothing
52
+ end
53
+ end # move_one_step_vertical
54
+
55
+ def self.plot(filename)
56
+
57
+ results = read_file(filename)
58
+
59
+ @upper_right_coor = results[0]
60
+
61
+ @rover_pos = get_rover_pos(results)
62
+ @rover_mov = get_rover_mov(results)
63
+
64
+ output = process_rover_pos_and_mov(@rover_pos,@rover_mov)
65
+
66
+ return output.compact
67
+
68
+ end # plot
69
+
70
+ def self.process_rover_mov(mov,x,y,coor)
71
+ @mov = mov
72
+ @x = x
73
+ @y = y
74
+ @coor = coor
75
+
76
+ (0..@mov.strip.length - 1).each do |index|
77
+ case @mov[index]
78
+ when 'L'
79
+ @coor = switch_left(@coor)
80
+ when 'R'
81
+ @coor = switch_right(@coor)
82
+ when 'M'
83
+ case @coor
84
+ when 'N'
85
+ @y = move_one_step_vertical(@coor,@y)
86
+ when 'S'
87
+ @y = move_one_step_vertical(@coor,@y)
88
+ when 'E'
89
+ @x = move_one_step_horizontal(@coor,@x)
90
+ when 'W'
91
+ @x = move_one_step_horizontal(@coor,@x)
92
+ else
93
+ # do nothing
94
+ end
95
+ else
96
+ # do nothing
97
+ end
98
+ end
99
+
100
+ output = [@x,@y,@coor]
101
+
102
+ return output
103
+
104
+ end # process_rover_mov
105
+
106
+ def self.process_rover_pos_and_mov(rover_pos,rover_mov)
107
+ rover_pos_size = rover_pos.size
108
+ output = []
109
+
110
+ (0..rover_pos_size - 1).each do |index|
111
+ pos = rover_pos[index].split
112
+ x = pos[0].to_i
113
+ y = pos[1].to_i
114
+ coor = pos[2]
115
+ mov = rover_mov[index]
116
+
117
+ x,y,coor = process_rover_mov(mov,x,y,coor)
118
+
119
+ output << [x,y,coor].join(" ")
120
+
121
+ end
122
+
123
+ return output
124
+ end # process_rover_pos_and_mov
125
+
126
+ def self.read_file(filename)
127
+ results = []
128
+
129
+ filename = File.exists?(filename) ? filename : File.join(File.expand_path(File.dirname(__FILE__)),'coordinates')
130
+
131
+ File.open(filename, "r").each do |line|
132
+ results << line
133
+ end
134
+
135
+ return results
136
+ end # read_file
137
+
138
+ def self.switch_left(coor)
139
+
140
+ case coor
141
+ when 'N'
142
+ return 'W'
143
+ when 'E'
144
+ return 'N'
145
+ when 'W'
146
+ return 'S'
147
+ when 'S'
148
+ return 'E'
149
+ else
150
+ return ''
151
+ end
152
+
153
+ end # switch_left
154
+
155
+ def self.switch_right(coor)
156
+
157
+ case coor
158
+ when 'N'
159
+ return 'E'
160
+ when 'E'
161
+ return 'S'
162
+ when 'W'
163
+ return 'N'
164
+ when 'S'
165
+ return 'W'
166
+ else
167
+ return ''
168
+ end
169
+
170
+ end # switch_right
171
+
172
+ end # class Rover
173
+
174
+ end
@@ -0,0 +1,3 @@
1
+ module MarsRovers
2
+ VERSION = "0.0.1.1"
3
+ end
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "mars_rovers/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "mars_rovers"
7
+ s.version = MarsRovers::VERSION
8
+ s.authors = ["Cecille Ann Manalang"]
9
+ s.email = ["cecilleann@sharkbait.local"]
10
+ s.homepage = ""
11
+ s.summary = %q{ Plots the position of the squad of robotic rovers to be landed on a plateau on Mars by NASA }
12
+ s.description = %q{ }
13
+
14
+ s.rubyforge_project = "mars_rovers"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+
23
+ s.add_development_dependency "rspec", "~> 2.6"
24
+ s.add_development_dependency "cucumber"
25
+ s.add_development_dependency "aruba"
26
+
27
+ s.add_dependency "thor"
28
+
29
+ # s.add_runtime_dependency "rest-client"
30
+ end
@@ -0,0 +1,9 @@
1
+ require 'mars_rovers'
2
+
3
+ describe MarsRovers::Rover do
4
+
5
+ it "plots coordinates and header" do
6
+ MarsRovers::Rover.plot('coordinates').should_not be_nil
7
+ end
8
+
9
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mars_rovers
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1.1
6
+ platform: ruby
7
+ authors:
8
+ - Cecille Ann Manalang
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-12-17 00:00:00 +08:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rspec
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: "2.6"
25
+ type: :development
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: cucumber
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :development
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: aruba
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: thor
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ type: :runtime
59
+ version_requirements: *id004
60
+ description: " "
61
+ email:
62
+ - cecilleann@sharkbait.local
63
+ executables:
64
+ - mars_rovers
65
+ extensions: []
66
+
67
+ extra_rdoc_files: []
68
+
69
+ files:
70
+ - .gitignore
71
+ - Gemfile
72
+ - README
73
+ - Rakefile
74
+ - bin/mars_rovers
75
+ - features/rover.feature
76
+ - features/support/setup.rb
77
+ - lib/mars_rovers.rb
78
+ - lib/mars_rovers/cli.rb
79
+ - lib/mars_rovers/coordinates
80
+ - lib/mars_rovers/rover.rb
81
+ - lib/mars_rovers/version.rb
82
+ - mars_rovers.gemspec
83
+ - spec/mars_rovers_spec.rb
84
+ has_rdoc: true
85
+ homepage: ""
86
+ licenses: []
87
+
88
+ post_install_message:
89
+ rdoc_options: []
90
+
91
+ require_paths:
92
+ - lib
93
+ required_ruby_version: !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: "0"
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: "0"
105
+ requirements: []
106
+
107
+ rubyforge_project: mars_rovers
108
+ rubygems_version: 1.6.2
109
+ signing_key:
110
+ specification_version: 3
111
+ summary: Plots the position of the squad of robotic rovers to be landed on a plateau on Mars by NASA
112
+ test_files:
113
+ - features/rover.feature
114
+ - features/support/setup.rb
115
+ - spec/mars_rovers_spec.rb