package Ġcom . github . danger ground . a oc 2 0 2 0 Ċ Ċ import Ġcom . github . danger ground . a oc 2 0 2 0 . util . Day Input Ċ Ċ class ĠDay 7 ( input : ĠList < String >) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbag rules Ġ= Ġinput . map Ġ{ ĠBag Rule ( it ) Ġ}. map Ġ{ Ġit . color Ġto Ġit . inner B ags Ġ}. toMap () ĊĊĠĠĠ Ġfun Ġget Inner Bag Count ( color : ĠBag Color ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Ġ= Ġbag rules [ color ] !!. entries . map Ġ{ Ġit . value Ġ}. sum () ĊĠĠĠĠĠĠĠ Ġbag rules [ color ] !!. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ+= Ġget Inner Bag Count ( it . key ) Ġ* Ġit . value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtotal ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcan Contain Color ( color : ĠBag Color , Ġsearch Color : ĠBag Color ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bag rules [ color ] !!. containsKey ( search Color )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbag rules [ color ] !!. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( can Contain Color ( it . key , Ġsearch Color )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpart 1 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbag rules . filter Ġ{ Ġcan Contain Color ( it . key , Ġ" sh iny Ġgold ") Ġ}. count () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpart 2 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Inner Bag Count (" sh iny Ġgold ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ type alias ĠBag Color Ġ= ĠString Ċ Ċ class ĠBag Rule ( input : ĠString ) Ġ{ ĊĊĠĠĠ Ġval Ġcolor : ĠBag Color ĊĠĠĠ Ġval Ġinner B ags Ġ= Ġmutable Map Of < Bag Color , ĠInt >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġinput . split (" contain ") ĊĠĠĠĠĠĠĠ Ġcolor Ġ= Ġstr 2 Color ( parts [ 0 ]) ĊĠĠĠĠĠĠĠ Ġparts [ 1 ]. trim (). split ("," ). filter Ġ{ Ġit . trim () Ġ!= Ġ" no Ġother Ġbags ." Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠRegex ("( \\ d +) Ġ( .* ) "). match Ent ire ( it . trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinner B ags [ str 2 Color ( result . group Values [ 2 ])] Ġ= Ġresult . group Values [ 1 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstr 2 Color ( string : ĠString ) Ġ= Ġstring . replace ( Regex (" b ags ? \\. ? "), Ġ""). trim () Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġinput Ġ= ĠDay Input . asString List ( 7 ) ĊĠĠĠ Ġval Ġday 7 Ġ= ĠDay 7 ( input ) ĊĊĠĠĠ Ġ// Ġpart Ġ 1 ĊĠĠĠ Ġval Ġpart 1 Ġ= Ġday 7 . part 1 () ĊĠĠĠ Ġprintln (" result Ġpart Ġ 1 : Ġ$ part 1 ") ĊĊĠĠĠ Ġ// Ġpart 2 ĊĠĠĠ Ġval Ġpart 2 Ġ= Ġday 7 . part 2 () ĊĠĠĠ Ġprintln (" result Ġpart Ġ 2 : Ġ$ part 2 ") Ċ }