From feb1b7b1255e8fdd0a4a67f6c869347e707ecf5a Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Tue, 25 Dec 2018 12:19:25 -0700 Subject: [PATCH] [2018][ruby][17.1] store using a hash --- 2018/ruby/day_17.rb | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/2018/ruby/day_17.rb b/2018/ruby/day_17.rb index c733ed1..12743bc 100644 --- a/2018/ruby/day_17.rb +++ b/2018/ruby/day_17.rb @@ -1,35 +1,32 @@ -require "set" - require "minitest" require "minitest/pride" class Slice def self.parse(s) - clay = Set.new + squares = {} s.scan(/^(x|y)=(\d+), (?:x|y)=(\d+)..(\d+)$/m).each do |xy, i, min, max| i, min, max = [i, min, max].map(&:to_i) - clay.merge((min..max).map {|j| xy == ?x ? [j, i] : [i, j] }) + (min..max).map {|j| xy == ?x ? [i, j] : [j, i] }.each do |pos| + squares[pos] = ?# + end end - new(clay) + new(squares) + end + + def initialize(squares) + @squares = squares + @squares[[500, 0]] = ?+ end - def initialize(clay) - @clay = clay + def simulate + end def to_s - min_x, max_x = @clay.map(&:last).minmax - min_y, max_y = @clay.map(&:first).minmax + min_x, max_x = @squares.keys.map(&:first).minmax + min_y, max_y = @squares.keys.map(&:last).minmax min_y = [0, min_y].min - (min_y..max_y).map {|y| - (min_x-1..max_x+1).map {|x| - if [x, y] == [500, 0] - ?+ - else - @clay.include?([y, x]) ? ?# : ?. - end - }.join - }.join(?\n) + (min_y..max_y).map {|y| (min_x-1..max_x+1).map {|x| @squares.fetch([x, y]) { ?. } }.join }.join(?\n) end end