package Ġd cp . day 2 8 1 Ċ // Ġday 2 8 1 . kt Ċ // ĠBy ĠSeb astian ĠRa aph or st , Ġ 2 0 2 0 . Ċ Ċ type alias ĠRow Ġ= ĠList < Int > Ċ type alias ĠMatrix Ġ= ĠList < Row > Ċ type alias ĠCollect ive Row Ġ= ĠList < Int > Ċ type alias ĠCollect ive Matrix Ġ= ĠList < Collect ive Row > Ċ type alias ĠRow Index Ġ= ĠInt Ċ Ċ fun Ġfind Vertical Line ( matrix : ĠMatrix ): ĠRow Index Ġ{ ĊĠĠĠ Ġif Ġ( matrix . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĊĠĠĠ Ġfun Ġmatrix To Collect ive Matrix ( matrix : ĠMatrix ): ĠCollect ive Matrix Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġrow To Collect ive Row ( row : ĠRow ): ĠCollect ive Row Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow . fold ( emptyList ()) Ġ{ Ġacc , Ġi Ġ-> Ġif Ġ( acc . isEmpty ()) ĠlistOf ( i ) Ġelse Ġacc Ġ+ ĠlistOf ( acc . last () Ġ+ Ġi ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmatrix . map (:: row To Collect ive Row ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠWe Ġconvert Ġthe Ġrow Ġrepresentations Ġ( e . g . Ġ 2 , Ġ 3 , Ġ 3 , Ġ 2 ) Ġto Ġcollect ive Ġrepresentations Ġ( e . g . Ġ 2 , Ġ 5 , Ġ 8 , Ġ 1 0 ). ĊĠĠĠ Ġval Ġcollect ive Matrix Ġ= Ġmatrix To Collect ive Matrix ( matrix ) ĊĊĠĠĠ Ġ// ĠAssert Ġfirst Ġthat Ġeach Ġcollect ive Ġmatrix Ġhas Ġthe Ġsame Ġlength . ĊĠĠĠ Ġval Ġrow Length Ġ= Ġcollect ive Matrix . first (). last () ĊĠĠĠ Ġrequire ( collect ive Matrix . all Ġ{ Ġit . last () Ġ== Ġrow Length Ġ} ){ " Rows Ġmust Ġall Ġhave Ġthe Ġsame Ġlength ." } ĊĊĠĠĠ Ġ// ĠThen Ġwe Ġfind Ġwhich Ġnumber Ġappears Ġthe Ġmost Ġtimes Ġin Ġthe Ġcollect ive Ġrepresentations . ĠThis Ġmakes Ġsense Ġbecause ĊĠĠĠ Ġ// Ġeach Ġnumber Ġcan Ġonly Ġappear Ġonce Ġin Ġeach Ġcollect ive Ġrow , Ġso Ġchoosing Ġthe Ġnumber Ġthat Ġappears Ġthe Ġmost Ġmeans ĊĠĠĠ Ġ// Ġhaving Ġto Ġch op Ġthrough Ġthe Ġleast Ġnumber Ġof Ġrows Ġthat Ġdon 't Ġhave Ġa Ġse am Ġat Ġthat Ġnumber . ĠWe Ġignore Ġthe Ġlast ĊĠĠĠ Ġ// Ġnumber Ġbecause Ġthat Ġwould Ġbe Ġche ating Ġand Ġthe Ġobvious Ġsolution , Ġsince Ġit Ġappears Ġin Ġevery Ġrow . ĊĠĠĠ Ġval Ġall Values Ġ= Ġcollect ive Matrix . flatten () ĊĠĠĠ Ġreturn Ġ( 1 Ġuntil Ġrow Length ). map Ġ{ Ġi Ġ-> Ġi Ġto Ġall Values . count { it Ġ== Ġi }}. max By Ġ{ Ġit . second Ġ} ?. first Ġ?: ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Something Ġwent Ġdis astro us ly Ġwrong .") Ċ }