Part 1


In [1]:
function process_stream(s)
    i = 1
    garbage = false
    garbage_total = 0
    group_level = 0
    group_score = 0
    while i <= endof(s)
        c = s[i]
        if c == '!'
            i += 1
        elseif garbage && c == '>'
            garbage = false
        elseif !garbage && c == '<'
            garbage = true
        elseif !garbage            
            if c == '{'
                group_level += 1                
            elseif c == '}'
                group_score += group_level
                group_level -= 1
            end
        else
            garbage_total += 1
        end
        i += 1
    end
    group_score, garbage_total
end


Out[1]:
process_stream (generic function with 1 method)

In [2]:
process_stream("{{<ab>},{<ab>},{<ab>},{<ab>}}")


Out[2]:
(9, 8)

In [3]:
process_stream("{{<a!>},{<a!>},{<a!>},{<ab>}}")


Out[3]:
(3, 17)

In [4]:
process_stream("<{o\"i!a,<{i<a>")


Out[4]:
(0, 10)

In [5]:
open("inputs/day9.txt") do fd
    score = process_stream(readstring(fd))
end


Out[5]:
(12396, 6346)

In [ ]: