diff --git a/2018/ruby/day_05.rb b/2018/ruby/day_05.rb
new file mode 100644
index 0000000..859e8d6
--- /dev/null
+++ b/2018/ruby/day_05.rb
@@ -0,0 +1,29 @@
+input = ARGF.read.chomp
+
+REGEX = Regexp.new(
+ (?a..?z)
+ .map {|x| [x, x.upcase] }
+ .flat_map(&:permutation)
+ .flat_map(&:to_a)
+ .map(&:join)
+ .join(?|)
+)
+
+def react(polymer)
+ last = nil
+ until polymer == last
+ last = polymer
+ polymer = polymer.gsub(REGEX, "")
+ end
+ polymer
+end
+
+# Part One
+# p react(input).size
+
+# Part Two
+p (?a..?z)
+ .map {|unit| input.gsub(/#{unit}/i, "") }
+ .map {|polymer| react(polymer) }
+ .map {|reacted| reacted.size }
+ .min