diff --git a/2017/ruby/day_09.rb b/2017/ruby/day_09.rb
new file mode 100644
index 0000000..1bff081
--- /dev/null
+++ b/2017/ruby/day_09.rb
@@ -0,0 +1,25 @@
+require "strscan"
+
+input = ARGF.read.strip
+input = input.gsub(/!./, "")
+
+p input.scan(/<[^>]*>/).map {|g| g.size - 2 }.sum
+
+input = input.gsub(/<[^>]*>/, "")
+ .gsub(?,, "")
+
+ss = StringScanner.new(input)
+score = 0
+group = 0
+until ss.eos?
+ case
+ when ss.scan(/\{/)
+ group += 1
+ when ss.scan(/\}/)
+ score += group
+ group -= 1
+ else
+ raise "omg!"
+ end
+end
+p score