Skip to content

Commit

Permalink
Day 2 solution
Browse files Browse the repository at this point in the history
  • Loading branch information
gregawoods committed Dec 2, 2023
1 parent b718d6c commit a53ebb9
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 0 deletions.
5 changes: 5 additions & 0 deletions examples/02.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green
43 changes: 43 additions & 0 deletions lib/days/02.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
class Day02

Game = Struct.new(:id, :red, :green, :blue) do
def possible?(red:, green:, blue:)
self.red <= red && self.green <= green && self.blue <= blue
end

def power
red * green * blue
end
end

def build_games_from_input(input)
input.split("\n").each_with_index.map do |line, index|
game = Game.new(index + 1, 0, 0, 0)

line.split(': ').last.split('; ').each do |set|
set.split(', ').each do |hand|
number, color = hand.split
case color
when 'red'
game.red = [game.red, number.to_i].max
when 'green'
game.green = [game.green, number.to_i].max
when 'blue'
game.blue = [game.blue, number.to_i].max
end
end
end

game
end
end

def part1(input)
build_games_from_input(input).select { |g| g.possible?(red: 12, green: 13, blue: 14) }.sum(&:id)
end

def part2(input)
build_games_from_input(input).sum(&:power)
end

end
18 changes: 18 additions & 0 deletions test/02_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
require 'minitest/autorun'
require 'minitest/pride'
require_relative '../app'

class TestDay02 < Minitest::Test
def setup
@data = File.read(File.join(APP_ROOT, 'examples', '02.txt')).rstrip
@day = Day02.new
end

def test_part1
assert_equal @day.part1(@data), 8
end

def test_part2
assert_equal @day.part2(@data), 2286
end
end

0 comments on commit a53ebb9

Please sign in to comment.