From b7fb46656a51042a6ae8ebbe0794e82b3cf0ecfc Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Sun, 11 Dec 2016 11:20:51 -0500 Subject: [PATCH] [2016][ruby][11.0] make a Floor object --- 2016/ruby/day_11.rb | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) 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