|
|
|
@ -2,30 +2,25 @@ require "./common.cr"
|
|
|
|
|
|
|
|
|
|
lines = File.read("day5_input").split("\n")
|
|
|
|
|
|
|
|
|
|
struct Char
|
|
|
|
|
def inverse?(other)
|
|
|
|
|
return (other != self) && (other.downcase == self.downcase)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def react(string)
|
|
|
|
|
string = string.chars
|
|
|
|
|
|
|
|
|
|
changed = true
|
|
|
|
|
while changed
|
|
|
|
|
changed = false
|
|
|
|
|
i = 0
|
|
|
|
|
while i < string.size - 1
|
|
|
|
|
next_i = i + 1
|
|
|
|
|
if string[i] != string[next_i] &&
|
|
|
|
|
string[i].downcase == string[next_i].downcase
|
|
|
|
|
string.delete_at i
|
|
|
|
|
string.delete_at i
|
|
|
|
|
|
|
|
|
|
i -= 1
|
|
|
|
|
i = 0 if i < 0
|
|
|
|
|
changed = true
|
|
|
|
|
else
|
|
|
|
|
i += 1
|
|
|
|
|
end
|
|
|
|
|
stack = [] of Char
|
|
|
|
|
|
|
|
|
|
string.each_char do |char|
|
|
|
|
|
last_char = stack.last?
|
|
|
|
|
if !last_char || !last_char.inverse? char
|
|
|
|
|
stack << char
|
|
|
|
|
else
|
|
|
|
|
stack.pop
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return string
|
|
|
|
|
return stack
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
puts react(lines[0]).size
|
|
|
|
|