package Ġcom . chr is wk . a oc . ad vent 2 0 2 0 Ċ Ċ import Ġcom . chr is wk . a oc . Ad vent Day Ċ import Ġcom . chr is wk . a oc . util . report Ċ Ċ class ĠDay 2 Ġ: ĠAd vent Day ( 2 0 2 0 , Ġ 2 ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġpasswords Ġ= Ġinput As Lines . map Ġ{ Ġit . to Policy And Password () Ġ} ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġmain ( args : ĠArray < String >): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Ġ= ĠDay 2 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday . part 1 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday . part 2 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfun ĠString . to Policy And Password (): ĠPair < Policy , ĠString > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( policy , Ġpassword ) Ġ= Ġthis . split (": ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( min Max , Ġletter ) Ġ= Ġpolicy . split (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( min , Ġmax ) Ġ= Ġmin Max . split ("- ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPolicy ( min . toInt (), Ġmax . toInt (), Ġletter [ 0 ]) Ġto Ġpassword . trim () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpart 1 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpasswords . count Ġ{ Ġ( policy , Ġpassword ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpolicy . valid Part 1 ( password ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġpart 2 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpasswords . count Ġ{ Ġ( policy , Ġpassword ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpolicy . valid Part 2 ( password ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠPolicy ( val Ġmin : ĠInt , Ġval Ġmax : ĠInt , Ġval Ġcharacter : ĠChar ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġvalid Part 1 ( password : ĠString ) Ġ= Ġpassword . count Ġ{ Ġit Ġ== Ġcharacter Ġ} Ġin Ġmin .. max ĊĠĠĠĠĠĠĠ Ġfun Ġvalid Part 2 ( password : ĠString ) Ġ= Ġ( password [ min - 1 ] Ġ== Ġcharacter ) Ġxor Ġ( password [ max - 1 ] Ġ== Ġcharacter ) ĊĠĠĠ Ġ} Ċ }