diff --git a/my_parsing_nightmare.rb b/my_parsing_nightmare.rb
new file mode 100644
index 0000000..22b8dcd
--- /dev/null
+++ b/my_parsing_nightmare.rb
@@ -0,0 +1,91 @@
+require 'lex'
+
+input = File.read("input_9.txt").strip
+
+class MyLexer < Lex::Lexer
+ tokens(
+ :LBRACE,
+ :RBRACE,
+ :BANG,
+ :LGARB,
+ :RGARB,
+ :OTHER
+ )
+
+ # Regular expression rules for simple tokens
+ rule(:LBRACE, /\{/)
+ rule(:RBRACE, /}/)
+ rule(:BANG, /!/)
+ rule(:LGARB, /\)
+ rule(:RGARB, /\>/)
+ rule(:OTHER, /./)
+
+ # A string containing ignored characters (spaces and tabs)
+ ignore " \t"
+
+ error do |lexer, token|
+ puts "Illegal character: #{value}"
+ end
+end
+
+LEXER = MyLexer.new
+
+TESTS = { "{}" => 1,
+ "{{{}}}" => 1 + 2 + 3,
+ "{{},{}}" => 1 + 2 + 2,
+ "{{{},{},{{}}}}" => 1 + 2 + 3 + 3 + 3 + 4,
+ "{,,,}" => 1,
+ "{{},{},{},{}}" => 1 + 2 + 2 + 2 + 2,
+ "{{},{},{},{}}" => 1 + 2 + 2 + 2 + 2,
+ "{{},{},{},{}}}" => 1 + 2 }
+
+def testings
+ TESTS.each do |test, expec|
+ res = parsing_lol test
+ if res == expec then
+ puts "[gj] #{test}"
+ else
+ puts "[fuck] #{test}\texpected #{expec}, got #{res}"
+ end
+ end
+end
+
+
+def parsing_lol str_in
+
+ lex = LEXER.lex str_in
+ garb = false
+ level = 0
+ sum = 0
+ garb_count = 0
+
+ begin
+ while elem = lex.next do
+ if not garb then
+ case elem.name
+ when :LBRACE
+ level += 1
+ sum += level
+ when :RBRACE
+ level -= 1
+ when :LGARB
+ garb = true
+ end
+ else
+ case elem.name
+ when :RGARB
+ garb = false
+ when :BANG
+ lex.next
+ else
+ garb_count += 1
+ end
+ end
+ end
+ rescue StopIteration
+ end
+ p sum
+ p garb_count
+end
+
+parsing_lol input