diff --git a/9.hs b/9.hs new file mode 100644 index 0000000..7d967ad --- /dev/null +++ b/9.hs @@ -0,0 +1,49 @@ + +removeCancelled :: String -> String +removeCancelled str = + let (_, removed) = foldl (\(prev, rs) curr -> + case prev of + '!' -> ('\0', rs) + '\0' -> (curr, rs) + _ -> (curr, prev : rs)) + (head str, "") (tail str) + in reverse $ filter (/= '\0') removed + +removeGarbage :: String -> String +removeGarbage str = + let (_, removed) = foldl (\(isGarbage, rs) curr -> + if isGarbage + then (curr /= '>', rs) + else (curr == '<', + if curr == '<' + then rs + else curr : rs)) + (False, "") str + in reverse $ filter (/= ',') removed + +countNonGarbage :: String -> Int +countNonGarbage str = + let (_, removed) = foldl (\(isGarbage, rs) curr -> + if isGarbage + then (curr /= '>', + if curr == '>' + then rs + else curr : rs) + else (curr == '<', rs)) + (False, "") str + in length removed + +countGroups :: String -> Int +countGroups str = + let (_, total) = foldl (\(score, acc) curr -> + case curr of + '{' -> (score + 1, acc + score) + '}' -> (score - 1, acc)) + (1, 0) str + in total + +main :: IO () +main = do + input <- readFile "9.txt" + print $ countGroups . removeGarbage . removeCancelled $ input + print $ countNonGarbage . removeCancelled $ input \ No newline at end of file diff --git a/9.txt b/9.txt new file mode 100644 index 0000000..3bc1c15 --- /dev/null +++ b/9.txt @@ -0,0 +1 @@ +{{{},{{{{},<"o!!}i>,!i},<>},{},{{,<{!u!!!>,!,,!!"!e'o}>}}},{},{}!!!>,io!>'!o>}},{{{!oe!>!,{},}},{},{{<}}>,<"'',!!}{!!i{>}}},{{{{<'o!>>,!{u}a,">},{{,<"!>e!!'!!!!!>},<'o!!!,!e},{{}}}},{{,<,>},{<'!!!>},<,"u>}}},{{{{!><},<>}},{e>,{},<"}a"''!!!!!!!>o<}!!,>}}},{{{,<'!!!!e!>},},<{!>},<,,!!}}!!u>},{{}}},{{{,<>}},{{}}},{{}}},{{{<>},},},!!!>!!<>},{<>}},{{},{,<>,{}},{{},{{<>},{{!>!!!!a!>,{>}}}}}},{{{},{}}}}},{{{}},{,,"e!u>,{{{}}}},{{<}!!<,e>},<,<'{!{ei!!!>>}}}},{{{{{<'!a>,,},a>},{{,"!>},},!>,<{!>,<>,{}},{{},{{}}},{,<}!!!!!>!!!>!>},"!!!>!!ui'>}}},{{},},},<"{>}},{{},{{{{!a<}},,{'!!a},,<>}},{<",>}},{{!!}!e!>,<<{!>},<,},<>,{<'!e!>},,!>!>!'>}}},{{<!!{>},{{},{i!{>}}},{{{{{{{,},<">,<,}i!!!>!}!>!!!!!>},io,!>},}!!i>}}},{{},{,{{},{}}}},{,<>}}},{{{<,!>i!!!>},!{ue!!i>},{{{<,!>!>},<}!!{u'!}!>!!!>!>},<>}},{}}},{!!!>!!!!!>!io>}},{{{{,!>e!{'>,{<'e!!'!,u!>},}},{{,,o!>a},}}}},{{{{}},{{},},>},{!!!>"}!oae>},{{<"!!!!>,<'!!!>a,<"!>},>}}},{{{,<'uo{!{>}},<}!!}'a!>},<>}},{{{!!'!!>},,{oi{!!,!e!!!<>},{{},{}},{{,,},<}"{e},{oa>}}}},{{{,<'eo!>,,<'"!!!!!>!!e"!!!>'}!!>},{{{<"!>},<{a!!'!!!>!!"!'a!!!!!>!!u>},{<'>}}},{{i!>},!>!!!>!>},<">},{<<>}}},{{<,>},{}},{{},<'u{',uo>,},{}}},{{!!e!>,,{{},<{'!>,'a,!!!>!'!>,<!!!,<<{">}}},{},,<>}}},{{<,<}!"!>!>},u>}}},{{}},{{{>,{<>}},{{o{>},{}},{}},{{<">}},{"uaou!>,"'>,{},<!>u!e!>,},<<>,<,!}}}"!!{e!>,}}}}}},{{{}},{{},!!!>,o,o!!o!!!><>}},{{<}'!!!>!>!!a}>,{}},{}}}}},{{{{{{<>},{,},},<{!>,}},{{}},{">,,<}"{ee>}},{{}}},{{{{}},<<'"!o,e{a!>},,<">},{{<},},},},{o>},},{{{},<>},{{ao!!{}{u!>},<,i"!!>}}}},{{<">},{{},<'!!!>"!>},<"!>,<,""!}ua!>"a>}}},{{{},<!>,!>},<'oe!!!>,,!!!!!!i'!uieo>},{{!>},>,,},<},{{u!!!>{!!oi!>>},{}},{{,},{},<,>}}}}},{{},{{{,},<'"}!!!>}u"o!>,<"!}<},{{,e!!!>!,!!!>ae!a!!",}}},{<<"!>},,{}},{{},{i!>},,,!!'e>}}},{{{'{>},,},<}!o>},{<}e!!!>!>,'!>,,{}},{{},<>}},{}},{{{{<'!!!!!>o!!!,!>,<"'>}}},{{{},<>}},{},{{,{}}}}}},{{{{{{},{{<""ie!"{>}}}},{<}!!!!e<'ioa!>},<"!>},},,}},{},{{<<<>,{},!a!>"{!!!>!{!!!!iei<>,{{},<'u!!u">},{{},<,"oe!<{!,u!!!>!"!!!>>}}}}},{{},<!!!!,>},{{},{,<'!>"!>,<>}}}},{{{{},{{{,<{e!!!>!!!!!">},<},<"!>u!'{',>},a!"o",!a!'!u}!>},<"a!>},<>}},{<>,},<{!!!>,o!!aa"!!'!!!!"!!!>ie>}},{{{,}},{{{{<{!>ii>}}},!!!>e!!{!>,u!!o!!!!o>},{{<>}}},{{{{<{!!!!i"i,"ui"!!o!>},'",>},{>}},{{{{{},},<{o<,o"i!!!>},<,!!!'!!o!>,>},<<"!>,<{o{!}i!!<>}}},{{{{'a'"!ei>},{,<,!!!>'"e!{,<>}}}}}},{{<"!!!>ai'>},{{{,<"ou"u!>}!!'ue!>},<'o}!>},}},},<"i,u!!!>!!!!!>i"{!!!>>}}},{{{{!o}!!!>},eo!!!>!>},!>},",!!!!u,>,!!ie,o<',<}!>"oe!>,},{{!i{u>},},<'o!}eu{}!e>},{{<"!>,<,'!!!>>},}},{},{{{{{<"!!!>!!!>}o!>},!!e!!e!!!>>}}}},,>}},{{{{<{'!iu!>,<}!>},<}>},{<'i>}},{<}ea!!{,o!!!>,<'}oi<,!}a">,,}},{{aei{!>,,<'e<>},{}},{{{},,<>}}},{{<>,,},<>}}},{{{{<,"oo!>},i<'!!{!>a!!i"!"!!>,i!!a!!!!!>{>}},{{}}},{{{,{}},{{},},,},<"!!!!!!!>!!!>!!!!uau<>},{a!>{oo,!>},!!ii<}>,{<"!ia!>}}},{{{<"o,!>,!a!!e>},{},{{{<>},},<{>},{!!!>},},}}},{},'!>},<,!>!>}!!!>!>!!!>!>,,},{{u!>!{,a!}!>,<},i!>,,<>}}},{},{{},{<}!>e!!>,!!!>},!!'u!>,>}}},{{{{{!!o!i"!!!>!>i!!<}o!>},}},<<{<>},{{{},},!>,<'!>},<>}},{},{{{}!>,},{}}},{{{{{<"!!,}{a!!>},<,!{eau>},{,}},{{{},{}}}},{},{<,!!!>a!>,<'>,{}}}},{{!>,<}!>},}<,>},{{<>},{}},{<""a!!!>>}}},{},{{{{a!>},<!!!,!!>},{},,>}},{{},{{<},<{{!>o!>,<>},,<}o>}},{{},,{}}}},{{{{{},{!!!>!>,,aaa!!!>!>,}}},{{!!'e{!,",!!!>ii!>">},{{},<}u{!!!>!!!>!!"!!!>}!!">}}},{{iu!!!>!>},,,<>},{},{{"!!!!!>u!!!!!>!>,i>},,!>!>!!{"!!a>}},{{},{}},{{{,<}!e>},{},!>,!>!ao"!a>}},{{{{{<>}},{{},<>},{}},{},{<}e>,{}}}},{}}},{{{<}"!!!>e!!!><>}},{{<'!!!!"u'}aou,a>,{<!>,<{!>},oa>,{{},<">}}},{{<'!!!>e{!>},<",>},{{a,u!>!>,<}u!!}!>},<>},<",!>},<"!a!!"!>!>},<>}},{!!}eiii{>,!>!>}!>!!!>,!!!!!!i>}},{{{,<{!!a!>!>,,},<>},{<"o}'"!uo{'o'"{>,{}}},{}>}}},{{{{{},},<>},{}},{<{'>},{,<>,{{}}}},{{},{},<"!>,<{>},{}},{{{">,<'!!,{!>!!!>,>}},{{{<{},},<'>,o!!!!!!"!>,},<>},{},ie!e!!"{auu}}}},{{{<}>},,},,!!!>,<>}}},{{{<!>!>}}{{!!o"e>}},{{}},{},!>e>}},{{},{},{{<>}}},{{{u!!!>eo!o}u!}!{!>},<}'i!>},<>,<,!!!>},<'!!!!!!!>'uu!!a,,e>},{"}},{{{},},{e!!!>!!!!u}o!!">}},{{<>},{,},<'!>},<{}!<}"!>,},!>e>},{<{'{!>!!ae!!>}}}}}}},{{{{{{<">},<}oea!>,<}o>},{,<!e!!!o>,{}},{{!>,<'a{'>}}}},{{{{},{{<>}}},{,}eae'!uuo!!}!!<>,{{<"'i>}}},{},<}ae!!!>e'{!!!><>}},{{{{<}!>},e<'a!!!>,<}ee}!>,!>},<"<">,{"!>!!i!!>}},{{{{<>}},{}},{{,<{u}>}},{}},{<>,{,o!!!>},}}},{{{u!!!>!eoeo{!!,<}i!>},<>,<,!}a!>,},{},{<"e>,{}}},{,,{!!!>i!!>}},{{{},,,<'!!!>},},},},<"!>>}},{{},{<i!!,!>},<',>}}}},{{{<'ei!!!>{!>,!!!>>},},ieu!>,>},{{{!<>}}},{,{}}},{{{{{,{{{{},!!"!>,!!!>},}}},{}}},{{!>"{a!!{!>,},{<>}},{}}},{}}}},{{{{{,},o!>e!!,>}}},{},{,<'!!aoa!!!>!!!!!!!>!!!>,<',!!a!>i>}},{{!!!>},}{}">,{,,i"!<'{!o>}}}},{{{{{<"e!!i!>>,{!>},},<!!e,,<<>}}},{<,"o!e<o!io!>,,{}}},{{},{}},{{},{{{},,},},!!<>},{{}},{{{'!!e!>},,},!!!>"}}!!i,'>},<{>},{},<!>},}}},{{{<'i{i'!>!!e!!!>!{ie!!!!!>,<{!>{!!!!a">},{},},>}},{<{i,!{>,{{{!!,>}},{!>!!!!}iu,!>},<{o!>},>}}}}}}},{{{{,},},{{{{{o{>,{}}},{,<{>}}},{{<}!>,,,{{},<>}},{}},{{{!<{,!>iu{'"o>,{}},{{u>},{}},{}},{{,ee!!''i!>},<{!>,,,o,o,i!>},,}!>},<"!!!>},<{!!!o>},{{{!!>,{>,{{{},{{<{!!!>'!>,!>!!o!!!>}!!!>>}}},},},},!>u"e"}!a!'a!u{>}}},{{{{,<'{a!>,<}"!>,},,{}},<}u!>u,a!>!!!>u!!!!!>u!},{{<,u<'!>!>},<>}},{{{{},<}!>},<{ee"}"!>!!<>}},{{!!e<'>},io!'!>"!!i!!}!>,},{,!>,ei!>!!u!>o,!>},<>}}}}},{{{!>,},{{{}}}}}}},{{u"},<}!>},<>}},{{},,aa!'!!!>>},{}}},{{{<'}!!>,!>},,<}!!!>!!a'!!!>}!>},!',"!>}!>},},<>},{{{,"{}'!!!>!!!>!!!>{>},{!>'!>ea!!!>u!!i>,{{<"a<,}!!",'a!!u}a{}},<'!!>},<'!,u>}}},{{},!!!!u'au!!u>},{<>,!>u{aeai!>,!!"}!!'e!!'}>}}},{{{},{,<}o}>,{,},!!'!>},},}}}}}},{{{{{{},ao!!"}o!>},<>}},{}},{,<{!!!!!>}"!>},<}>}},{{,<,!>,!!!>,<,}}}},{{{{{},{}},{{{!!!>,}},{{<}},,,,},{},ia>}}},{,<'<{!>uu!!ia>,,,<,,<>}},{{{{},{<"!>},},<"!>,}ai!!!!a!'u>},{{},{o"!>,!>!!!!"{!>o}>}}},{<{!!">}},{{{<,oooe>,{eo<{!>,},'!!>}},{},{}},{{<{,<}!>,},{{}}}},{{,},,<}!!'}},{{!uu''!!{,oeu!>,{>,<,"'>},{{},,}"a""!!!>>},{{},{}}}}}},{{}}},{{{{},{<'!!",<},,}},},}!,,!!ia{>},{{{{{,{<},!!!>>}},{{}}}},<>},{{!!'>,<}!!<,!!!>,<},i!>!<>},{}},{{!>,'!>,},u,}!>}>},{>}}},{{!!{!>{>},,}},{{{"a!>},<a!!!>'!>},<}!ii>},{,{},!!>}},{{{{},<>}},<}e!>},<}!!a>}}}}},{{{{{},{<>}},{<>}},{{"!!!!!>!i!>!>,!>,,<}!!!>,<>},},!!i'!>,<>},{{},},<<,!!!!a!!,},<'!u!>,<>},{<!>!>},e"i!>>,{}},{,<>}}},{{}},{{!!!u"!>,,{}},{}}}}},{{{{},{<{!>,},<>}},{{},<>}},{},{{},{{{{{}},{{{{}}}}},{{,<>}}},{{<{ie!!'!o'!!!>,,<,!>!!{!u!>},<>,!!!>!>'"eu>},{{{<,!eu!io,{{},},,<}}}},{{{},{,!>e>}},{},},},<'!>,<"e!!!>"">,{>}}}},{{}}},{{<>},<<}>}},{{{},>},{{},}!!oe'>}}}}},{{{{{,!!">}}},{{{},{}},{{},!}ie!!{!!>}}},{{{o<'!e!e!>,<>}},{{{},!u!!{u},,,,<>},{{!>a!>!!,>,{}}}},{{{{{{{!>,<,<>},},,<'{!!}!!!>,uo>}},{u!!!!!>>,},},!!!>,,}}},{{{{,!!!>"">}},{,o>,{{{{{<'!>},!!o"oe!>},<,e!!'a>,,<,a!!!u}!!!!!!"!!i!!'i!!"u!>},<>},{<}}},,,!!!>>}}}},{{{{{{<}e!>!>o!>!>'i!!"'<,!>},<{e!!i>},},{<,!>},},<}!>,,{<!!'!>,<<<>}}},{!!!!o!!}i,!!!!!!!>!}'!>!!}i>,{<,},,u!>},>}},{{!!!>e,!a,a!!!>o}!>},<},},{,},<}},{{,<{"!aeoa!!>,,<>},{<>}}},{{{,,<}e"!>,<>},{<{!>,,,>,{}}}},{{<<>}}}}}},{{{{,<>},<}u!>},<'ei>},{{},{{,}}!>,<">,{}{{!!!>{>,<">}},{{{<"a!!a!!!}{<>},{{},<}u>}},{{!>'}!!!>!!!>,!!!>e>},{{{!>,iu>}}}}},{{,{,<"'!>,},},a!!>}},<,,<}!!!>!>,!!!!!>}!u>}},{{!>,<"!}}}<}ou>},{},<>}}},{{<,!!o>}}},{{{{<!!!>},,o!>},<}!'!!!>{>},{<>}}}},{{{},<>},{},}i>}},{{}},{{{}},{{},!>},!!{!!!><'!{!>!!'>}}},{{}}},{{{},{<{,'!>,!!!>{!!!>,!!!>'!!!>>,{<,<{{!i!!oe'a!>i"!!a}},{i!>},<}!!!>,<'!!!>,,<,!!!!au!>,,{<,,<{'>}}},{{},!!!>ao!!!>>,{!>,},!>!>!>>}},{!!!>!>}>,<,,,{>},{,!!>}}},{{{{{},{{},!}"ea!!!>>}},{{},{,},<'{}!!!i!!!>"!>},},,}},{}},{{{},,'a!>u!!<,!!!>>},{},}},{{},<}i!!!!!>e!!!!!>o>},{<>}},{}}},{{{{{i}e'!!!>},},<{!>,<!>,<>}},{{{!<{,"o!>,!!o>},{i{'!!!!!i'!>,}a!!!>},<>}}}}}}}} \ No newline at end of file