Skip to content

Commit 6545d45

Browse files
author
Robb Kidd
committed
day 9, part 2
More naive map-reduce! Redo the work! It's fast enough!
1 parent ead3e7b commit 6545d45

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

2023/ruby/day09.rb

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,41 @@
22

33
class Day09 < Day # >
44

5+
# @example
6+
# day.oasis_report #=> [[0, 3, 6, 9, 12, 15], [1, 3, 6, 10, 15, 21], [10, 13, 16, 21, 30, 45]]
7+
def oasis_report
8+
@oasis_report ||=
9+
input
10+
.each_line
11+
.map { |line| line.split(" ").map(&:to_i) }
12+
end
13+
514
# @example
615
# day.part1 #=> 114
716
def part1
8-
input
9-
.each_line
10-
.map { |line| line.split(" ").map(&:to_i) }
17+
oasis_report
1118
.map { |history|
1219
sequences = [history]
1320
while !sequences.last.all?(0) do
1421
sequences << sequences.last.each_cons(2).map { |a,b| b - a }
15-
end
16-
sequences
17-
.reverse
18-
.map(&:last)
19-
.reduce(&:+)
22+
end # ^^^^^
23+
sequences.map(&:last).reduce(&:+) # <--- last and next-minus-prev
2024
}
2125
.reduce(&:+)
2226
end
2327

2428
# @example
25-
# day.part2 #=> 'how are you'
29+
# day.part2 #=> 2
2630
def part2
31+
oasis_report
32+
.map { |history|
33+
sequences = [history]
34+
while !sequences.last.all?(0) do
35+
sequences << sequences.last.each_cons(2).map { |a,b| a - b }
36+
end # ^^^^^
37+
sequences.map(&:first).reduce(&:+) # <--- first and prev-minus-next
38+
}
39+
.reduce(&:+)
2740
end
2841

2942
EXAMPLE_INPUT = <<~INPUT

0 commit comments

Comments
 (0)