package Ġru . tim ak den . ad vent of code . year 2 0 1 5 . day 1 1 Ċ Ċ import Ġru . tim ak den . ad vent of code . measure Ċ import Ġkotlin . time . Experimental Time Ċ Ċ @ Experimental Time Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġmeasure Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnew Password Ġ= Ġsolve ( input ) ĊĠĠĠĠĠĠĠ Ġprintln (" Part ĠOne : Ġ$ new Password ") ĊĊĠĠĠĠĠĠĠ Ġnew Password Ġ= Ġsolve ( new Password ) ĊĠĠĠĠĠĠĠ Ġprintln (" Part ĠTwo : Ġ$ new Password ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġsolve ( input : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġvar Ġnew Password Ġ= Ġincrement Password ( input ) ĊĊĠĠĠ Ġwhile Ġ(! check Password ( new Password )) Ġ{ ĊĠĠĠĠĠĠĠ Ġnew Password Ġ= Ġincrement Password ( new Password ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġnew Password Ċ } Ċ Ċ fun Ġcheck Password ( password : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġval ĠcharArray Ġ= Ġpassword . toCharArray () ĊĊĠĠĠ Ġval Ġfirst Requirement Ġ= ĠcharArray . indices . any Ġ{ ĊĠĠĠĠĠĠĠ Ġit Ġ+ Ġ 2 Ġ<= ĠcharArray . last Index Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcharArray [ it Ġ+ Ġ 1 ] Ġ== ĠcharArray [ it ] Ġ+ Ġ 1 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcharArray [ it Ġ+ Ġ 2 ] Ġ== ĠcharArray [ it ] Ġ+ Ġ 2 ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġsecond Requirement Ġ= Ġ"[ ^ i ol ] ". to Regex (). contains Match In ( password ) ĊĠĠĠ Ġval Ġthird Requirement Ġ= Ġ"( .) \\ 1 .* ( .) \\ 2 ". to Regex (). contains Match In ( password ) ĊĊĠĠĠ Ġreturn Ġfirst Requirement Ġ&& Ġsecond Requirement Ġ&& Ġthird Requirement Ċ } Ċ Ċ private Ġfun Ġincrement Password ( old Password : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġval ĠcharArray Ġ= Ġold Password . toCharArray () ĊĠĠĠ Ġvar ĠstartIndex Ġ= ĠcharArray . last Index ĊĊĠĠĠ Ġwhile Ġ( char Array [ startIndex ] Ġ== Ġ' z ') Ġ{ ĊĠĠĠĠĠĠĠ ĠstartIndex -- ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ( startIndex .. char Array . last Index ). forEach Ġ{ ĊĠĠĠĠĠĠĠ ĠcharArray [ it ] Ġ= ĠcharArray [ it ] Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! char Array [ it ]. is Letter ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcharArray [ it ] Ġ= Ġ' a ' ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠString ( char Array ) Ċ } Ċ