Code for the Advent of Code event
aoc advent-of-code
at rust 41 lines 745 B view raw
1#!/usr/bin/env ruby 2# frozen_string_literal: true 3 4input = $stdin.readline.strip 5 6def solve(input) 7 i_size = input.size 8 9 return [i_size, i_size] unless input.include? '(' 10 11 part1 = 0 12 part2 = 0 13 index = 0 14 15 while index < i_size 16 if input[index] != '(' 17 part1 += 1 18 part2 += 1 19 index += 1 20 next 21 end 22 23 m_end = input.index ')', index 24 x_i = input.index 'x', index 25 26 count = input[index + 1..x_i - 1].to_i 27 repeat = input[x_i + 1..m_end - 1].to_i 28 29 data_end = m_end + count 30 31 _, d_length = solve(input[m_end + 1..data_end]) 32 33 part1 += count * repeat 34 part2 += d_length * repeat 35 index = data_end 36 end 37 38 [part1, part2] 39end 40 41solve(input).each_with_index { |r, i| puts "(#{i + 1}) #{r}" }