package Ġeu . jan v db . a oc 2 0 2 1 . day 0 8 Ċ Ċ import Ġeu . jan v db . a oc util . kotlin . read Lines Ċ Ċ private Ġconst Ġval ĠFIL ENAME Ġ= Ġ" input 0 8 . txt " Ċ Ċ fun Ġmain () Ġ{ Ċ ĉ val Ġdigits Ġ= Ġread Lines ( 2 0 2 1 , ĠFIL ENAME ) Ċĉ ĉ . map (:: parse Line ) Ċĉ ĉ . map Ġ{ Ġget Digits ( it . first , Ġit . second ) Ġ} ĊĊ ĉ val Ġresult 1 Ġ= Ġdigits . flatten (). count Ġ{ Ġit Ġ== Ġ 1 Ġ|| Ġit Ġ== Ġ 4 Ġ|| Ġit Ġ== Ġ 7 Ġ|| Ġit Ġ== Ġ 8 Ġ} Ċ ĉ println ( result 1 ) ĊĊ ĉ val Ġresult 2 Ġ= Ġdigits . map (:: to Number ). sum () Ċ ĉ println ( result 2 ) Ċ } Ċ Ċ fun Ġparse Line ( line : ĠString ): ĠPair < List < Set < Char >>, ĠList < Set < Char >>> Ġ{ Ċ ĉ val Ġparts Ġ= Ġline . split (" Ġ| Ġ") Ċ ĉ return ĠPair ( parse Part ( parts [ 0 ]), Ġparse Part ( parts [ 1 ])) Ċ } Ċ Ċ fun Ġparse Part ( s : ĠString ): ĠList < Set < Char >> Ġ{ Ċ ĉ return Ġs . split (" Ġ"). map Ġ{ Ġit . trim (). toCharArray (). toSet () Ġ} Ċ } Ċ Ċ fun Ġget Digits ( inputs : ĠList < Set < Char >>, Ġoutputs : ĠList < Set < Char >> ): ĠList < Int > Ġ{ Ċ ĉ var Ġremaining Inputs : ĠList < Set < Char >> Ġ= Ġinputs Ċ ĉ val Ġpattern 1 Ġ= Ġremaining Inputs . find Ġ{ Ġit . size Ġ== Ġ 2 Ġ} !! Ċ ĉ val Ġpattern 4 Ġ= Ġremaining Inputs . find Ġ{ Ġit . size Ġ== Ġ 4 Ġ} !! Ċ ĉ val Ġpattern 7 Ġ= Ġremaining Inputs . find Ġ{ Ġit . size Ġ== Ġ 3 Ġ} !! Ċ ĉ val Ġpattern 8 Ġ= Ġremaining Inputs . find Ġ{ Ġit . size Ġ== Ġ 7 Ġ} !! Ċ ĉ remaining Inputs Ġ= Ġremaining Inputs Ġ- Ġset Of ( pattern 1 , Ġpattern 4 , Ġpattern 7 , Ġpattern 8 ) ĊĊ ĉ val Ġpattern 3 Ġ= Ġremaining Inputs . find Ġ{ Ġit . size Ġ== Ġ 5 Ġ&& Ġit . contains All ( pattern 1 ) Ġ} !! Ċ ĉ val Ġpattern 9 Ġ= Ġremaining Inputs . find Ġ{ Ġit . size Ġ== Ġ 6 Ġ&& Ġit . contains All ( pattern 3 ) Ġ} !! Ċ ĉ remaining Inputs Ġ= Ġremaining Inputs Ġ- Ġset Of ( pattern 3 , Ġpattern 9 ) ĊĊ ĉ val Ġpattern 0 Ġ= Ġremaining Inputs . find Ġ{ Ġit . size Ġ== Ġ 6 Ġ&& Ġit . contains All ( pattern 1 ) Ġ} !! Ċ ĉ remaining Inputs Ġ= Ġremaining Inputs Ġ- Ġset Of ( pattern 0 ) ĊĊ ĉ val Ġpattern 6 Ġ= Ġremaining Inputs . find Ġ{ Ġit . size Ġ== Ġ 6 Ġ} !! Ċ ĉ remaining Inputs Ġ= Ġremaining Inputs Ġ- Ġset Of ( pattern 6 ) ĊĊ ĉ val Ġpattern 5 Ġ= Ġremaining Inputs . find Ġ{ Ġit . size Ġ== Ġ 5 Ġ&& Ġpattern 6 . contains All ( it ) Ġ} !! Ċ ĉ remaining Inputs Ġ= Ġremaining Inputs Ġ- Ġset Of ( pattern 5 ) ĊĊ ĉ val Ġpattern 2 Ġ= Ġremaining Inputs . find Ġ{ Ġit . size Ġ== Ġ 5 Ġ} !! ĊĊ ĉ return Ġoutputs . map Ġ{ Ċĉ ĉ when Ġ( it ) Ġ{ Ċĉĉ ĉ pattern 0 Ġ-> Ġ 0 Ċĉĉ ĉ pattern 1 Ġ-> Ġ 1 Ċĉĉ ĉ pattern 2 Ġ-> Ġ 2 Ċĉĉ ĉ pattern 3 Ġ-> Ġ 3 Ċĉĉ ĉ pattern 4 Ġ-> Ġ 4 Ċĉĉ ĉ pattern 5 Ġ-> Ġ 5 Ċĉĉ ĉ pattern 6 Ġ-> Ġ 6 Ċĉĉ ĉ pattern 7 Ġ-> Ġ 7 Ċĉĉ ĉ pattern 8 Ġ-> Ġ 8 Ċĉĉ ĉ pattern 9 Ġ-> Ġ 9 Ċĉĉ ĉ else Ġ-> Ġ- 1 Ċĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ fun Ġto Number ( digits : ĠList < Int >): ĠInt Ġ{ Ċ ĉ val Ġresult Ġ= Ġdigits . fold ( 0 ) Ġ{ Ġvalue , Ġdigit Ġ-> Ġvalue Ġ* Ġ 1 0 Ġ+ Ġdigit Ġ} Ċ ĉ println ( result ) Ċ ĉ return Ġresult Ċ }