aboutsummaryrefslogtreecommitdiff
path: root/day05/part2
blob: b71d84e95c24350d0aa10f173e2c912cdd670342 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/env ruby

input = gets.chomp.chars

units = input.map(&:downcase).uniq
lengths = {}

units.each do |unit|
  polymer = input.dup
  polymer.delete_if {|u| u == unit || u == unit.upcase}
  l = polymer.length
  loop do
    i = polymer.length - 1
    loop do
      break if i < 1

      if polymer[i] == polymer[i-1].swapcase
        polymer.delete_at(i)
        polymer.delete_at(i-1)
        i -= 2
      else
        i -= 1
      end
    end
    if polymer.length == l
      break
    else
      l = polymer.length
    end
  end
  lengths[unit] = polymer.length
end

puts lengths.values.min