2025 ruby day 3, MAXIMUM_JOLTAGE
This commit is contained in:
parent
313f8f7542
commit
b2f13520ab
7
ruby/2025/3/bin/problem
Normal file
7
ruby/2025/3/bin/problem
Normal 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}"
|
||||
27
ruby/2025/3/lib/battery_bank.rb
Normal file
27
ruby/2025/3/lib/battery_bank.rb
Normal 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
|
||||
18
ruby/2025/3/test/test_battery_banks.rb
Normal file
18
ruby/2025/3/test/test_battery_banks.rb
Normal 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
|
||||
Loading…
Reference in New Issue
Block a user