aoc_omni/ruby/2016/9/problem.rb
2025-11-30 21:22:21 -05:00

51 lines
1.2 KiB
Ruby

def decompress(string)
decompressed = ""
compressed = string.clone
until compressed.empty? do
if compressed[0] == "("
end_index = compressed =~ /\)/
marker = compressed[1..(end_index - 1)]
num_chars, repeat = marker.split("x").map(&:to_i)
compressed = compressed[(end_index + 1)..]
chars = compressed[...num_chars]
repeat.times { decompressed << chars }
compressed = compressed[num_chars..]
else
decompressed << compressed[0]
compressed = compressed[1..]
end
end
decompressed
end
def decompressed_length(string)
decompressed = 0
compressed = string.clone
until compressed.empty? do
if compressed[0] == "("
end_index = compressed =~ /\)/
marker = compressed[1..(end_index - 1)]
num_chars, repeat = marker.split("x").map(&:to_i)
compressed = compressed[(end_index + 1)..]
chars = compressed[...num_chars]
repeat.times { decompressed << chars }
compressed = compressed[num_chars..]
else
decompressed << compressed[0]
compressed = compressed[1..]
end
end
decompressed
end
input = STDIN.read.chomp
part_1 = decompress(input).length
puts "Part 1: #{part_1}"