package Ġio . github . aar jav p . a oc . day 1 4 Ċ Ċ import Ġio . github . aar jav p . a oc . day 1 4 . Day 1 4 . Rule Ċ import Ġio . kot est . matchers . collections . should Contain Exactly In Any Order Ċ import Ġio . kot est . matchers . long s . shouldBe Exactly Ċ import Ġio . kot est . matchers . maps . should Contain Exactly Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠDay 1 4 Test Ġ{ ĊĊĠĠĠ Ġval Ġsolution Ġ= ĠDay 1 4 () ĊĠĠĠ Ġ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 () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Parse () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġsolution . parse State ( test Input . line Sequence ()) ĊĊĠĠĠĠĠĠĠ Ġstate . rules Ġshould Contain Exactly In Any Order ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" CH ", Ġ' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" HH ", Ġ' N '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" CB ", Ġ' H '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" NH ", Ġ' C '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" HB ", Ġ' C '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" HC ", Ġ' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" HN ", Ġ' C '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" NN ", Ġ' C '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" BH ", Ġ' H '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" NC ", Ġ' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" NB ", Ġ' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" BN ", Ġ' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" BB ", Ġ' N '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" BC ", Ġ' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" CC ", Ġ' N '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRule (" CN ", Ġ' C '), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġstate . pair Counts Ġshould Contain Exactly Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" NN " Ġto Ġ 1 , Ġ" NC " Ġto Ġ 1 , Ġ" CB " Ġto Ġ 1 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġstate . character Counts Ġshould Contain Exactly Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' N ' Ġto Ġ 2 , Ġ' C ' Ġto Ġ 1 , Ġ' B ' Ġto Ġ 1 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Apply Steps () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġsolution . parse State ( test Input . line Sequence ()) ĊĊĠĠĠĠĠĠĠ Ġstate . apply Rules () Ġ// 1 ĊĠĠĠĠĠĠĠ Ġstate . character Counts Ġshould Contain Exactly Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' N ' Ġto Ġ 2 , Ġ' C ' Ġto Ġ 2 , Ġ' B ' Ġto Ġ 2 , Ġ' H ' Ġto Ġ 1 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġrepeat ( 9 ) Ġ{ Ġstate . apply Rules () Ġ} Ġ// Ġincluding Ġabove , Ġresult Ġwill Ġbe Ġafter Ġ 1 0 Ġsteps ĊĠĠĠĠĠĠĠ Ġstate . character Counts Ġshould Contain Exactly Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' B ' Ġto Ġ 1 7 4 9 , Ġ' C ' Ġto Ġ 2 9 8 , Ġ' H ' Ġto Ġ 1 6 1 , Ġ' N ' Ġto Ġ 8 6 5 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Part 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġsolution . part 1 ( test Input . line Sequence ()) ĊĊĠĠĠĠĠĠĠ Ġactual ĠshouldBe Exactly Ġ 1 5 8 8 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Part 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġsolution . part 2 ( test Input . line Sequence ()) ĊĊĠĠĠĠĠĠĠ Ġactual ĠshouldBe Exactly Ġ 2 1 8 8 1 8 9 6 9 3 5 2 9 ĊĠĠĠ Ġ} Ċ Ċ } Ċ