package Ġcom . github . j nt ak pe . a oc 2 0 2 1 . days . day 2 4 Ċ Ċ 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 2 4 Ġ: ĠDay Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġinput Ġ= Ġread Input Lines ( 2 4 ). chunk ed ( 1 8 ). map Ġ{ ĠVariables . from ( it ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart 1 () Ġ= Ġsolve ( Part 1 ) ĊĊĠĠĠ Ġoverride Ġfun Ġpart 2 () Ġ= Ġsolve ( Part 2 ) ĊĊĠĠĠ Ġprivate Ġfun Ġsolve ( part : ĠPart ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Ġ= Ġmutable ListOf < Pair < Int , ĠInt >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . div ) Ġstack . add ( count Ġto Ġit . offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( previous , Ġoffset ) Ġ= Ġstack . remove Last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= Ġoffset Ġ+ Ġit . check ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ previous ] Ġ= Ġpart . previous ( diff ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ count ] Ġ= Ġpart . count ( diff ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. to Sorted Map (). values . join ToString (" "). to Long () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠVariables ( val Ġdiv : ĠBoolean , Ġval Ġcheck : ĠInt , Ġval Ġoffset : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġfrom ( chunk : ĠList < String >): ĠVariables Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchunk . filter Indexed Ġ{ Ġi , Ġ_ Ġ-> Ġi Ġin ĠlistOf ( 4 , Ġ 5 , Ġ 1 5 ) Ġ}. map Ġ{ Ġit . substring After Last (" Ġ"). toInt () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġ( div , Ġcheck , Ġoffset ) Ġ-> ĠVariables ( div Ġ== Ġ 1 , Ġcheck , Ġoffset ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠPart Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġprevious ( diff : ĠInt ): ĠInt ĊĠĠĠĠĠĠĠ Ġfun Ġcount ( diff : ĠInt ): ĠInt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠPart 1 Ġ: ĠPart Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprevious ( diff : ĠInt ) Ġ= Ġif Ġ( diff Ġ< Ġ 0 ) Ġ 9 Ġelse Ġ 9 Ġ- Ġdiff ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcount ( diff : ĠInt ) Ġ= Ġif Ġ( diff Ġ< Ġ 0 ) Ġ 9 Ġ+ Ġdiff Ġelse Ġ 9 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠPart 2 Ġ: ĠPart Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprevious ( diff : ĠInt ) Ġ= Ġif Ġ( diff Ġ< Ġ 0 ) Ġ 1 Ġ- Ġdiff Ġelse Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcount ( diff : ĠInt ) Ġ= Ġif Ġ( diff Ġ< Ġ 0 ) Ġ 1 Ġelse Ġ 1 Ġ+ Ġdiff ĊĠĠĠ Ġ} Ċ } Ċ