From 16677ad6a4640faf95747ed533229ec3c8223eee Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Wed, 13 Dec 2023 22:34:24 -0800 Subject: [PATCH] [2023][ruby][14.x] clean up part one --- 2023/ruby/day_14.rb | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/2023/ruby/day_14.rb b/2023/ruby/day_14.rb index b83d4cb..b70ed3f 100644 --- a/2023/ruby/day_14.rb +++ b/2023/ruby/day_14.rb @@ -1,14 +1,5 @@ input = ARGF.readlines(chomp: true).map(&:chars) -# part one -p input.transpose - .map {|col| col.chunk_while { [_1, _2].tally.fetch(?#, 0).even? }} - .map {|col| col.flat_map { _1.sort.reverse }} - .transpose - .reverse - .each.with_index - .sum {|row, i| row.count(?O) * (i+1) } - # always tilts left def tilt(platform) platform @@ -16,6 +7,15 @@ def tilt(platform) .map {|row| row.flat_map { _1.sort.reverse }} end +def load(platform) + platform.reverse + .each.with_index + .sum {|row, i| row.count(?O) * (i+1) } +end + +# part one +p load(tilt(input.transpose).transpose) + def spin_cycle(platform) return enum_for(__method__, platform) unless block_given? @@ -41,6 +41,7 @@ spin = spin_cycle(input) seen = {} (1_000_000_000).times do |i| platform = spin.next + if seen.has_key?(platform.hash) start, _ = seen.fetch(platform.hash) i = (1_000_000_000 - start) % (i+1 - start) + start @@ -48,9 +49,6 @@ seen = {} exit end - load = platform.reverse - .each.with_index - .sum {|row, i| row.count(?O) * (i+1) } - seen[platform.hash] = [i+1, load] + seen[platform.hash] = [i+1, load(platform)] end