Skip to content

Commit

Permalink
Solve day02 part 2
Browse files Browse the repository at this point in the history
  • Loading branch information
tudorpavel committed Dec 2, 2023
1 parent 94be499 commit dfb96c8
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 8 deletions.
39 changes: 32 additions & 7 deletions day02/day02.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,10 @@

class Day02
def solve(lines)
p1 = lines.map do |line|
game_id, subsets = line.scan(/Game (\d+): (.+)/).flatten
next 0 if impossible?(subsets)

game_id.to_i
end.sum
p1 = part1(lines)
p2 = part2(lines)

[p1, -2]
[p1, p2]
end

private
Expand All @@ -20,6 +16,15 @@ def solve(lines)
'blue' => 14
}.freeze

def part1(lines)
lines.map do |line|
game_id, subsets = line.scan(/Game (\d+): (.+)/).flatten
next 0 if impossible?(subsets)

game_id.to_i
end.sum
end

def impossible?(subsets)
subsets.split(';').each do |subset|
subset.scan(/(\d+) (red|green|blue)/).each do |(count, cube)|
Expand All @@ -29,4 +34,24 @@ def impossible?(subsets)

false
end

def part2(lines)
lines.map do |line|
_game_id, subsets = line.scan(/Game (\d+): (.+)/).flatten

power(subsets)
end.sum
end

def power(subsets)
max_seen = { 'red' => 0, 'green' => 0, 'blue' => 0 }

subsets.split(';').each do |subset|
subset.scan(/(\d+) (red|green|blue)/).each do |(count, cube)|
max_seen[cube] = [count.to_i, max_seen[cube]].max
end
end

max_seen.values.reduce(:*)
end
end
2 changes: 1 addition & 1 deletion spec/day02/day02_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
it 'returns the right result' do
_p1, p2 = solve

expect(p2).to eq(-2)
expect(p2).to eq(2286)
end
end
end
Expand Down

0 comments on commit dfb96c8

Please sign in to comment.