/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 6 Ġby ĠT odd ĠG ins berg Ċ Ġ*/ Ċ Ċ package Ġcom . gin s berg . ad vent 2 0 1 6 Ċ Ċ import Ġcom . gin s berg . ad vent 2 0 1 6 . utils . as Digit Ċ import Ġcom . gin s berg . ad vent 2 0 1 6 . utils . to Hex Ċ import Ġjava . security . Message Digest ĊĊ Ċ /** Ċ Ġ* ĠAd vent Ġof ĠCode Ġ- ĠDay Ġ 5 : ĠDecember Ġ 5 , Ġ 2 0 1 6 Ċ Ġ* Ċ Ġ* ĠFrom Ġhttp :// ad vent of code . com / 2 0 1 6 / day / 5 Ċ Ġ* Ċ Ġ*/ Ċ class ĠDay 0 5 ( private Ġval Ġdoor Id : ĠString ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmd 5 Digest er Ġ= ĠMessage Digest . getInstance (" MD 5 ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGiven Ġthe Ġactual ĠDoor ĠID , Ġwhat Ġis Ġthe Ġpassword ? ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsolve Part 1 (): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġgenerate Hashes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit [ 5 ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( separator Ġ= Ġ"") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGiven Ġthe Ġactual ĠDoor ĠID Ġand Ġthis Ġnew Ġmethod , Ġwhat Ġis Ġthe Ġpassword ? ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsolve Part 2 (): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġgenerate Hashes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPair ( it [ 5 ], Ġit [ 6 ]) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . first . is Digit () Ġ&& Ġit . first . as Digit () Ġ< Ġ 8 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct By Ġ{ Ġit . first Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . first Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( separator Ġ= Ġ"") ĊĊĠĠĠ Ġprivate Ġfun Ġmd 5 ( text : ĠString ): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġmd 5 Digest er . digest ( text . toByteArray ()). to Hex () ĊĊĠĠĠ Ġ// ĠCommon Ġsequence Ġlogic Ġ( increment , Ġhash , Ġfilter ) ĊĠĠĠ Ġprivate Ġfun Ġgenerate Hashes (): ĠSequence < String > Ġ= ĊĠĠĠĠĠĠĠ Ġgenerate Sequence ( 0 , ĠInt :: inc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġmd 5 ("$ door Id $ it ")} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . startsWith (" 0 0 0 0 0 ") Ġ} Ċ } Ċ