package Ġcom . ke ith wed inger Ċ Ċ /** Ċ Ġ* ĠDay Ġ 9 ĠP uzzle Ċ Ġ* Ġhttp :// ad vent of code . com / 2 0 1 7 / day / 9 Ċ Ġ* Ċ Ġ* Ġ@ author ĠKe ith ĠWed inger Ġ< br > Ċ Ġ* ĠCreated ĠOn : Ġ 1 2 / 1 9 / 1 7 Ċ Ġ*/ Ċ class ĠDay 9 Ġ{ ĊĠĠĠ Ġdata Ġclass ĠStream State ( var Ġprev Char : ĠChar , Ġvar Ġcurr Char : ĠChar , Ġvar Ġgarbage : ĠBoolean ) ĊĊĠĠĠ Ġfun Ġget Group Score And Non Canceled G arbage ( stream : ĠString ): ĠPair < Int , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstream Chars Ġ= Ġstream . toCharArray () ĊĠĠĠĠĠĠĠ Ġval Ġstream State Ġ= ĠStream State (' Ġ', Ġ' Ġ', Ġfalse ) ĊĠĠĠĠĠĠĠ Ġvar Ġdepth Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġscore Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġgarbage Count Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġstream Chars . forEach Ġ{ Ġcurr Char Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream State . curr Char Ġ= Ġcurr Char ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( stream State . prev Char Ġ== Ġ' !' Ġ&& Ġstream State . curr Char Ġ== Ġ' !' Ġ&& Ġstream State . garbage ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream State . prev Char Ġ= Ġ' Ġ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( stream State . curr Char Ġ== Ġ'< ' Ġ&& Ġ! stream State . garbage ) Ġ-> Ġstream State . garbage Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( stream State . prev Char Ġ!= Ġ' !' Ġ&& Ġstream State . curr Char Ġ== Ġ' >' Ġ&& Ġstream State . garbage ) Ġ-> Ġstream State . garbage Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( stream State . curr Char Ġ== Ġ'{ ' Ġ&& Ġ! stream State . garbage ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Ġ+= Ġdepth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdepth ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( stream State . curr Char Ġ== Ġ' }' Ġ&& Ġ! stream State . garbage ) Ġ-> Ġdepth -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( stream State . prev Char Ġ!= Ġ' !' Ġ&& Ġstream State . curr Char Ġ!= Ġ' !' Ġ&& Ġstream State . garbage ) Ġ-> Ġgarbage Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream State . prev Char Ġ= Ġstream State . curr Char ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( score , Ġgarbage Count ) ĊĠĠĠ Ġ} Ċ }