package Ġcom . github . j nt ak pe . a oc 2 0 2 1 . days . day 8 Ċ Ċ import Ġcom . github . j nt ak pe . a oc 2 0 2 1 . shared . Day Ċ import Ġcom . github . j nt ak pe . a oc 2 0 2 1 . shared . read Input Lines Ċ Ċ object ĠDay 8 Ġ: ĠDay Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġinput Ġ= Ġread Input Lines ( 8 ). map Ġ{ ĠLine ( it ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart 1 () Ġ= Ġinput . sum Of Ġ{ Ġit . count Direct Solution () Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart 2 () Ġ= Ġinput . sum Of Ġ{ Ġit . sum () Ġ} ĊĊĠĠĠ Ġclass ĠLine ( raw : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpatterns : ĠList < String > ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġoutput : ĠList < String > ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( raw . split ("| "). map Ġ{ Ġit . trim () Ġ}. map Ġ{ Ġit . split (" Ġ") Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpatterns Ġ= Ġfirst () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ= Ġlast () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcount Direct Solution () Ġ= Ġoutput . count Ġ{ Ġit . length Ġin ĠlistOf ( 2 , Ġ 3 , Ġ 4 , Ġ 7 ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġsum () Ġ= Ġpattern Map (). run Ġ{ Ġoutput . map Ġ{ Ġfor Digit ( it ) Ġ}. join ToString (" "). toInt () Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġpattern Map () Ġ= Ġbuild Map < Int , ĠString >( 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpatterns . groupBy Ġ{ Ġit . length Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 1 ] Ġ= Ġit [ 2 ] !!. single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 7 ] Ġ= Ġit [ 3 ] !!. single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 4 ] Ġ= Ġit [ 4 ] !!. single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 8 ] Ġ= Ġit [ 7 ] !!. single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ 6 ] !!. forEach Ġ{ Ġpattern Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! pattern . contains All ( this [ 1 ] !! ) Ġ-> Ġthis [ 6 ] Ġ= Ġpattern ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . contains All ( this [ 4 ] !! ) Ġ-> Ġthis [ 9 ] Ġ= Ġpattern ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthis [ 0 ] Ġ= Ġpattern ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ 5 ] !!. forEach Ġ{ Ġpattern Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern . contains All ( this [ 1 ] !! ) Ġ-> Ġthis [ 3 ] Ġ= Ġpattern ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 9 ] !!. contains All ( pattern ) Ġ-> Ġthis [ 5 ] Ġ= Ġpattern ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthis [ 2 ] Ġ= Ġpattern ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . contains All ( other : ĠString ) Ġ= Ġto List (). contains All ( other . toList ()) ĊĊĠĠĠ Ġprivate Ġfun ĠString . is Same ( str : ĠString ) Ġ= Ġlength Ġ== Ġstr . length Ġ&& Ġcontains All ( str ) ĊĊĠĠĠ Ġprivate Ġfun ĠMap < Int , ĠString >. for Digit ( digit : ĠString ) Ġ= Ġentries . single Ġ{ Ġit . value . is Same ( digit ) Ġ}. key Ċ } Ċ