2025 ruby day 3, MAXIMUM_JOLTAGE

This commit is contained in:
Bill Rossi 2025-12-03 05:59:18 -05:00
parent 313f8f7542
commit b2f13520ab
3 changed files with 52 additions and 0 deletions

7
ruby/2025/3/bin/problem Normal file
View File

@ -0,0 +1,7 @@
#!/usr/bin/env ruby
require "battery_bank"
battery_banks = STDIN.read.chomp.split.map { |line| BatteryBank.for line }
puts "Part 1: #{battery_banks.map(&:maximum_joltage).sum}"
puts "Part 2: #{battery_banks.map(&:override_joltage).sum}"

View File

@ -0,0 +1,27 @@
class BatteryBank
attr_reader :batteries
def initialize(batteries)
@batteries = batteries
end
def self.for(string)
new string.split("").map(&:to_i)
end
def joltage_for_batteries(num_batteries)
num_batteries.downto(1).reduce([[], 0]) do |acc, enabled_battery_index|
max_digit = batteries[(acc[1])..(-enabled_battery_index)].max
max_digit_index = batteries[(acc[1])..].find_index(max_digit)
[acc[0] + [max_digit], acc[1] + max_digit_index + 1]
end[0].map(&:to_s).join("").to_i
end
def maximum_joltage
joltage_for_batteries(2)
end
def override_joltage
joltage_for_batteries(12)
end
end

View File

@ -0,0 +1,18 @@
require "minitest/autorun"
require "battery_bank"
class TestBatteryBanks < ::Minitest::Test
def test_maximum_joltage
assert_equal(98, BatteryBank.for("987654321111111").maximum_joltage)
assert_equal(89, BatteryBank.for("811111111111119").maximum_joltage)
assert_equal(78, BatteryBank.for("234234234234278").maximum_joltage)
assert_equal(92, BatteryBank.for("818181911112111").maximum_joltage)
end
def test_override_joltage
assert_equal(987654321111, BatteryBank.for("987654321111111").override_joltage)
assert_equal(811111111119, BatteryBank.for("811111111111119").override_joltage)
assert_equal(434234234278, BatteryBank.for("234234234234278").override_joltage)
assert_equal(888911112111, BatteryBank.for("818181911112111").override_joltage)
end
end