[2023][ruby][14.x] clean up part one
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