package Ġday 0 8 Ċ Ċ import Ġread Input Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ fun Ġmain () Ġ{ ĊĊĠĠĠ Ġfun Ġpart 1 ( seq : ĠSequence < Box >) Ġ= Ġseq . map Ġ{ Ġbox Ġ-> Ġbox . numbers (). count Ġ{ Ġit Ġin ĠlistOf ( 1 , Ġ 4 , Ġ 7 , Ġ 8 ) Ġ} Ġ}. sum () ĊĊĠĠĠ Ġfun Ġpart 2 ( seq : ĠSequence < Box >) Ġ= Ġseq . map Ġ{ Ġbox Ġ-> Ġbox . as Value () Ġ}. sum () ĊĊĊĠĠĠ Ġval Ġtest Seq Ġ= Ġread Digits ( read Input (" day 0 8 / test ")) ĊĠĠĠ Ġval Ġinput Seq Ġ= Ġread Digits ( read Input (" day 0 8 / input ")) ĊĊĠĠĠ Ġvar Ġres 1 Ġ= Ġpart 1 ( test Seq ) ĊĠĠĠ Ġcheck ( res 1 Ġ== Ġ 2 6 ) Ġ{ Ġ" Expected Ġ 2 6 Ġbut Ġgot Ġ$ res 1 " Ġ} ĊĊĠĠĠ Ġvar Ġtime Ġ= Ġmeasure Time Millis Ġ{ Ġres 1 Ġ= Ġpart 1 ( input Seq ) Ġ} ĊĠĠĠ Ġprintln (" Part 1 : Ġ$ res 1 Ġin Ġ$ time Ġms ") ĊĊĠĠĠ Ġtime Ġ= Ġmeasure Time Millis Ġ{ Ġres 1 Ġ= Ġpart 2 ( input Seq ) Ġ} ĊĠĠĠ Ġprintln (" Part 2 : Ġ$ res 1 Ġin Ġ$ time Ġms ") Ċ } Ċ Ċ fun Ġread Digits ( list : ĠList < String >): ĠSequence < Box > Ġ{ ĊĠĠĠ Ġreturn Ġlist . map Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠ Ġline ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. split ("| ", Ġ" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotBlank () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . toSet () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠBox ( it . take ( 1 0 ), Ġit . take Last ( 4 )) Ġ} ĊĠĠĠ Ġ}. as Sequence () Ċ } Ċ Ċ data Ġclass ĠBox ( val Ġleft : ĠList < Set < Char >>, Ġvar Ġright : ĠList < Set < Char >>) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmappings Ġ= Ġfind Mappings () ĊĊĠĠĠ Ġfun Ġas Value () Ġ= Ġright . map Ġ{ Ġmappings . getValue ( it ) Ġ}. join ToString (" "). toInt () ĊĊĠĠĠ Ġfun Ġnumbers () Ġ= Ġright . map Ġ{ Ġmappings . getValue ( it ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Mappings (): ĠMap < Set < Char >, ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdigits Ġ= ĠArray < Set < Char >>( 1 0 ) Ġ{ Ġempty Set () Ġ} ĊĊĠĠĠĠĠĠĠ Ġdigits [ 1 ] Ġ= Ġleft . first Ġ{ Ġit . size Ġ== Ġ 2 Ġ} ĊĠĠĠĠĠĠĠ Ġdigits [ 4 ] Ġ= Ġleft . first Ġ{ Ġit . size Ġ== Ġ 4 Ġ} ĊĠĠĠĠĠĠĠ Ġdigits [ 7 ] Ġ= Ġleft . first Ġ{ Ġit . size Ġ== Ġ 3 Ġ} ĊĠĠĠĠĠĠĠ Ġdigits [ 8 ] Ġ= Ġleft . first Ġ{ Ġit . size Ġ== Ġ 7 Ġ} ĊĠĠĠĠĠĠĠ Ġdigits [ 3 ] Ġ= Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . size Ġ== Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Ġ{ Ġit . contains All ( digits [ 1 ]) Ġ} ĊĊĠĠĠĠĠĠĠ Ġdigits [ 9 ] Ġ= Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . size Ġ== Ġ 6 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Ġ{ Ġit . contains All ( digits [ 3 ]) Ġ} ĊĊĠĠĠĠĠĠĠ Ġdigits [ 0 ] Ġ= Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . size Ġ== Ġ 6 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . contains All ( digits [ 1 ]) Ġ&& Ġit . contains All ( digits [ 7 ]) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Ġ{ Ġit Ġ!= Ġdigits [ 9 ] Ġ} ĊĊĠĠĠĠĠĠĠ Ġdigits [ 6 ] Ġ= Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . size Ġ== Ġ 6 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Ġ{ Ġit Ġ!= Ġdigits [ 0 ] Ġ&& Ġit Ġ!= Ġdigits [ 9 ] Ġ} ĊĊĠĠĠĠĠĠĠ Ġdigits [ 5 ] Ġ= Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . size Ġ== Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Ġ{ Ġdigits [ 6 ]. contains All ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġdigits [ 2 ] Ġ= Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . size Ġ== Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Ġ{ Ġit Ġ!= Ġdigits [ 3 ] Ġ&& Ġit Ġ!= Ġdigits [ 5 ] Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdigits . map Indexed Ġ{ Ġindex , Ġchars Ġ-> Ġchars Ġto Ġindex Ġ}. toMap () ĊĠĠĠ Ġ} Ċ } Ċ