package Ġy 2 0 2 1 . day 1 1 Ċ Ċ import Ġcommon . Answers Ċ import Ġcommon . A oc Solution Ċ import Ġcommon . annotations . Ao CP uzzle Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ ĠDay 1 1 D umbo Oct opus (). solve The m () Ċ } Ċ Ċ @ Ao CP uzzle ( 2 0 2 1 , Ġ 1 1 ) Ċ class ĠDay 1 1 D umbo Oct opus Ġ: ĠA oc Solution Ġ{ ĊĠĠĠ Ġoverride Ġval Ġanswers Ġ= ĠAn swers ( sample Part 1 Ġ= Ġ 1 6 5 6 , Ġsample Part 2 Ġ= Ġ 1 9 5 , Ġpart 1 Ġ= Ġ 1 5 7 1 , Ġpart 2 Ġ= Ġ 3 8 7 ) ĊĊĠĠĠ Ġoverride Ġfun Ġsolve Part 1 ( input : ĠList < String >): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġher d Of D umbo Oct op uses Ġ= Ġcreate Oct op uses ( input ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġsum Of Fl ashes Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLet Ġeach Ġoct opus Ġknow Ġthat Ġthere Ġis Ġa Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠ Ġher d Of D umbo Oct op uses . forEach Ġ{ Ġit . increase Energy () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġand Ġreset Ġeach Ġoct opus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum Of Fl ashes Ġ+= Ġher d Of D umbo Oct op uses . count Ġ{ Ġit . has Fl ashed Last Step () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsum Of Fl ashes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsolve Part 2 ( input : ĠList < String >): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġher d Of D umbo Oct op uses Ġ= Ġcreate Oct op uses ( input ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġstep Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstep ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġher d Of D umbo Oct op uses . forEach Ġ{ Ġit . increase Energy () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( her d Of D umbo Oct op uses . count Ġ{ Ġit . has Fl ashed Last Step () Ġ} Ġ== Ġher d Of D umbo Oct op uses . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġstep ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Oct op uses ( input : ĠList < String >): ĠList < Oct opus > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġher d Of D umbo Oct op uses Ġ= Ġmutable Map Of < Pair < Int , ĠInt >, ĠOctopus >() ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġmap Ġof Ġoct opus ĊĠĠĠĠĠĠĠ Ġfor All ( input . first (). last Index , Ġinput . last Index ) Ġ{ Ġx , Ġy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġher d Of D umbo Oct op uses [ x Ġto Ġy ] Ġ= ĠOctopus ( initial Energy Level Ġ= ĠCharacter . get Numeric Value ( input [ y ][ x ])) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAssoci ate Ġthe Ġneighbour Ġsituation ĊĠĠĠĠĠĠĠ Ġfor All ( input . first (). last Index , Ġinput . last Index ) Ġ{ Ġx , Ġy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġx Ġto Ġy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( direction Ġin Ġdirections ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġher d Of D umbo Oct op uses [ position ]?. add Ne ighbour ( her d Of D umbo Oct op uses [ position Ġ+ Ġdirection ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġher d Of D umbo Oct op uses . values . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfor All ( last X : ĠInt , Ġlast Y : ĠInt , Ġaction : Ġ( x : ĠInt , Ġy : ĠInt )-> Unit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ( 0 .. last X )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ( 0 .. last Y )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠOctopus ( ĊĠĠĠ Ġinitial Energy Level : ĠInt Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġenergy Level : ĠInt Ġby ĠDeleg ates . observable ( initial Energy Level ) Ġ{ Ġ_, Ġ_, Ġnew Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( new Ġ== Ġ 1 0 ) Ġne ighbours . forEach Ġ{ Ġit . increase Energy () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġne ighbours : ĠMutable List < Oct opus > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġfun Ġadd Ne ighbour ( oct opus : ĠOctopus ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġoct opus ?. let ( ne ighbours :: add ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġincrease Energy () Ġ{ ĊĠĠĠĠĠĠĠ Ġenergy Level ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Fl ashed Last Step (): ĠBoolean Ġ= Ġwhen Ġ( energy Level Ġ> Ġ 9 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġtrue . also Ġ{ Ġenergy Level Ġ= Ġ 0 Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ"$ energy Level " Ċ } Ċ Ċ val Ġdirections Ġ= ĠlistOf ( ĊĠĠĠ ĠPair ( 0 , Ġ- 1 ), ĊĠĠĠ ĠPair ( 1 , Ġ- 1 ), ĊĠĠĠ ĠPair ( 1 , Ġ 0 ), ĊĠĠĠ ĠPair ( 1 , Ġ 1 ), ĊĠĠĠ ĠPair ( 0 , Ġ 1 ), ĊĠĠĠ ĠPair (- 1 , Ġ 1 ), ĊĠĠĠ ĠPair (- 1 , Ġ 0 ), ĊĠĠĠ ĠPair (- 1 , Ġ- 1 ), Ċ ) Ċ Ċ operator Ġfun ĠPair < Int , ĠInt >. plus ( other : ĠPair < Int , ĠInt >): ĠPair < Int , ĠInt > Ġ= ĊĠĠĠ Ġfirst Ġ+ Ġother . first Ġto Ġsecond Ġ+ Ġother . second Ċ