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}"