Code for the Advent of Code event
aoc
advent-of-code
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}" }