import Ġjava . util .* Ċ Ċ fun Ġday 1 0 Problem Reader ( string : ĠString ): ĠList < Int > Ġ{ ĊĠĠĠ Ġreturn Ġstring ĊĠĠĠĠĠĠĠ Ġ. split ("\ n ") ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġline Ġ-> Ġline . toInt () Ġ} ĊĠĠĠĠĠĠĠ Ġ. toList () Ċ } ĊĊ Ċ // Ġhttps :// ad vent of code . com / 2 0 2 0 / day / 1 0 Ċ class ĠDay 1 0 ( ĊĠĠĠ Ġprivate Ġval Ġnumbers : ĠList < Int > Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġsolve Part 1 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġn 1 Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġn 3 Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġnumbers . sorted (). fold ( 0 ) Ġ{ Ġa , Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( b Ġ- Ġa ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġn 1 ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġn 3 ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġn 1 Ġ* Ġ( n 3 Ġ+ Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠThis Ġdoes Ġnot Ġwork Ġon Ġbig Ġset ĊĠĠĠ Ġfun Ġsolve Part 2 _ na ive (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġnumbers . max OrNull () !!. plus ( 3 ) ĊĠĠĠĠĠĠĠ Ġvar Ġsolutions Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġval Ġsolutions To Explore : ĠQueue < List < Int >> Ġ= ĠLinkedList () ĊĠĠĠĠĠĠĠ Ġsolutions To Explore . add ( listOf ( 0 )) ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsolution Ġ= Ġsolutions To Explore . remove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Val Ġ= Ġsolution . max OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max Val Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max Ġ== Ġmax Val . plus ( 3 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsolutions Ġ+= Ġ 1 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 1 .. 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( numbers . contains ( max Val . plus ( x ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Solution Ġ= Ġsolution . to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Solution . add ( max Val . plus ( x )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsolutions To Explore . add ( new Solution ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( solution sTo Explore . isNotEmpty ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġsolutions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsolve Part 2 (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġk Ġ= Ġlong ArrayOf ( 1 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġnumbers . sorted (). fold ( 0 ) Ġ{ Ġa , Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġb Ġ- Ġa ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk . copy Into ( k , Ġd , Ġ 0 , Ġk . size Ġ- Ġd ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk . fill ( 0 , Ġ 0 , Ġd ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk [ 0 ] Ġ+= Ġk . sum () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġk [ 0 ] ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġproblem Ġ= Ġday 1 0 Problem Reader ( Day 1 0 :: class . java . getResource (" day 1 0 . txt "). read Text ()) ĊĠĠĠ Ġprintln (" solution Ġ= Ġ${ Day 1 0 ( problem ). solve Part 1 () }") ĊĠĠĠ Ġprintln (" solution Ġpart 2 Ġ= Ġ${ Day 1 0 ( problem ). solve Part 2 () }") Ċ }