package Ġcom . luc as z eta . ad vent of code 2 0 2 0 . day 0 7 Ċ Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertFalse Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠDay 0 7 Kt Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġparse Ġdata `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġ" light Ġred Ġbags Ġcontain Ġ 1 Ġbright Ġwhite Ġbag , Ġ 2 Ġmut ed Ġyellow Ġbags .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" dark Ġorange Ġbags Ġcontain Ġ 3 Ġbright Ġwhite Ġbags , Ġ 4 Ġmut ed Ġyellow Ġbags .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" bright Ġwhite Ġbags Ġcontain Ġ 1 Ġsh iny Ġgold Ġbag .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" muted Ġyellow Ġbags Ġcontain Ġ 2 Ġsh iny Ġgold Ġbags , Ġ 9 Ġfa ded Ġblue Ġbags .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sh iny Ġgold Ġbags Ġcontain Ġ 1 Ġdark Ġo live Ġbag , Ġ 2 Ġvi br ant Ġpl um Ġbags .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" dark Ġo live Ġbags Ġcontain Ġ 3 Ġfa ded Ġblue Ġbags , Ġ 4 Ġdotted Ġblack Ġbags .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" vi br ant Ġpl um Ġbags Ġcontain Ġ 5 Ġfa ded Ġblue Ġbags , Ġ 6 Ġdotted Ġblack Ġbags .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" fa ded Ġblue Ġbags Ġcontain Ġno Ġother Ġbags .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" dot ted Ġblack Ġbags Ġcontain Ġno Ġother Ġbags .\ n " ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Output Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" light Ġred ", Ġmap Of (" bright Ġwhite " Ġto Ġ 1 , Ġ" muted Ġyellow " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġorange ", Ġmap Of (" bright Ġwhite " Ġto Ġ 3 , Ġ" muted Ġyellow " Ġto Ġ 4 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" bright Ġwhite ", Ġmap Of (" sh iny Ġgold " Ġto Ġ 1 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" muted Ġyellow ", Ġmap Of (" sh iny Ġgold " Ġto Ġ 2 , Ġ" fa ded Ġblue " Ġto Ġ 9 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" sh iny Ġgold ", Ġmap Of (" dark Ġo live " Ġto Ġ 1 , Ġ" vi br ant Ġpl um " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġo live ", Ġmap Of (" fa ded Ġblue " Ġto Ġ 3 , Ġ" dot ted Ġblack " Ġto Ġ 4 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" vi br ant Ġpl um ", Ġmap Of (" fa ded Ġblue " Ġto Ġ 5 , Ġ" dot ted Ġblack " Ġto Ġ 6 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" fa ded Ġblue ", Ġmap Of ()), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dot ted Ġblack ", Ġmap Of ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Output , Ġparse Data ( input )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġcontain Ġsh iny Ġgold Ġbag `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" light Ġred ", Ġmap Of (" bright Ġwhite " Ġto Ġ 1 , Ġ" muted Ġyellow " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġorange ", Ġmap Of (" bright Ġwhite " Ġto Ġ 3 , Ġ" muted Ġyellow " Ġto Ġ 4 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" bright Ġwhite ", Ġmap Of (" sh iny Ġgold " Ġto Ġ 1 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" muted Ġyellow ", Ġmap Of (" sh iny Ġgold " Ġto Ġ 2 , Ġ" fa ded Ġblue " Ġto Ġ 9 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" custom Ġcolor ", Ġmap Of (" dark Ġo live " Ġto Ġ 2 , Ġ" light Ġred " Ġto Ġ 9 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" custom Ġcolor Ġ 2 ", Ġmap Of (" fa ded Ġblue " Ġto Ġ 2 , Ġ" custom Ġcolor " Ġto Ġ 5 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" sh iny Ġgold ", Ġmap Of (" dark Ġo live " Ġto Ġ 1 , Ġ" vi br ant Ġpl um " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġo live ", Ġmap Of (" fa ded Ġblue " Ġto Ġ 3 , Ġ" dot ted Ġblack " Ġto Ġ 4 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" vi br ant Ġpl um ", Ġmap Of (" fa ded Ġblue " Ġto Ġ 5 , Ġ" dot ted Ġblack " Ġto Ġ 6 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" fa ded Ġblue ", Ġmap Of ()), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dot ted Ġblack ", Ġmap Of ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( can Contain ( input [ 0 ], Ġ" sh iny Ġgold ", Ġinput )) ĊĠĠĠĠĠĠĠ ĠassertTrue ( can Contain ( input [ 1 ], Ġ" sh iny Ġgold ", Ġinput )) ĊĠĠĠĠĠĠĠ ĠassertTrue ( can Contain ( input [ 2 ], Ġ" sh iny Ġgold ", Ġinput )) ĊĠĠĠĠĠĠĠ ĠassertTrue ( can Contain ( input [ 3 ], Ġ" sh iny Ġgold ", Ġinput )) ĊĠĠĠĠĠĠĠ ĠassertTrue ( can Contain ( input [ 4 ], Ġ" sh iny Ġgold ", Ġinput )) ĊĠĠĠĠĠĠĠ ĠassertTrue ( can Contain ( input [ 5 ], Ġ" sh iny Ġgold ", Ġinput )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġnot Ġcontain Ġsh iny Ġgold Ġbag `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" light Ġred ", Ġmap Of (" bright Ġwhite " Ġto Ġ 1 , Ġ" muted Ġyellow " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġorange ", Ġmap Of (" bright Ġwhite " Ġto Ġ 3 , Ġ" muted Ġyellow " Ġto Ġ 4 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" bright Ġwhite ", Ġmap Of (" sh iny Ġgold " Ġto Ġ 1 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" muted Ġyellow ", Ġmap Of (" sh iny Ġgold " Ġto Ġ 2 , Ġ" fa ded Ġblue " Ġto Ġ 9 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" sh iny Ġgold ", Ġmap Of (" dark Ġo live " Ġto Ġ 1 , Ġ" vi br ant Ġpl um " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġo live ", Ġmap Of (" fa ded Ġblue " Ġto Ġ 3 , Ġ" dot ted Ġblack " Ġto Ġ 4 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" vi br ant Ġpl um ", Ġmap Of (" fa ded Ġblue " Ġto Ġ 5 , Ġ" dot ted Ġblack " Ġto Ġ 6 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" fa ded Ġblue ", Ġmap Of ()), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dot ted Ġblack ", Ġmap Of ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( can Contain ( input [ 4 ], Ġ" sh iny Ġgold ", Ġinput )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( can Contain ( input [ 5 ], Ġ" sh iny Ġgold ", Ġinput )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( can Contain ( input [ 6 ], Ġ" sh iny Ġgold ", Ġinput )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( can Contain ( input [ 7 ], Ġ" sh iny Ġgold ", Ġinput )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( can Contain ( input [ 8 ], Ġ" sh iny Ġgold ", Ġinput )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġcount Ġbags Ġthat Ġcontain Ġsh iny Ġgold Ġbag `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" light Ġred ", Ġmap Of (" bright Ġwhite " Ġto Ġ 1 , Ġ" muted Ġyellow " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġorange ", Ġmap Of (" bright Ġwhite " Ġto Ġ 3 , Ġ" muted Ġyellow " Ġto Ġ 4 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" bright Ġwhite ", Ġmap Of (" sh iny Ġgold " Ġto Ġ 1 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" muted Ġyellow ", Ġmap Of (" sh iny Ġgold " Ġto Ġ 2 , Ġ" fa ded Ġblue " Ġto Ġ 9 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" sh iny Ġgold ", Ġmap Of (" dark Ġo live " Ġto Ġ 1 , Ġ" vi br ant Ġpl um " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġo live ", Ġmap Of (" fa ded Ġblue " Ġto Ġ 3 , Ġ" dot ted Ġblack " Ġto Ġ 4 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" vi br ant Ġpl um ", Ġmap Of (" fa ded Ġblue " Ġto Ġ 5 , Ġ" dot ted Ġblack " Ġto Ġ 6 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" fa ded Ġblue ", Ġmap Of ()), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dot ted Ġblack ", Ġmap Of ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 , Ġcount B ags That Can Contain ( input , Ġ" sh iny Ġgold ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġcount Ġbags Ġinside Ġa Ġsh iny Ġgold Ġbag `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" light Ġred ", Ġmap Of (" bright Ġwhite " Ġto Ġ 1 , Ġ" muted Ġyellow " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġorange ", Ġmap Of (" bright Ġwhite " Ġto Ġ 3 , Ġ" muted Ġyellow " Ġto Ġ 4 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" bright Ġwhite ", Ġmap Of (" sh iny Ġgold " Ġto Ġ 1 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" muted Ġyellow ", Ġmap Of (" sh iny Ġgold " Ġto Ġ 2 , Ġ" fa ded Ġblue " Ġto Ġ 9 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" sh iny Ġgold ", Ġmap Of (" dark Ġo live " Ġto Ġ 1 , Ġ" vi br ant Ġpl um " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġo live ", Ġmap Of (" fa ded Ġblue " Ġto Ġ 3 , Ġ" dot ted Ġblack " Ġto Ġ 4 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" vi br ant Ġpl um ", Ġmap Of (" fa ded Ġblue " Ġto Ġ 5 , Ġ" dot ted Ġblack " Ġto Ġ 6 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" fa ded Ġblue ", Ġmap Of ()), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dot ted Ġblack ", Ġmap Of ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 2 , Ġcount Individual B ags Inside ( input , Ġ" sh iny Ġgold ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġcount Ġbags Ġinside Ġa Ġsh iny Ġgold Ġbag Ġdeep Ġinside Ġmultiple Ġlevels `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" sh iny Ġgold ", Ġmap Of (" dark Ġred " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġred ", Ġmap Of (" dark Ġorange " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġorange ", Ġmap Of (" dark Ġyellow " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġyellow ", Ġmap Of (" dark Ġgreen " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġgreen ", Ġmap Of (" dark Ġblue " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġblue ", Ġmap Of (" dark Ġv io let " Ġto Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBag (" dark Ġv io let ", Ġmap Of ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 2 6 , Ġcount Individual B ags Inside ( input , Ġ" sh iny Ġgold ")) ĊĠĠĠ Ġ} Ċ } Ċ