package Ġme . gr ison . a oc . y 2 0 1 6 Ċ Ċ import Ġme . gr ison . a oc .* Ċ Ċ class ĠDay 0 3 Ġ: ĠDay ( 3 , Ġ 2 0 1 6 ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġtitle () Ġ= Ġ" S quares ĠWith ĠThree ĠS ides " ĊĊĠĠĠ Ġoverride Ġfun Ġpart One () Ġ= Ġtriangles ( input List . map Ġ{ Ġit . all Ints () Ġ}) ĊĊĠĠĠ Ġoverride Ġfun Ġpart Two () Ġ= Ġinput List . map Ġ{ Ġit . all Ints () Ġ}. let Ġ{ Ġh Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġvertical Ġ= ĠlistOf ( h . map Ġ{ Ġit [ 0 ] Ġ} Ġ+ Ġh . map Ġ{ Ġit [ 1 ] Ġ} Ġ+ Ġh . map Ġ{ Ġit [ 2 ] Ġ}) ĊĠĠĠĠĠĠĠ Ġtriangles ( vertical , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalid Triangle ( sides : ĠList < Int >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( a , Ġb , Ġc ) Ġ= Ġsides . sorted () ĊĠĠĠĠĠĠĠ Ġreturn Ġa Ġ+ Ġb Ġ> Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtriangles ( candidates : ĠList < List < Int >>, Ġpart 2 : ĠBoolean Ġ= Ġfalse ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( part 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġcandidates . count Ġ{ Ġvalid Triangle ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflatten ed Ġ= Ġcandidates . flatten () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġ( flatten ed . size Ġ- Ġ 2 ) Ġstep Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġflatten ed . sub List ( it , Ġit Ġ+ Ġ 3 ) Ġ}. count Ġ{ Ġvalid Triangle ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ