[2016][ruby][11.0] make a Floor object
diff --git a/2016/ruby/day_11.rb b/2016/ruby/day_11.rb
index 7fe53fd..4572403 100644
--- a/2016/ruby/day_11.rb
+++ b/2016/ruby/day_11.rb
@@ -1,3 +1,5 @@
+require 'delegate'
+
class State
attr_reader :floors, :elevator
@@ -5,27 +7,48 @@ class State
@floors = input.lines.reverse.map.with_index {|line, index|
_, e, *items = line.split(/\s+/)
@elevator = index if e == ?E
- items.reject {|item| item == ?. }
+ Floor.new(items.reject {|item| item == ?. })
}
end
end
+class Floor < SimpleDelegator
+ attr_reader :source
+
+ def initialize(items)
+ @source = super(items)
+ end
+
+ def microchips
+ source.select {|item| item.end_with?(?M) }.map {|item| item.chomp(?M) }
+ end
+
+ def generators
+ source.select {|item| item.end_with?(?G) }.map {|item| item.chomp(?G) }
+ end
+end
+
require 'minitest/autorun'
class TestDay11 < Minitest::Test
- def test_initialize
- input = <<-INPUT
+ INPUT = <<-INPUT
F4 . . . . .
F3 . . . LG .
F2 . HG . . .
F1 E . HM . LM
- INPUT
+ INPUT
- state = State.new(input)
- assert_equal 4, state.floors.size
- assert_equal 0, state.elevator
+ def setup
+ @state = State.new(INPUT)
+ end
+
+ def test_initialize
+ assert_equal 4, @state.floors.size
+ assert_equal 0, @state.elevator
- floor = state.floors[0]
+ floor = @state.floors[0]
assert_equal 2, floor.size
+ assert_equal %w[ H L ], floor.microchips
+ assert_empty floor.generators
end
end