diff --git a/day9/Makefile b/day9/Makefile
new file mode 100644
index 0000000..6793de4
--- /dev/null
+++ b/day9/Makefile
@@ -0,0 +1,8 @@
+all: day9.beam
+ erl -noshell -s day9 start -s init stop
+
+day9.beam:
+ erlc day9.erl
+
+clean:
+ rm -f day9.beam
diff --git a/day9/day9.erl b/day9/day9.erl
new file mode 100644
index 0000000..d9bc40a
--- /dev/null
+++ b/day9/day9.erl
@@ -0,0 +1,37 @@
+-module(day9).
+-export([start/0]).
+
+calc_group_score(String)
+ -> calc_group_score(re:split(String, ""), 0, false, 0, false, 0).
+calc_group_score([<<>>], Score, _LastCharWasEx, _Depth, _FoundGarbage, CharCount)
+ -> {Score, CharCount};
+%calc_group_score(List, Score, LastCharWasEx, Depth, FoundGarbage, CharCount)
+% when Score < 0 -> calc_group_score(List, 0, LastCharWasEx, Depth, FoundGarbage, CharCount);
+calc_group_score([_Head|Tail], Score, LastCharWasEx, Depth, FoundGarbage, CharCount)
+ when LastCharWasEx == true, FoundGarbage == true -> calc_group_score(Tail, Score, false, Depth, true, CharCount);
+calc_group_score([Head|Tail], Score, _LastCharWasEx, Depth, FoundGarbage, CharCount)
+ when Head == <<"!">> -> calc_group_score(Tail, Score, true, Depth, FoundGarbage, CharCount);
+calc_group_score([Head|Tail], Score, _LastCharWasEx, Depth, FoundGarbage, CharCount)
+ when Head == <<"{">>, FoundGarbage == false -> calc_group_score(Tail, Score, false, Depth + 1, false, CharCount);
+calc_group_score([Head|Tail], Score, _LastCharWasEx, Depth, FoundGarbage, CharCount)
+ when Head == <<"}">>, FoundGarbage == false -> calc_group_score(Tail, Score + Depth, false, Depth - 1, false, CharCount);
+calc_group_score([Head|Tail], Score, _LastCharWasEx, Depth, FoundGarbage, CharCount)
+ when Head == <<"<">>, FoundGarbage == false -> calc_group_score(Tail, Score, false, Depth, true, CharCount);
+calc_group_score([Head|Tail], Score, _LastCharWasEx, Depth, _FoundGarbage, CharCount)
+ when Head == <<">">> -> calc_group_score(Tail, Score, false, Depth, false, CharCount);
+calc_group_score([_Head|Tail], Score, _LastCharWasEx, Depth, FoundGarbage, CharCount)
+ when FoundGarbage == true -> calc_group_score(Tail, Score, false, Depth, FoundGarbage, CharCount + 1);
+calc_group_score([_Head|Tail], Score, _LastCharWasEx, Depth, FoundGarbage, CharCount)
+ -> calc_group_score(Tail, Score, false, Depth, FoundGarbage, CharCount).
+
+start()
+ -> io:fwrite("~p~n", [calc_group_score("{}")]),
+ io:fwrite("~p~n", [calc_group_score("{{{}}}")]),
+ io:fwrite("~p~n", [calc_group_score("{{},{}}")]),
+ io:fwrite("~p~n", [calc_group_score("{{{},{},{{}}}}")]),
+ io:fwrite("~p~n", [calc_group_score("{,,,}")]),
+ io:fwrite("~p~n", [calc_group_score("{{},{},{},{}}")]),
+ io:fwrite("~p~n", [calc_group_score("{{},{},{},{}}")]),
+ io:fwrite("~p~n", [calc_group_score("{{},{},{},{}}")]),
+ {ok, File} = file:read_file("input"),
+ io:fwrite("~p~n", [calc_group_score(unicode:characters_to_list(File))]).
diff --git a/day9/input b/day9/input
new file mode 100644
index 0000000..8c14a67
--- /dev/null
+++ b/day9/input
@@ -0,0 +1 @@
+{{{{{{{{!>!!oiau!>}}'>}},{}}},{{{{},{}},{{<<<"!!!>!!,,}!!!>'>}},{!!eu!!!!!>,},<,>,<}{!!u,!!!>},!!!>>}},{{},,!>,},<>,!>u,o!>},!!!>,<"<'>},{{<,!>},},<},}},{{<>,{!>{!>},},},,,}},{<{'>,{{<"{,!>!!!>u!>},},<>}}},{<'e!!>}}},{{{{},},,},{{}},{{},{{<'!!i<>},<"!!!!,!>{{>},{}}},{{{'>},!}"!>,<}i>},{{},},<,'!!!>,,,!}!>,<">},{}},{{!!o!!!!!>},<,>}}},{{{,{{u!!>}}},{},{{{},<{!!{!!!>!,"}!!e'!>}u"a>},{{{!!!>a!>},<",!a!!a'"!>,<'>},{},e{'!"!>,<}}},{},!!!,,>,<{!>!!!>a!!>}}}}},{{{},{,,,!!e{{!oi>,{}}},{{},!>e!!io!>,<>,{{},{!>!>},!!!e!>},<{">,{,,<"!"!o!!a!>e!!!>a!>!'a>}}}},{,{>}},{{},{{!!!>!>},>},{>}},{{}}},{{{{}}},{{<"'!e,!!ou!!!>!><{!"i>},},<{>},{<{!!e{ui!!!}i>}}},{{{{{{,,},<>}}},<}!u"!>!!!>!!e!>i}u!>!!!>,!>,<>},{{<,o!>,i!!!>,!>!!!>'}!>i!>,<,<},{{,<>}}},{{,,},{<'{!>!!,<}i'!!!>!!'}<},{{<>,{},,},o'aeo,},>}},{<>}}}},{{{},{<{!!!>,,>}},{"!>},<,!!!>'!!}>,{}},{{<{u!>,o<'!!!!e<,>}}},{{!!!>i,e!u}ooao!!,!>{,{{<>}}}}}},{{{{{{{<'"!!!>!>},'eu!>{<},},<>},{<}!!!>e!>,o!>,<'>}},{{e,"!!i!!!>!>},<>},{"i"e{!!!>>}},{{!!!>e}!>,},<'i<o""!>!!>,,<,!!!!!>!!!>},!>},},},<>},{{},{!>},<{iu>}}}},{{{{},<{!i,!>},},,<{oaa!e!>,<>}},{,>}},{<,!!!!!>!!"}!!,i",<{'!>},<}{!>i<>}},{{{{}},{{}},{{{{<"!!o'u!!!>,e!>,<,ue!!!>!!!>!!!>!!>}},{!>,!>,ai!!>,{{}}},{,,<>,}},{{<{!!!>},!!!>,!,!!!>!>},<>,{!'!!'>}},{}}}},{{{{i,}i,!!!i,<>},,{ua}!a!!o!>!>!><>},{{uo{"!!au!!u,!},!!!!!>!!!!!>!!!!!o!!}!>o>},{{{},{{<"},!!o!>},<>}},{<,!>},u!!>}},{{{<"<>},},{>,<'!!"'}{a!>},<>}},{!!!>,!!!>!'"!!!>},},<>}}},{{{!{uo!,>}},<,!>,},<<>},{{}}},{{{},<}!!!>a>},{a,!>},,<",!"",!!!>ie!>!!{!!">}},{{{{,},<,!{>},<",!>},!>},!!!!'!!!{!>,<{!!"!!u!!}>},{,},<{i"a>,{<{!!!>u!!!!!!!>!!!>,e>}},{},<'>,<,}},{!!!!e!>},,,},{!!{}!>!,!<,>,{!!'!!!>},}}}},{{},{}}},{{<{!!!>!>},>},{{!!,a"e!i!>!!!>!!!!i"!!!!!>iie>,{}},<"{u!,,>}}},{{{,<}o>},{},{{{,,},{{},{},,},<{a'>}}},{{{},<'"iu'o!>},,},<>},{o!,'!!,},,<,!!{'"!!!>>}}}}},{{},>,},u!<>},{{{{{<"!!">}}}}}},{{{!>},}}}},{{},>},{,<,!!u>,{<{!>},e'}e!!u!>o!!!!ui>}}},{{,},},,{{!!!!!>!>i'o!!'!!!>!!}>},<{}>}},{{}}}},{{{,<,!!u!'"!>},i>,{}}},{{<{},<>}},{{{},{{<"i'!>},<,!o!>,i>}}}},{{{{{{"",!!!>"o!,>},!>},},<,o>},},o!!i!>,!!!>u"!>,},<{!>},"!!!>>},{,},!>,,"e!!!>>,<'!>,<}!o!!!u'u,}!},},<}>},{{{<"!>{!>,,<{!!o!>},},}}}}}}},{{{{{{{o!>!>},i!!!>ei<,<,o!!!>,},<<>,},{{{{}}},!>!!eio,>},{{{}},{{},{{},},},},,u!>!{o!>},},{{<>},{}}}}}},{{,!!!>"!!,!!!>!>!!!>},<>,{>}},{{{<>}},{}}},{{,"!>},<},"!>,<}ui>},{{""u<{a!>u!>o!>,<,!!!!}o>,{,<>}}},{!>},!!}>}},{{{<}}>},{},!!ue!!!>,>}},{{,"!>!>!!!!!>}>,{!!!>!!a'!>,,a!!!!{'}}}}},{{{{},{}}},{<"a,,!!!>,!!!!!!!!!>u,{"!!}!>!!!!{,>}},{<">,{!>},!><,,!>},>}}},{{{<}"e!>,},{}},{{{{{{{<"!,!>',>},{!!u,,!!!u!!!>!{e!u!i"}u!'a{ae>,{<"!>,<'!>!>,}!}}{{!!!o!!!!!!!>!!e!!'>}}}},{u!!<}i!!o!!!>!>,}!'!!!>,<}>}}},{},{<}!!"eao!>},,<'!>"o!>,<>,!!!>i!>},<>}},{},oa<'>,<{!a!>,},,},}},{{},{,'!!!!!!u!e>,{}},{{!>"!!e},},},<"e!!a>}}},{{{<<},<{!!!>!>!!!>'"!>},<>}},{{{},{<,o!!!>"'!!i}o>}},{{},{'!!"!!o{!>,<">}},{{,},,<,!!!!u!'!!!>!!"u},{{}}}},{{}}}},{{{,{}},{,}},{{!{!>},<>}}},{{{,<"!!!a!!!>!>!>!>},>}},{{{{{}}},{<'!a!>,,u!>!>,<>,!!!>},{{},<}uoiie!!!>ueo!!!a>}},{{{{},{<>}},{{},!!!>},<{'a,<,!!a!!e<,>},{{<'<>},{{},{}},{<,{}}},{},>}}},{{},<"!>},<<}!>},,<}!>,<>},{<{!!!!!!!>,,!!u!>},<""o!!{!'!!{!>},,!><,!>},<<>}},{},!!!>}e!!"'!>,},<"a}>,,!!aa}>}}}},{{{{},!>},!>},,},{}},{,,i!!i!!!><>},{{},},>},<"'o!>!!!!o!!o!>,}}},{{{}},{{{,{}},{{,,{},'u{!!!>!>},,<>}},{<},<}!>,,},!uoui>},{},<>,{{>}}}},{{!>},<{!!!>"i!!!!!!{>}}}},{{{{{{}},{{{}},{<,o{ia{a!!!>!i!>},,<>}}},{{,{},<{!e!!!>i!!!>e!!!!a!>,<}!}!'!!!>},},<>}}}},{{{{{{}}},{{}}},{}}},{{{{},<<>,e!"{!><>}},{}a!!!>{!!a!!!!!>"!>},}},{{},},!!'">},{<'!>>,<}e,!!!>!!!!!!!>"i!!',!>,},{}},{{{{<,o!>,<,'},}},{{},{<}}!!!o!>!>},ee'!>}!>,}}},{{{{{,!!aao!>,<>},},},!!!!a,a!>,,<>},{{},<"}!!!>!!!>!{i"!!>},!i!!!>}e!!<'o{>},{<>,{{<'!>!>},},<{a!>,},},'!>},,<,!>},}}},{{<},<{!!a,a>},<,ue>}}}},{{{{>,{}},},<>},{{!>},>}},{{},<'!>!>,'!>,{!i!}!>,<"!>},,{<<{,!e!!u'!!u'!>,,{<>}}}},{{{},{{,<},{,'a,',,{<,u!o,!!<,"oea'!!!>!>},<{',<>}}},{{<>}}}},{{,,e!>!!i!!!>!"!!!>}!>!>},<}a"},<>},{{{<>},{}},{<"!>},<}i!!!!!>'u!>!!!>,i!!!>}i!>i!>,}}},{{{},},>,{{,,<>},,},<"e!>,<"!!!>!!!>{!!eia!!!><}},<>},{{{{{},{<{!!!>},<>}}}}},{,,o>}}},{{{<>,<'!!,oa!}eu,!>},<{ea,!>,,<"">},{{{}}!!i!>,,<{!,i},{{},!o!!o>}},{{},,,},{<{a!!!>u}u!}"!>},,},},<}!"!!}>}},{{{},{,<iu!{oo>}},{{},{<}"!>!i!>>}}}},{{<,}}},{{{{{,!>,!!,<{!>},!!!>!!>,{!>>}},{{},{<{,!>},!!e!>},}!}},{,<}!!!!!!!>},<{!!a!>},u!!''<{>}},{{},{{{{,<"i},}},{<"!a!>,},<>}}},{<>,{}}}},{{>,<"e!!!>u'!>},<'a!>{!>,},{>,{}},{{}}}},{{{<}ao!!!>e!>!>,!>,}}o!!!!!<">,<}!ia,<>},{<{},>,{}},{{{{{<,ou<,}o>}}}},{,!!!>},}}},{},{{{},o"!>,,},<},"a},<{>},{{,,<'i!!!>},<}!a">},,}i'u!!!>,'!>!!">}}},{{{{!>,},!!o,>},{{}}},{{{<>}},{{{<"ou{u!}<}"!>,!!!}!>>,{}},,,,<'e!!!>au>},,<{}!!!>o!>,}},{}}},{{},{{<>},{{"!!!><,!!!>o>}}},{{u!!o!>a'!!>},{}}},{{,},,>,a!!,<,o!o!!!!!!!>>},{{{<",,>}}},{!ai!!!i,a!>!!{o"!!ua!!!>!!<>,,,<"a!>},},<>}}},{{},{<e!!"{>,{<"!!"!>},a{!>},,>}},{{,},},}},{{}}}},{{{{{{},{<>}},{{},},<>},{}}},{{{{{<"!>'!>},},<{!>!>},},<<"!>},},<,!!"!>},},{}}},{},{{},<"!!!!!>"!!,!>},ii!!!>",uo'">},<,!!ua'!!u"au!!{},,,<>}},{{}o,!!}>,!>},},<,!!!>,<>},{}}},{<<}!>,>}},{{{<}>,<>},{<},i>,{{i!>},},},},<,'!!!>eu'!oai'!>,<{!>,},}}},{},!!a>,{}'!>,<>}},{{},,},<>}},{{!!{!>,>},{{},,,<>},{<,{!!>}},{{<{}!>},},e>,},{{!>i!!i>},},<>}}},{{{{<{e!u{!!''!ie!>},<'!,>},{{}}}}}},{{{{},{{{{{},{{,e>},<,}">}}},{{{{'eo!!{!!!>"o''>},{{{{!!!>,,<>}}},{}}},{{},{<{i!au,o!,<{>}},{{},<{'!!"!!!>>}}},{{{uu"o!!a>}}},{{{{{{},{}},{},{<>}},{{{<}!!i!!!!aauu'>},<'}!>},!>},oiao}!}!>!!>},{},},,{'>},{{,!>},},{!!!!!!>,{}},{{},},},,},{}}}},{{{<}!>,<,o"'!eu},!>,<}}'e!{!!i!o!!!>!>>},{,<{!!!>,a!>!!!!!e,a>}},{{{{},'!!!!o!eii!>,i}i!!!>},<>}},!!'!>},<"{eio'!}{},{{{}}},{}}},{{{},{{<'!<>},{}},{{<}!e{e!!!!!>},<"i!!'!!!!!}"i!!e"!>,>},{}}},{<"!>},},<}o',!eoae!!e,u!>,},<>,{ei!>},<}eo!!!>!>"i!!}!!">}},{{{{}}},{<"o}}},{{{<"!!!!!>!!!>},<>},<}}!>o,>}}},{{}}},{{{<,!!!>i!>},<,a">},<>},{{{},{<}}{e{!!a!>},>}},{{{",!{a>}},{ou!>},<>}},{{<>}}},{{{,,,<<>}}}},{{{}!!{ua!>,<,e!>,>,{<{,u!>!>},,<>}},{{{,<>},<'i,!>},<{!>},},,},{{},!!u!>},<>,<,o!>,<>},'{!>!!<'{!>u>},{}}},{{{<}},{{{}},!eae<>}},{{,<>}},{{{{<u!!!>!>},<'!>,!o!!!>,},{<}u,!!!>a!!!>>}}}}}},{{{{<}!!o'>}},{}},{{,},,<"!!!>,<'!!!,a}!!!!}>},{}}!!a!!!>!!!>,,},e!!!!!>!!{!!!>!,a!!!!ou!ai{}}},{{{{,{<>}},{{},<{!!!!{!!!>},<}!!!!!!!>!!'u>},{,{!>},<!>,<,>}}},{{!>},<>},{}}},{{{<,!!!!!!!>{u!!,!>>},{{oo!>},<{!!!>,!!ie>}}},{<}!>,"ao'!>!!!>{a'',{}}},{{{<""!>},},<"u>},{},<{"!!!>{{!!!>a!!oii{!>},<"!>,}},{<"!!!!!>e!!'{!>},<'>,},},,},{{<},<'e<"}>},{,,<,,!>{!!!>,,{"!}>,{{u!>},},},}}}}}}},{{{{},{{<>}},{{!>>,!!!!i{!!}!!!>},}}},{{}}},{{{<}u!>,!>},e}},{<'!!iu}{u!>,!>,>,{{,<},{{!>,}}}}},{{{<>,{,<'',{}!>},<>,{{{{<}!!a!!>}},{>}},<>}}}},{{<{{!>},<>},{},{{'!!!>}!<>,{ei!!!>!!!>a'"o!!!>,!!!>,{{},},{{{<"ioa!>},i}ueo>}},{{}}}}}},{}}}},{{,},<>},{{<}ao!!!>!>!!>}}}}},{{{{{{{o!>,}}},o!!"u"'!!!>!>},,},{!!!>a,,u!><>}}},{{{{}},{{i!>,,<"i!>!>,<"u!!>},{}},{{},},}},{{{{},<'!ua!!!>},u>,{<'!!"e{'!>},,>}},{{{<>},{<e!!!>u>,{,<}!>},<,'!!!>},}}},{{{{{,<>}}},{{<,,!!!>iu,!>},<"i!>,<,{'!!!o!>},},<{!!o!>},<,>}},{}}},{{!<"!>,}!!!>a>},},,!!!>>},{{},<<'>}}}},{{{,,{>}},{}}},{{{},<{!>,<,iae"!!!!,>}},{<,!>""!!!>'ii{!>,,},<},{!eu!>},!>},<'i<{!,o>}},{o,,e,>,{<,<>}}}},{{},,},!>,},<"!>,},!!!>>}},{{{{{},},<}"i!!!>},