package Ġdays . a oc 2 0 2 0 Ċ Ċ import Ġdays . Day Ċ Ċ class ĠDay 7 : ĠDay ( 2 0 2 0 , Ġ 7 ) Ġ{ ĊĠĠĠ Ġfun Ġcreate Bag List ( list : ĠList < String >): ĠMap < String , Bag > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbags : ĠMutable Map < String , Bag > Ġ= Ġmutable Map Of () ĊĊĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRegex ("( \\ w + Ġ\\ w +) "). find ( it )?. de structured ?. let Ġ{ Ġ( bag Descriptor ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbags . put If Absent ( bag Descriptor , ĠBag ( bag Descriptor )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbag Ġ= Ġbags [ bag Descriptor ] !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRegex ("( \\ d +) Ġ( \\ w + Ġ\\ w +) Ġbag "). findAll ( it )?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . de structured ?. let Ġ{ Ġ( count , Ġdescriptor ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbags . put If Absent ( descriptor , ĠBag ( descriptor )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbag . desc endants . add ( Pair ( b ags [ descriptor ] !! , Ġcount . toInt ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbags [ descriptor ] !!. ance stors . add ( bag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbags ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcount Desc end ents ( bag : ĠBag ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġbag . desc endants . map Ġ{ Ġ( contained Bag , Ġnumber ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdesc endants Ġ= Ġcount Desc end ents ( contained Bag ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Ġ* Ġif Ġ( desc endants Ġ> Ġ 0 ) Ġdesc endants Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. sum () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart Two (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbags Ġ= Ġcreate Bag List ( input List ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcount Desc end ents ( b ags [" sh iny Ġgold "] !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart One (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbags Ġ= Ġcreate Bag List ( input List ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcount An cestors ( b ags [" sh iny Ġgold "] !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBag ( val Ġdescriptor : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdesc endants : ĠMutable List < Pair < Bag , ĠInt >> Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġan cestors : ĠMutable Set < Bag > Ġ= Ġmutable Set Of () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcount An cestors ( bag : ĠBag ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtraverse An cestors ( bag , Ġmutable Set Of ()). count () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtraverse An cestors ( bag : ĠBag , Ġbags : ĠMutable Set < Bag >): ĠMutable Set < Bag > Ġ{ ĊĠĠĠĠĠĠĠ Ġbags . addAll ( bag . ance stors ) ĊĠĠĠĠĠĠĠ Ġbag . ance stors . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtraverse An cestors ( it , Ġbags ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbags ĊĠĠĠ Ġ} ĊĊ Ċ }