package Ġa oc 2 0 1 8 Ċ Ċ object ĠExercise 0 2 Ġ{ ĊĠĠĠ Ġfun Ġletter Freq ( word : ĠString ): ĠPair < Int , ĠInt > Ġ= ĊĠĠĠĠĠĠĠ Ġword . groupBy ({ Ġit Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. entries ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ( Pair ( 0 , Ġ 0 ), Ġ{ Ġacc , Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġv . value . count () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Ġ== Ġ 2 ) Ġ 1 Ġelse Ġacc . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Ġ== Ġ 3 ) Ġ 1 Ġelse Ġacc . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġfun Ġchecksum Boxes ( lines : ĠList < String >): ĠInt Ġ= Ġwith ( ĊĠĠĠĠĠĠĠ Ġlines . map (:: letter Freq ). reduce ({ Ġacc , Ġv Ġ-> Ġacc Ġ+ Ġv })) Ġ{ Ġfirst Ġ* Ġsecond Ġ} ĊĊĠĠĠ Ġfun Ġsingle Character Diff ( str 1 : ĠString ?, Ġstr 2 : ĠString ?): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( str 1 Ġ== Ġnull Ġ|| Ġstr 2 Ġ== Ġnull Ġ|| Ġstr 1 . length Ġ!= Ġstr 2 . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġdiff Position : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġstr 1 . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( str 1 [ i ] Ġ!= Ġstr 2 [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( diff Position Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Position Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdiff Position ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Box ( lines : ĠList < String >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġrest : ĠList < String > ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( w 1 Ġin Ġlines ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrest Ġ= Ġlines . drop ( 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw 2 Ġ= Ġrest . find Ġ{ Ġw 2 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Character Diff ( w 1 , Ġw 2 ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( w 2 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= Ġsingle Character Diff ( w 1 , Ġw 2 ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġw 1 . substring ( 0 , Ġdiff ) Ġ+ Ġw 1 . substring ( diff Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ" ?" ĊĠĠĠ Ġ} Ċ } Ċ