import Ġad vent of code . BigInteger Map Ċ import Ġad vent of code . count Of Each Character Ċ import Ġad vent of code . run Day Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġtest Input Ġ= Ġ""" ĊĠĠĠĠĠĠĠ ĠNN CB ĊĊĠĠĠĠĠĠĠ ĠCH Ġ-> ĠB ĊĠĠĠĠĠĠĠ ĠHH Ġ-> ĠN ĊĠĠĠĠĠĠĠ ĠCB Ġ-> ĠH ĊĠĠĠĠĠĠĠ ĠN H Ġ-> ĠC ĊĠĠĠĠĠĠĠ ĠH B Ġ-> ĠC ĊĠĠĠĠĠĠĠ ĠHC Ġ-> ĠB ĊĠĠĠĠĠĠĠ ĠH N Ġ-> ĠC ĊĠĠĠĠĠĠĠ ĠNN Ġ-> ĠC ĊĠĠĠĠĠĠĠ ĠB H Ġ-> ĠH ĊĠĠĠĠĠĠĠ ĠNC Ġ-> ĠB ĊĠĠĠĠĠĠĠ ĠNB Ġ-> ĠB ĊĠĠĠĠĠĠĠ ĠBN Ġ-> ĠB ĊĠĠĠĠĠĠĠ ĠBB Ġ-> ĠN ĊĠĠĠĠĠĠĠ ĠBC Ġ-> ĠB ĊĠĠĠĠĠĠĠ ĠCC Ġ-> ĠN ĊĠĠĠĠĠĠĠ ĠCN Ġ-> ĠC ĊĠĠĠ Ġ""" . trim Indent () ĊĠĠĠ Ġrun Day ( ĊĠĠĠĠĠĠĠ Ġday Ġ= ĠDay 1 4 :: class , ĊĠĠĠĠĠĠĠ Ġtest Input Ġ= Ġtest Input , ĊĠĠĠĠĠĠĠ Ġtest Answer 1 Ġ= Ġ 1 5 8 8 , ĊĠĠĠĠĠĠĠ Ġtest Answer 2 Ġ= Ġ 2 1 8 8 1 8 9 6 9 3 5 2 9 ĊĠĠĠ Ġ) Ċ } Ċ Ċ open Ġclass ĠDay 1 4 ( static Input : ĠString ? Ġ= Ġnull ) Ġ: ĠY 2 0 2 1 Day ( 1 4 , Ġstatic Input ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġinput Ġ= Ġfetch Input () ĊĊĠĠĠ Ġprivate Ġval Ġtemplate Ġ= Ġinput [ 0 ] ĊĠĠĠ Ġprivate Ġval Ġrules : ĠMutable Map < Pair < Char , ĠChar >, ĠChar > Ġ= Ġhash Map Of () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . filter Ġ{ Ġit . contains (" -> ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġrules [ Pair ( it [ 0 ], Ġit [ 1 ])] Ġ= Ġit [ 6 ] Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . reset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart 1 (): ĠNumber ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġstr Ġ= Ġtemplate ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Str Ġ= ĠStringBuffer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr . indices . forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Str . append ( str [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( str . length Ġ> Ġi Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġrules . get ( Pair ( str [ i ], Ġstr [ i Ġ+ Ġ 1 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rule Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Str . append ( rule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr Ġ= Ġnext Str . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġstr . count Of Each Character () ĊĠĠĠĠĠĠĠ Ġreturn Ġmap . max Of Ġ{ Ġit . value Ġ} Ġ- Ġmap . min Of Ġ{ Ġit . value Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart 2 (): ĠNumber ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdict Ġ= ĠBigInteger Map < Pair < Char , ĠChar >>() ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġtemplate . count Of Each Character () ĊĊĠĠĠĠĠĠĠ Ġtemplate . indices . forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( template . length Ġ> Ġi Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdict . inc ( Pair ( template [ i ], Ġtemplate [ i Ġ+ Ġ 1 ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 4 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Dict Ġ= ĠBigInteger Map < Pair < Char , ĠChar >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdict . forEach Ġ{ Ġ( pair , Ġc ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Insert Ġ= Ġrules [ pair ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Insert Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount [ to Insert ] Ġ+= Ġc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Dict [ Pair ( pair . first , Ġto Insert )] Ġ+= Ġc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Dict [ Pair ( to Insert , Ġpair . second )] Ġ+= Ġc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdict Ġ= Ġnew Dict ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcount . max Of Ġ{ Ġit . value Ġ} Ġ- Ġcount . min Of Ġ{ Ġit . value Ġ} ĊĠĠĠ Ġ} Ċ } Ċ