package Ġdev . paul shields . a oc . day 2 Ċ Ċ import Ġdev . paul shields . a oc . common . readFile AsString List Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġprintln (" Ġ** ĠDay Ġ 2 : ĠPassword ĠPhi lo sophy Ġ** Ġ\ n ") ĊĊĠĠĠ Ġval Ġpassword Entries Ġ= ĠreadFile AsString List ("/ day 2 / Password s Database . txt ") ĊĠĠĠĠĠĠĠ Ġ. map NotNull (:: parse Password Entry ) ĊĊĠĠĠ Ġval Ġfirst Valid Password s Count Ġ= Ġpassword Entries ĊĠĠĠĠĠĠĠ Ġ. filter (:: password IsValid By The Char Count Rule ) ĊĠĠĠĠĠĠĠ Ġ. count () ĊĊĠĠĠ Ġprintln (" There Ġare Ġ$ first Valid Password s Count Ġpasswords Ġin Ġthe Ġdatabase Ġaccording Ġto Ġthe Ġchar Ġcount Ġrule !") ĊĊĠĠĠ Ġval Ġsecond Valid Password s Count Ġ= Ġpassword Entries ĊĠĠĠĠĠĠĠ Ġ. filter (:: password IsValid By The Char Position Rule ) ĊĠĠĠĠĠĠĠ Ġ. count () ĊĊĠĠĠ Ġprintln (" There Ġare Ġ$ second Valid Password s Count Ġpasswords Ġin Ġthe Ġdatabase Ġaccording Ġto Ġthe Ġchar Ġposition Ġrule !") Ċ } Ċ Ċ fun Ġparse Password Entry ( raw Password Entry : ĠString ): ĠPassword Entry ? Ġ{ ĊĠĠĠ Ġval Ġpassword Entry Regex Ġ= ĠRegex ("( \\ d +) -( \\ d +) Ġ( \\ w ): Ġ( \\ w + )") ĊĠĠĠ Ġval Ġregex Result Ġ= Ġpassword Entry Regex . find ( raw Password Entry ) ĊĊĠĠĠ Ġreturn Ġregex Result ĊĠĠĠĠĠĠĠ Ġ? . de structured ĊĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPassword Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . component 3 ()[ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . component 1 (). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . component 2 (). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . component 4 ()) ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġpassword IsValid By The Char Count Rule ( password Entry : ĠPassword Entry ) Ġ= Ġwith ( password Entry ) Ġ{ ĊĠĠĠ Ġval Ġcount Of Required Char Ġ= Ġpassword . count Ġ{ Ġit Ġ== Ġrequired Character Ġ} ĊĠĠĠ Ġcount Of Required Char Ġin Ġminimum .. maximum Ċ } Ċ Ċ fun Ġpassword IsValid By The Char Position Rule ( password Entry : ĠPassword Entry ) Ġ= Ġwith ( password Entry ) Ġ{ ĊĠĠĠ Ġval Ġfirst Char Ġ= Ġpassword [ minimum Ġ- Ġ 1 ] ĊĠĠĠ Ġval Ġsecond Char Ġ= Ġpassword [ maximum Ġ- Ġ 1 ] ĊĊĠĠĠ Ġ( first Char Ġ== Ġrequired Character Ġ&& Ġsecond Char Ġ!= Ġrequired Character ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( first Char Ġ!= Ġrequired Character Ġ&& Ġsecond Char Ġ== Ġrequired Character ) Ċ } Ċ Ċ data Ġclass ĠPassword Entry ( ĊĠĠĠ Ġval Ġrequired Character : ĠChar , ĊĠĠĠ Ġval Ġminimum : ĠInt , ĊĠĠĠ Ġval Ġmaximum : ĠInt , ĊĠĠĠ Ġval Ġpassword : ĠString ) Ċ