package Ġme . s ack cast ell on . a oc . y 2 0 2 0 čĊč Ċ import Ġme . s ack cast ell on . a oc . P uzzle č Ċ import Ġjava . nio . file . Path č Ċ import Ġkotlin . io . path . use Lines čĊč Ċ object ĠDay 0 3 Ġ: ĠP uzzle < Long > Ġ{ čĊĠĠĠ Ġoverride Ġfun Ġsolve 1 ( input : ĠPath ): ĠLong Ġ= čĊĠĠĠĠĠĠĠ Ġinput . use Lines Ġ{ Ġlines Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . fold Indexed ( 0 ) Ġ{ Ġy , Ġcount , Ġline Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line [( y Ġ* Ġ 3 ) Ġ% Ġline . length ] Ġ== Ġ'# ') Ġcount Ġ+ Ġ 1 Ġelse Ġcount čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġsolve 2 ( input : ĠPath ): ĠLong Ġ{ čĊĠĠĠĠĠĠĠ Ġclass ĠTo bo gg an Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġslo pes Ġ= ĠlistOf ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġto Ġ 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġto Ġ 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġto Ġ 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 Ġto Ġ 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġto Ġ 2 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtree Count Ġ= Ġslo pes . associate With To ( mutable Map Of ()) Ġ{ Ġ 0 L Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproduct : ĠLong Ġget () Ġ= Ġtree Count . values . reduce ( Long :: times ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcheck ( y : ĠInt , Ġline : ĠString ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtree Count . replaceAll Ġ{ Ġ( r , Ġd ), Ġcount Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġ(( y Ġ/ Ġd ) Ġ* Ġr ) Ġ% Ġline . length čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ((( y Ġ% Ġd ) Ġ== Ġ 0 ) Ġ&& Ġ( line [ i ] Ġ== Ġ'# ')) Ġcount Ġ+ Ġ 1 Ġelse Ġcount čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġinput . use Lines Ġ{ ĠTo bo gg an (). apply Ġ{ Ġit . forEach Indexed (:: check ) Ġ}. product Ġ} čĊĠĠĠ Ġ} č Ċ } čĊ