val Ġtemplate Ġ= Ġread Line () !! Ċ Ċ // Ġskip Ġblank Ġline Ċ readLine () !! Ċ Ċ val Ġrules Ġ= Ġgenerate Sequence (:: readLine ) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( elem Pair , Ġinsertion ) Ġ= Ġit . split (" Ġ-> Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Pair ( elem Pair [ 0 ], Ġelem Pair [ 1 ]), Ġinsertion [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. toMap () Ċ Ċ // Ġprefix Ġand Ġsuffix Ġwith Ġsomething Ġto Ġmake Ġsure Ġall Ġcharacters Ġare Ġdouble Ġcounted Ċ var Ġelem Pairs Ġ= Ġ(" _" Ġ+ Ġtemplate Ġ+ Ġ"_ "). window ed ( 2 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPair ( Pair ( it [ 0 ], Ġit [ 1 ]), Ġ 1 L ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. groupBy ({ Ġit . first Ġ}, Ġ{ Ġit . second Ġ}) ĊĠĠĠĠĠĠĠ Ġ. map Values Ġ{ Ġ Ġ(_, Ġcounts ) Ġ-> Ġcounts . sum () Ġ} Ċ Ċ val Ġchar Counts Ġ= Ġelem Pairs . flatMap Ġ{ Ġ( char Pair , Ġcount ) Ġ-> ĠlistOf ( Pair ( char Pair . first , Ġcount ), ĠPair ( char Pair . second , Ġcount )) Ġ} ĊĠĠĠĠĠĠĠ Ġ. groupBy ({ Ġit . first Ġ}, Ġ{ Ġit . second Ġ}) ĊĠĠĠĠĠĠĠ Ġ. map Values Ġ{ Ġ Ġ(_, Ġcounts ) Ġ-> Ġcounts . sum () Ġ/ Ġ 2 Ġ} Ġ Ġ// Ġbecause Ġwe 've Ġdouble Ġcounted ĊĠĠĠĠĠĠĠ Ġ. to Mutable Map () Ċ Ċ char Counts . remove ('_ ') Ċ Ċ // ĠA Ġmixture Ġof ĠFP Ġand Ġimper ative Ġ- Ġfor give Ġmy Ġl az iness Ġ: p Ċ for Ġ( i Ġin Ġ 1 .. 4 0 ) Ġ{ ĊĠĠĠ Ġelem Pairs Ġ= Ġelem Pairs . flatMap Ġ{ Ġ( char Pair , Ġcount ) Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġ( ch 1 , Ġch 2 ) Ġ= Ġchar Pair ĊĠĠĠĠĠĠĠ Ġif Ġ( ch 1 Ġ== Ġ'_' Ġ|| Ġch 2 Ġ== Ġ'_ ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Pair ( char Pair , Ġcount )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinsertion Ġ= Ġrules [ char Pair ] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchar Counts . compute ( insertion , Ġ{ Ġ_, Ġold Val Ġ-> Ġ( old Val Ġ?: Ġ 0 ) Ġ+ Ġcount Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Pair ( Pair ( ch 1 , Ġinsertion ), Ġcount ), ĠPair ( Pair ( insertion , Ġch 2 ), Ġcount )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy ({ Ġit . first Ġ}, Ġ{ Ġit . second Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Values Ġ{ Ġ(_, Ġcounts ) Ġ-> Ġcounts . sum () Ġ} Ċ } Ċ Ċ // println ( char Counts ) Ċ println ( char Counts . max Of Ġ{ Ġit . value Ġ} Ġ- Ġchar Counts . min Of Ġ{ Ġit . value Ġ}) Ċ