package Ġcom . github . dav io . a oc . y 2 0 2 0 Ċ Ċ import Ġcom . github . dav io . a oc . general . call Ċ import Ġcom . github . dav io . a oc . general . getInput As Sequence Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ ĠDay 3 . getResult Part 1 () ĊĠĠĠ ĠDay 3 . getResult Part 2 () Ċ } Ċ Ċ object ĠDay 3 Ġ{ ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* Ġ--- ĠDay Ġ 3 : ĠTo bo gg an ĠTra jectory Ġ--- ĊĊĠĠĠ ĠWith Ġthe Ġto bo gg an Ġlogin Ġproblems Ġresolved , Ġyou Ġset Ġoff Ġtoward Ġthe Ġair port . ĊĠĠĠ ĠWhile Ġtravel Ġby Ġto bo gg an Ġmight Ġbe Ġeasy , Ġit 's Ġcertainly Ġnot Ġsafe : Ġthere 's Ġvery Ġminimal Ġste ering Ġand Ġthe Ġarea Ġis Ġcovered Ġin Ġtrees . ĊĠĠĠ ĠYou 'll Ġneed Ġto Ġsee Ġwhich Ġangles Ġwill Ġtake Ġyou Ġnear Ġthe Ġfew est Ġtrees . ĊĊĠĠĠ ĠDue Ġto Ġthe Ġlocal Ġge ology , Ġtrees Ġin Ġthis Ġarea Ġonly Ġgrow Ġon Ġexact Ġinteger Ġcoordinates Ġin Ġa Ġgrid . ĊĠĠĠ ĠYou Ġmake Ġa Ġmap Ġ( your Ġpuzzle Ġinput ) Ġof Ġthe Ġopen Ġsquares Ġ( .) Ġand Ġtrees Ġ(# ) Ġyou Ġcan Ġsee . ĠFor Ġexample : ĊĊĠĠĠ Ġ.. ## ....... ĊĠĠĠ Ġ# ... # ... # .. ĊĠĠĠ Ġ. # .... # .. #. ĊĠĠĠ Ġ.. # .# ... # .# ĊĠĠĠ Ġ. # ... ## .. #. ĊĠĠĠ Ġ.. #. ## ..... ĊĠĠĠ Ġ. # .# .# .... # ĊĠĠĠ Ġ. # ........ # ĊĠĠĠ Ġ# . ## ... # ... ĊĠĠĠ Ġ# ... ## .... # ĊĠĠĠ Ġ. # .. # ... # .# ĊĊĠĠĠ ĠThese Ġaren 't Ġthe Ġonly Ġtrees , Ġthough ; Ġdue Ġto Ġsomething Ġyou Ġread Ġabout Ġonce Ġinvol ving Ġar b ore al Ġgen etics Ġand Ġbio me Ġstability , ĊĠĠĠ Ġthe Ġsame Ġpattern Ġrepe ats Ġto Ġthe Ġright Ġmany Ġtimes : ĊĊĠĠĠ Ġ.. ## .... ..... ## .... ..... ## .... ..... ## .... ..... ## .... ..... ## ....... Ġ Ġ---> ĊĠĠĠ Ġ# ... # ... # .. # ... # ... # .. # ... # ... # .. # ... # ... # .. # ... # ... # .. # ... # ... # .. ĊĠĠĠ Ġ. # .... # .. # .. # .... # .. # .. # .... # .. # .. # .... # .. # .. # .... # .. # .. # .... # .. #. ĊĠĠĠ Ġ.. # .# ... # .# .. # .# ... # .# .. # .# ... # .# .. # .# ... # .# .. # .# ... # .# .. # .# ... # .# ĊĠĠĠ Ġ. # ... ## .. # .. # ... ## .. # .. # ... ## .. # .. # ... ## .. # .. # ... ## .. # .. # ... ## .. #. ĊĠĠĠ Ġ.. #. ## ....... #. ## ....... #. ## ....... #. ## ....... #. ## ....... #. ## ..... Ġ Ġ---> ĊĠĠĠ Ġ. # .# .# .... # .# .# .# .... # .# .# .# .... # .# .# .# .... # .# .# .# .... # .# .# .# .... # ĊĠĠĠ Ġ. # ........ # .# ........ # .# ........ # .# ........ # .# ........ # .# ........ # ĊĠĠĠ Ġ# . ## ... # ... #. ## ... # ... #. ## ... # ... #. ## ... # ... #. ## ... # ... #. ## ... # ... ĊĠĠĠ Ġ# ... ## .... ## ... ## .... ## ... ## .... ## ... ## .... ## ... ## .... ## ... ## .... # ĊĠĠĠ Ġ. # .. # ... # .# .# .. # ... # .# .# .. # ... # .# .# .. # ... # .# .# .. # ... # .# .# .. # ... # .# Ġ Ġ---> ĊĊĠĠĠ ĠYou Ġstart Ġon Ġthe Ġopen Ġsquare Ġ( .) Ġin Ġthe Ġtop - left Ġcorner Ġand Ġneed Ġto Ġreach Ġthe Ġbottom Ġ( below Ġthe Ġbottom - most Ġrow Ġon Ġyour Ġmap ). ĊĊĠĠĠ ĠThe Ġto bo gg an Ġcan Ġonly Ġfollow Ġa Ġfew Ġspecific Ġslo pes Ġ( you Ġopt ed Ġfor Ġa Ġche aper Ġmodel Ġthat Ġpref ers Ġr ational Ġnumbers ); ĊĠĠĠ Ġstart Ġby Ġcounting Ġall Ġthe Ġtrees Ġyou Ġwould Ġencounter Ġfor Ġthe Ġslope Ġright Ġ 3 , Ġdown Ġ 1 : ĊĊĠĠĠ ĠFrom Ġyour Ġstarting Ġposition Ġat Ġthe Ġtop - left , Ġcheck Ġthe Ġposition Ġthat Ġis Ġright Ġ 3 Ġand Ġdown Ġ 1 . ĊĠĠĠ ĠThen , Ġcheck Ġthe Ġposition Ġthat Ġis Ġright Ġ 3 Ġand Ġdown Ġ 1 Ġfrom Ġthere , Ġand Ġso Ġon Ġuntil Ġyou Ġgo Ġpast Ġthe Ġbottom Ġof Ġthe Ġmap . ĊĊĠĠĠ ĠThe Ġlocations Ġyou 'd Ġcheck Ġin Ġthe Ġabove Ġexample Ġare Ġmarked Ġhere Ġwith ĠO Ġwhere Ġthere Ġwas Ġan Ġopen Ġsquare Ġand ĠX Ġwhere Ġthere Ġwas Ġa Ġtree : ĊĊĠĠĠ Ġ.. ## .... ..... ## .... ..... ## .... ..... ## .... ..... ## .... ..... ## ....... Ġ Ġ---> ĊĠĠĠ Ġ# .. O # ... # .. # ... # ... # .. # ... # ... # .. # ... # ... # .. # ... # ... # .. # ... # ... # .. ĊĠĠĠ Ġ. # .... X .. # .. # .... # .. # .. # .... # .. # .. # .... # .. # .. # .... # .. # .. # .... # .. #. ĊĠĠĠ Ġ.. # .# ... # O # .. # .# ... # .# .. # .# ... # .# .. # .# ... # .# .. # .# ... # .# .. # .# ... # .# ĊĠĠĠ Ġ. # ... ## .. # .. X ... ## .. # .. # ... ## .. # .. # ... ## .. # .. # ... ## .. # .. # ... ## .. #. ĊĠĠĠ Ġ.. #. ## ....... #. X # ....... #. ## ....... #. ## ....... #. ## ....... #. ## ..... Ġ Ġ---> ĊĠĠĠ Ġ. # .# .# .... # .# .# .# . O .. # .# .# .# .... # .# .# .# .... # .# .# .# .... # .# .# .# .... # ĊĠĠĠ Ġ. # ........ # .# ........ X .# ........ # .# ........ # .# ........ # .# ........ # ĊĠĠĠ Ġ# . ## ... # ... #. ## ... # ... #. X # ... # ... #. ## ... # ... #. ## ... # ... #. ## ... # ... ĊĠĠĠ Ġ# ... ## .... ## ... ## .... ## ... # X .... ## ... ## .... ## ... ## .... ## ... ## .... # ĊĠĠĠ Ġ. # .. # ... # .# .# .. # ... # .# .# .. # ... X .# .# .. # ... # .# .# .. # ... # .# .# .. # ... # .# Ġ Ġ---> ĊĊĠĠĠ ĠIn Ġthis Ġexample , Ġtra ver sing Ġthe Ġmap Ġusing Ġthis Ġslope Ġwould Ġcause Ġyou Ġto Ġencounter Ġ 7 Ġtrees . ĊĊĠĠĠ ĠStarting Ġat Ġthe Ġtop - left Ġcorner Ġof Ġyour Ġmap Ġand Ġfollowing Ġa Ġslope Ġof Ġright Ġ 3 Ġand Ġdown Ġ 1 , Ġhow Ġmany Ġtrees Ġwould Ġyou Ġencounter ? ĊĠĠĠ Ġ* ĊĠĠĠ Ġ* Ġ--- ĠPart ĠTwo Ġ--- ĊĊĠĠĠ ĠTime Ġto Ġcheck Ġthe Ġrest Ġof Ġthe Ġslo pes Ġ- Ġyou Ġneed Ġto Ġminimize Ġthe Ġprobability Ġof Ġa Ġsudden Ġar b ore al Ġstop , Ġafter Ġall . ĊĊĠĠĠ ĠDetermine Ġthe Ġnumber Ġof Ġtrees Ġyou Ġwould Ġencounter Ġif , Ġfor Ġeach Ġof Ġthe Ġfollowing Ġslo pes , ĊĠĠĠ Ġyou Ġstart Ġat Ġthe Ġtop - left Ġcorner Ġand Ġtraverse Ġthe Ġmap Ġall Ġthe Ġway Ġto Ġthe Ġbottom : ĊĊĠĠĠ ĠRight Ġ 1 , Ġdown Ġ 1 . ĊĠĠĠ ĠRight Ġ 3 , Ġdown Ġ 1 . Ġ( This Ġis Ġthe Ġslope Ġyou Ġalready Ġchecked .) ĊĠĠĠ ĠRight Ġ 5 , Ġdown Ġ 1 . ĊĠĠĠ ĠRight Ġ 7 , Ġdown Ġ 1 . ĊĠĠĠ ĠRight Ġ 1 , Ġdown Ġ 2 . ĊĊĠĠĠ ĠIn Ġthe Ġabove Ġexample , Ġthese Ġslo pes Ġwould Ġfind Ġ 2 , Ġ 7 , Ġ 3 , Ġ 4 , Ġand Ġ 2 Ġtree ( s ) Ġrespectively ; Ġmultip lied Ġtogether , Ġthese Ġproduce Ġthe Ġanswer Ġ 3 3 6 . ĊĊĠĠĠ ĠWhat Ġdo Ġyou Ġget Ġif Ġyou Ġmultiply Ġtogether Ġthe Ġnumber Ġof Ġtrees Ġencountered Ġon Ġeach Ġof Ġthe Ġlisted Ġslo pes ? ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġfun Ġget Result Part 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġget Input As Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. count Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Tree Ġ= Ġhas Tree AtIndex ( it , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġcalculate New Index ( it , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Tree ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. call Ġ{ Ġprintln ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate New Index ( line : ĠString , Ġindex : ĠInt , Ġslope Movement Right : ĠInt Ġ= Ġ 3 ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġline . length ĊĠĠĠĠĠĠĠ Ġreturn Ġ( index Ġ+ Ġslope Movement Right ) Ġ% Ġlength ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Tree AtIndex ( line : ĠString , Ġindex : ĠInt ) Ġ= Ġline [ index ] Ġ== Ġ'#' ĊĊĠĠĠ Ġprivate Ġval Ġslo pes Ġ= Ġsequence Of ( ĊĠĠĠĠĠĠĠ ĠPair ( 1 , Ġ 1 ), ĠPair ( 3 , Ġ 1 ), ĠPair ( 5 , Ġ 1 ), ĠPair ( 7 , Ġ 1 ), ĠPair ( 1 , Ġ 2 ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġget Result Part 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġslo pes . map Ġ{ Ġslope Ġ-> Ġget Trees For S lope ( slope ). to Long () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. reduce Ġ{ Ġacc , Ġi Ġ-> Ġacc Ġ* Ġi Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. call Ġ{ Ġprintln ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Trees For S lope ( slope : ĠPair < Int , ĠInt >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġline Pos Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġreturn Ġget Input As Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Process Ġ= Ġline Pos Ġ% Ġslope . second Ġ== Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Pos ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Process ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. count Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Tree Ġ= Ġhas Tree AtIndex ( it , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġcalculate New Index ( it , Ġindex , Ġslope . first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Tree ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }