1
2
3
4
5
6
7
8
9
10
11
12
replacements, molecule = DATA.read.chomp.split("\n\n")
replacements = replacements.scan(/(\w+) \=> (\w+)/).map(&:reverse).sort_by {|k,_| -k.size}

steps = 0
until molecule == ?e
  k,v = replacements.find {|k,_| molecule.include?(k) }
  steps += molecule.scan(/#{k}/).size

  molecule.gsub!(k, v)
  puts "#{steps}: #{molecule}"
end
__END__