Day 4 problems complete

master
Joey Pollack 1 year ago
parent 5e49d8279e
commit e5d3b424a5

@ -0,0 +1,140 @@
XSMMXMASMXMXXMMMAMXSXXXXXMASXSMMXSMXASMMMSMXSXSASAMAAXXMAXXAXMMSAMXAMXXSMSMXMSXSSXMSMMXSMMSSMSXSAMXSXMASXMASMSMSXXXSXSSSSXMASXSSXMXSXMSMMMSX
MMASXSMXAASXSMMSXMASMMMMSXASXMAMAAXSSMAXAAMMMAMXMAMMMMMMSMXMASASXXSSMXMXAASAMXSASAMXMMASAAXXAAXMASMSAMAMASXMAAXXMASAAXAAXMASXMAXAMASAAMAXAXX
ASAMXSAMSMMAAXASAAAXAAXAAMXSAMAMMXMMASAMSXSAMAMASMMSAXAAAMXAAMXMAXSAMSAMSMSXSMXMMXMAMMASMMSMMMXSAMASXMASXMAMSMSMMSAMXMMMMMXAMAMSSMASMMMXMSSM
MMASAMAMXAMSMMASXMMMSMXAMXMSAMXMSASXMMMMXASMSMMAMXMMAMMSSSSMMMSMSMMAMXAMAAXASAMXSSSMSMMSAAXXAAMMAMAMXXXSXSXMAMXASXMASAMXAMMSSMXAXMAMAASAXMAM
XSAMMSSMXXMAAAXMAXXXXXSSXMASAMAASAMSXXMASMMXAAMXSMSSSMMAAXAAXAAAAMSSMXSSMMMAMMAMAASAAXSSMMMMMSSSMMSSSSXSAMXSASXXMASMMAXSASAAMXMMXSASXMSMSSSM
AMASAAAXMASXXMSAMXSMMAXMASXSAMSMMAMMMSMMMAXSMSSXAAAAAAXMSSSMMMMXMXAAXXMAMSSXMXXAMAMSMSMXAAAAAMAAMAXAAXXMXSASAXMASXMASXMSAMMMSAXXASXSMAXXAAAA
ASXMMSSMMXSAXSXMMASAMSMSMMASMMMASMMAAAAXMSASAAMMMMSSMMMXAAMXAXSMMMSSMXMAMAXAMASXMXAAXMAMSASMSXMMSSSMMMXXAMMSAMSAXASAMXMMSMSMSASMXSAXMAMMMSMM
XXMAAMMAXAMAMAAAMAXSXAAXXXAXAASXMASMSMSMMMAMMMSXXAXXASXMASXXSAMAXAAAAXMAMXSAMAMXAMSSMMSAXAMMXAAAAXAAAXMMMXMMAMMASMMMSAMAAXAASXMAXMXMASXMXMXM
AASMMSSSMMSSMSSMMSXXSMSMSMSSMMXMXMAMMMMASMAMSAMMMSMMMMASXMAXMAMXMMSSMMSASXSAMSSSXMAMXAASAMXASMMMXSMMMSMAXSSSSMMMMXAAMMXSSSMXMAMXMXSXAMAMMMAM
MMMSAAXXAAAXAXAXAMMMMXAAAAAAASMMAXXXSASAMXMMMASXAMASXMMXAXMXSXMXSXAMAMSXSASXMXAASMMSMSSMSXMMMMMXMSASAXXXXAXAASXAAXMSSXXMAXXAXXMAAXMMMXAMASAS
XAAMMMSMSMMSSSMMASAAMSMSMSSSMMAXAMXXMAMXMASMSAMXXSAMAXXSMMMMMAXASMMSSMSXMAMMMXSMXMMAXMAAMXMXSASAASAMASAMSMAMXSSMSSMAXMASAMXMSMSSSXMAXMAMMSAS
XMASXMXAAAXAMAXSAMMXMAXXXXXAXSMMSMMAMXMXSXSAXMMSMMMSMMMMXXMAMSMMSAMAAAXMSAMASAMXXSSMSSMMMAXXSASMXMXMSSXAAXMXAMXMXAMSSXAMAXMASAAMAASAMSSMAMMM
MMXMXSXMSXMXMSAMXSAMSMMMMSMMMSAAAAXAMXSASAMXMMAMAAXXXXXAMSSMSXAMSXMMMSMASASAMASAMXAAAXMAMMSMMMMMMMMSAMASMSXMAMAMXXXXSMXSAXSASMSMSMMAMAMMXMAS
ASASXMAMXAMXXMASAMXXAMASXMASASMMSXXASAMASMMSXMASMMMSAXMXMXAMSXSMMXSAAAMXSAMASAMXXSMMMXMSAMXMASAMAAXMASAMASMMMSMSMMXMXSAAMMMAXXMAXMMXMASMSSXS
XSAMXAMASAMAXSXMMXXXASASMSMMASXMAXSAMMSMSAASMSMSMSXAMXSSSMAMMAXAAASMSXMXMASAMXAMMMMMSAAMXMASMSXSSSSSMMMMMSAMAAXAAAAMAMXMXAMAMSMMMMSSMMMAMAAX
XMAMSXSMSXMXMAMXXAMXMMXSAAAMXMAMAXMSMASASMMSAAXXAXXMXSAAAXXMMASAMXSMXAAXSXMMXSAAAXAAXMSMMSMSXMAAAMMAMXXAXXAMMSSSXSAXXMXXMMXXXAAAAXXXAAMAMMMM
XMAMXAXXXMAXXAMMMMXAMXAMMSSMMSSMXSAXMAMAMAMMMMSMMMXXXMMXMMSXMASXMASASMMMSSMAMSASMSMSXXAXAAAMAMXMMMSAMXSSXSMMXMAXAXXXSSSMSSSMMMSSSSSSSMSSXMAX
XSAMMXMAXMMSSMMXAASXMMXSMMXMAAAXXMMAXSMSMXSAMXAAXAXMXAXSMMMAMASAMAMXMASAXAXMMXMMAAAAXMASXMMSASAMAAMASMAMXAAXMMAMMMMXMXAAAXMAMXAAMAMXMXMAMSMS
ASASAAXSXSAXAAMMXMAAAXASXMXMMSSMXMMMAMAAAMMMSSSSMSAMAXSAXAMAMXSAMXXMSMMASMMXMAMMXMMMSMASXMAMASASMXSASMAMSXMMSMXMAAMAMSMMMSSMMMMSMAMAMAMAMAAA
XXXSXSAMAMMSMMSAMMSMMMMMAAAMAMMMAXASAMXMMMAXAAMXXXXXAMXMSMSMMXSMMSXAAXXAAXMASASAMXMAXMXMAMMSAMAMAAMMSMMMSAAASMMSSXMAMAXAAAAXMASMMXSAXAXAXMSM
MMMXAXMMAMXXXAMMXAAAMMSSMMSMAMASXSMSMSMSMSSSXSMSMMMMXXMXSMAMSMMAAXMSMSMSSXSASASMSAMMXAMMXMMAXMAMMMSASAMASMXMXAXXXMMMXMSMMSMMXXXMAMSASMSMSAMX
XAAMSMXSSMXAMXSAASXSMAAAAAMXMMAMAMXSAAAXASAXMXAXAAASMSMASMXMAAXMMSMAMMMAAAMMSAMASMSXMASXAAMAMXXSXXMMSAMAXSAXSMMMXMASXXXXAAMSSSMSXMMXMMAASASX
SSSXMMXMXAMXXAXXXMMMMMSXMMSASMSMXSAMMMSMMMMMAMSMMSXSAAMAMASMMMSAMAXASAMMSSMAMAMXMMAMSAMMMSMMSXAMMMMXSAMASXMAXXAXXSAXAMXMMXSAAAAMAMXMXMMMSAMM
MAMXMMSMSXMMMMSMSAAXMAXAMXMAMAMXAMXSAXAAMMXXXAMMXXMMMMMSXMSAAXXAMMSMSXXMAMMXSMMMSMXMMASMXAAMXMAMSASXMAMXMAMMSSSMAMASXMSAMSMMXMMMAMXMASXXMAMX
SASAXSAAXXAXAXAASXMXMASMSXMAMSMMXSASASMSXSMSAMAMXMXAXMAMAASMMSXAMXAXSXXMAMSAMAAAAXXASAMXSSSMXSXXMMSAMSAXMSMAAMAXMMMMMAXXMAAXXSASMSXMAXAXSMMS
SASMMMMSMSMSMMMMMAMSMMSASXMMSMASAMMSAMAAAAAXSXAAMAMXSMAMMMMMASXMMXMMMMMSMMMASXMSSMSMMASXAAAMXAASMXSAMXSMAXMMMSAMSMMAMXMSSSSMAMASAAMMASXMMAAA
MXMXMSXXMAXXMASASXMAAXMXMAXXAXMMAXXMMMXMSMSAAMSMXSXMMMSMSAMMXSAMASXMAXMAMXSAMAMMXMAAAAXMMSMMSMMAAMMASAMMAMAAMMAXAMSMSMAAAAAMXMXMAMMMXSAAXMSS
SAXAXAAMSSSXSASASXSXSMMXSXMSSSXSXMSMMASXMXXMMMMMMMMSAAXXSASMASAMASASASMXMAMASXSAMXMMMMSSXXMASAXSMASAMAMMAMXMSSSMMMAXAMAMMSMMSSXMSMXXXSXSAMXM
SXSMSMXMAMXAMASXMAMXXAMAMAXXAMAAMAAAXAMAXAMMXAAAXXASMXMASXMMMSAMASXMASXMMXMAMAMAMMSMXSAMXXMASXMAXMXMSSMMSAMXMAXAMSXSXSSXMAXXAAXXAXXSMMAAMSAM
XMAAXXAMMSMXMXSAMXMAMAMAXXXMMMMMAMXXMMMMMMSXSSSMMMMSXSMXMAXMXSMMXSXMAMMSMMSSSXXAMMAAXMAMSMMXMASMXXXMAMAAXXMXMAMMXMASMXMASMSMMMMSMSMSAMMMASAS
SXMASXXMAAAAMXSMMSMMMXSAXMMXAAXXSASXMSAMAXAXXXAMXSXMAXMASMMMMMXMAMXSAMAAAXAXAMSSSSMSMMAMAAXASXMXMMXMMSMMMSMAMXXSAMMMSXSAMAXAAAAAAAMSAMXXMSAM
SXSXMMMXSSSXXAMAXXSAAMAMAAMSSSSMMASAASXMMSAXSXSAMXAMSAMXAXMAXXAMXSASASXSXMMSMXAXMAXMMSASXMSAMXMXMAAMXSASXASASMMSAXSAMXMXXASMMXSMSMXSASAMXMAM
MXMAMMSMMAMMMASXMMMMXSASXSMAMMAAMAMMMMMMXAMXMAMSSXXMAASXSSSSMMMSAMASAMXAASXSXMASASAXAXXSAMMXMAXAMXMSASASAMMMMAXMXMMAXSXASMMMSAMAAMXSAMXAMXMM
MASMMAAAMAAASXMAMAAMAMAMAAMXMSSMMASMMSMMAAXSMSMAMASXMSMAAAAAASXXXMAMXMMMMSAMXMMMAAMMMSMMMMMAXXSXSAXMMMMXAXSSXMMSMMSSMXMAMAAAMXSAMMAMAMSSMSMS
SASAMSSSSMSMSMSAMXXSAMXMSXMAXXAXSXMXAAAMSSMXAAMAMXMASAMXMMMXMAAMSMSSXXAMAMMMASAMXMXAXAAAMAXSSMXAMXMMXMMSXMXMASASAAAMMMMSSMMMSMMAXMXMAMMMAAAX
MXSXMXXAXMMXSASXXAXMAMMMMMSSSSMMSAXMSSXMAMMMSMSMXAMXAMXMXXXSMMSMAAXXMMXMASASXSAMMXMMSSSMMMSXAXMSMSXMASAMMSMSMMASMMSMSMAMAMXAAAMAMAASXSSMMMMM
SMMMSXXMSXSAMMXAMSSXXMMXSAAMXMXAXAXMAMAMAXSAMXAAXSMSMSASAMMAXMAMMSMAMASMMXXMASMMSSMAAMAAXMAXSMAAAMSXXMAXXAAAXMXMXMAAAMXMAMMSSSMSMSMMAAAXMAXA
MAAASMSXSAMXSAMSMMAASMXAMMMSASMASMMMASXMMSMASMMSMMAAASMSAMXMMSAMMAMSMASAASMSMXMAAAMMMSSMMXMAXXSMSMMMSSMMSMMMXXAMASMMMXMMAMXMAMAXAAXMMMMMSASM
SXMMSAMMMAMXMMXMAMSMSAMXSAMSAMMAAAMXAMMSXXMAMAAAAMSMXMASMMMXMMASXXSXMXSMMMAAXMMMSSMMAMXMXSMAMXAMMMSAMXXAAXASXSASASMASAAMASAMMMSMSMSASXAXXMAX
AXSXMMMXSAMXXXASXMAXMXXAMAMXSXMSXMSMXMXMXSMSSMMSSMMXSMAMAAMAMSAMXMMMMMMMSMMMMSMAMMAMXSASAMMASMMMSAMASAMSMMASAMAMAMXASASASMMMAAXAAMXAMXSMXSAM
AMXAXXXAXASXMXMMAMXSMSMMSSMAXXMMAXAAMSASAXAAXAAXMASAMMASXMSAMAAXXMAXAXAAAASXMAMASXSMAXAMXMSAXAAAMAXMMAXAAASMMMSMXMMMSXMMMAXSMSMXMAMAMXAXAMAS
AAMMMSMXSAMASXMSMMSAAAAAAAMAMMASMMMAMSAMMMMMSMMMSAMMSSMMMMSXSSMMMSMSMMMXSMMASXSAXMXSSMMMMMMXSSMMSSMASMMMSMMAMSMAAMXAXAXXSSMMAAAMAXAAXXMMSSXM
MSMAASAMXASAMXXAAXMMXMSMSXMMMSAAAAMAAMXMXMAXAMXXMXSAAMAXXXMAAAAXXAAAMASXMASXMMMXSAXAXASASXAXXXSMAXSMMASAMASXMMAXMMMMSSMAMAAMMMMAMXXASMXMAMMM
AAMXXMAXSAMXSMMSMSASAMXAXAMXAMMXMXSSSMXMASASAMSAMXMMSSSMMAXAMSMMSMSMSASASAMAAXAAMXMXMMSASMASMAMMMMMXSAMXSMMMAMXMSXMAAAMAMSXMASXSMMSMMMAAMMAS
SMSMSMSMSXMAXAMAASAMMSMXMAMSXSAXMAMMAMSSMSAMAMXMSMSAAAAXSAMMXMMAMMMAMXSXMAMXMMMXMAMMMXMMMMXAMAMAAASMMXXXMMASXMAXMAMMMMMAXXXMASAMXAAAASMSXSAS
XXMAAAAASMMMSSMMMMXMAAMASXMXAMAXMAXMAMXAAMXMAMAMAMMXMMMMSASXAMASXAMSMAMMSMSSSSMSAMXAMAXXAXXMSASXXAMAMMMMMXAXAMSXSAMASXSMASXSAMXMMSSSMMAMAMXS
SAMSMMMXMAAXXMAMMMMMSXSASMMMSMAMSSMSMMSMMMASASASMSMSXMAASXMMMSAMMMMXXXXAAMMAAAASAMSSSMSMXSXXSASAASXMMSASASXSMSAMSAMXSAAXMMXXXSXXAAAMAMSMSMMX
SMMXMSMMSSMSMMAXAAAAAAMXMASAXMAMAAXAMMMMASXSASASXAAMAXMXSAMSMSMSAMAMMXMSSSMMMMAMAMAAMASAAMMAXAMMMMAXXMXMAMMAMMAMMMXXMMMMXMAMXMMMMMMMAMAAAAAS
XSAMXAAXAASAASMSSMXMSXSMSMMSSXXMSMMMSAAXMSMMMMAMMMMSAMXXSAMXAXASXMASAXAAAAMXMSASXMMSMAMMMXAMMMMXASXMASMMAMSAMSAMXSASAAXXAXASAMAAAXXMXMMXMMXX
SMXSMSSMSSMMMAAMASMXXXAAAXAAXMXXAXAMMXXMXXAAXMMMXSAMASAASAMMMMXSASXSXSXMSMMMMXAAXAAXMASAMAMSAMXSXSAAXSXMAXSAXSASASAMSXSSXSXSASMSSXMMSSXMSMSM
MSAXMAMAXMMMXMSMAMXAMSMMMMMSSMMSMSSSMSSMMSSMSMAMXMASAMMMMMAMXAMSAXAMASXMAMAASMSMMMXSMMSAXSMSASMXMSXMAMMSSXSMMMAMXMAMMMMXMMXSMMMMMXMAAAAAMAAA
MMMSASMSMSASMAXMASMXMAMASAAAXXAAXAAAXAAAAMAXXAAXAMAMAMXMAXSSSSMMAMXMAMAXMMMSMAXAMSASXXMMMMAXAAXMAMAMMMAAXXSSMMSMXSMMXAMASXASAMSAAAMMSSSMMSMS
SAMXMAAXAXASMXMSAMAASMSXMSSMSMSMSSMMMSSMMSAMXSMSSSXXMMSMSXXAMXMMMMXMXSMXSAMXMAXAMMASXMXASMSMXMASXSXMAMMSSMMAXAAAAXAAXXXAMMMXAMMMSXMAAAAXAAXA
SXSAXMMMMMSMXAMXMMSASAAXMAMXAAAAXAMSXMXXMXAMAAXXAAXAMAXAMXMXMAMXAXXMMSXAMASXMAXXMMAMAMMASAXAMXAXAAAXXSAAXAMAMMSMASAMXSMSSMMSSMSAMXMSMMMMSSSS
MMMMXAMMSXMASXMAXXMAMMMSMSSMMMMMMAMSAMXAMXAMSMMMXMXSMMMMAMXSSXSSMXMMAXMASAMXMAMSASXMASMMMXMXSMMSSMSAMMMSMSMMMMAXAAAMXSAXAMAAXMAMXXXXAAXXXAAA
MAXXMXAMXAMAMMSMSMXAMXXXAMMAMXAMXMMMAMXMAXAXASASAMAMASAMXAAAMXMAXASASXXMAXMXMAXMAMXMASMMSMSAAAAMMAXMMXXAAXXSAMXSSSMMAMMMMMMSSSMMSMMSSMMMMMMM
SSSMSMSSSMMAMAAXAMSSMXAMMMSSMMMSAASXMMMXAASXMAXMAMMSAMXMAXMMMXSSMXSAMAXASMSXMMSMSMXMASAMAAMSSMMSMXMASMSMSMAXXXAMMAMSXSAMXAAAXAAAAAAMMMMAAXAM
MAAAXSAAAMSXSSMSXMAMXSMMMAAAAXAMXXMAMXAMMMXAMXXSMMMMASXMASMXMXAXMXMAMMMXMAMSAAAMXMAXAXMSXSMMXXMSAMAAXXAXAMMMSMMSSXMAASXSMMSSSMMMMMMSAASXMSMS
MSMMMSMSMMAMMAMMMSMMAXAASMSMMMSXSXSAMMSMSXSSMSXXXAXMAXASXMMAMMAMXMSAMXMAMMMSMSSSSSSSSSMSAAAXAAXMAMXSMSMSXMAAXAXXMAMMXMMAMAMAMXMASMXMMMSAMAAS
XAAAAXXMXMAMXAMAAAAMSXSMSXXAMAMAAASASXAAXMMAAXASMSMSXSAMXMMSMMAMAASASASASAXXXXMXMAAAMAAXMSMMXSXSAMXMAAAAXXMXSXMMSAMMAXAAMMMAMMXMASMXMXSMSASX
SMSMSXSMXSAMXASMSSSMMAXAXAXXMAMXMASAMXMMMASMMMMMAAAAXMMMSMAMASASMMSASASASMSMMMSSMMMSMMSMXXAMXMMSASAMSMMMSSSMMAMMMMXXAXXMSSMSXMAMMXMAMXXMXMXM
MXAXMASXMMASMMMAMAAAMSMMMXMASMSAXXMAMMSXXMAMASMMSMMMXMASAMAXXMAMMAMMMMMXMMAAAAAAAXAXAXAXASAMASXMAMXXXMAXAMAASMMAMSMMSXMAAMMAAXAMMASAMSXSASAS
SMSSMAMAMMAMAMMMMXMXMMAAAAXAMASMSAMXXASMMSMSAXAAMXAAXXXXXMASXMSMMSMMSSSSMSXSMSSSXMMSMMAMXSXXXXAMSMSMMMXMASMMMXMAXAAMAAXMMSMSXMAMSASAMSASASAM
AAAXMAXAMMSSMMAMXSXAMSSMSXSAMAMSXXAXMASAAAAMMSMMSSSMSMMMSMXSXAXAAAAXXAAAMSXMAMXXMXXXXAXSAMMMSMMMAAAAMASMMMASXXSSSSSMSSMAXXAAASAMMAMMMMAMAMAM
MSMSMSSSSXMAMSASAMSMXAAXAXSMMAMXMSMXAASMMMXMXAMAXAAXMASAMXAMMSMMSSSMMMSMMSAMXMAAMMMMMSSMXSAAAAXSSMMSMAXAASAXMMXAAMAAAAMSMMMMAMASXMAXAXAMXSSM
XAXAAMAMXXMAMMMMMXAXMSSMMXSASMSMAAAXSMMMMXAMSASMXSMMSAMMSAMXAAXXAAXAAXAMSSXMAMMMMAAAAMAMAXXSSSMXXASXMXSAMMMMSMMMMMSMMSXMAMSSXSMMMXSSSSXSXXAS
SMSMMMAMXSMSSXAAMSSSXAAAXASXAAAMSMSXMAMAXMAMMMXAAMXXMAMSSXMMSSMMMSSSXSASXMASAMMASXSMSSSMMSAXMAMXSMMAXMAMXMXAMMAXMAMAXXAMAMAMMSXAXMAXAAAMXMSM
SMAMASXMAMXAMXXSMMAXMMMSMXSXMXMMAAAXXMSMSSXXAMXMXMASMSMAMMMMAXAXXXXAXMMMASAMAXSASMXMMXXAXMMMSSSMMASXMASMMXMSSSSXMASXMXXSAMXSAMSMSSMMSMAMSMAA
XMAMASAMASXXSAMXAMMXAXAAXAMMSXMMMAMMXMAXXAMSAMXXAMMSAAMAMAXMASMMMMMSMMAMXMASXMMMMXXAXAMSMMXMAAMXXASAMMMXMAMAMXAASASAAMXSXSAMAXXXAAXAXSAAAMMX
XXMMMXXMXSAAMMMSAMXMXSMSSXAAMAMXXAAAAMXSMMMSASASXSAMMMSSSMSMMMXAXSMMASMSSMMAMXSSMMSSMXMAAMMMMSMXSAXMMXSAMXMSSMMXMASAMMAMAMAXSMSMXSMSXSMSSSXX
SMSASMMSMMMMMAAXAMMSASMAMXMASMMASMSSSMSAMXASXMASAMXXAXAMAXAAXXSMMSAMAMXAXXSASAAAAAAAMXSMSMAAMAAAMXMSAMXAMXAMAXMXMXMMMMXXAMMMMAXMAXMMAXXAXMXM
XAMASXAAAAAAMMMSAMAMASMAMAXMAXMXMAMAAXSASMMSASAMXMAMMMSSMMSXMMXMASXMASMAMXXAMMXSMMSSMMMMAXSSSXMMSXXMASXMMSXMAMXAMMMMMASXMMAAMAMMAXAMMMMSXMAA
MSMAMMSSSSMMMAXMMSMMAMMSXMXSAMXMSMMSMASAMAXSAMXSXMAMXAMAMXXMAAAMASASASMAXSMSMSAXAAAAAASXSMMAMXSXMMXSAMXSAMAMSMSASASASXMASAMMXSAMXMMMXMMMASAS
AAMSMAXAAXASMSSMASAMMMMXAXXSXMAMMAAASMMAMSXMASMMXMASAASAMSXASXXMASXMASXMXSAMAMASMMMSMMXAAAMAMMSAXAXMASXMASMSAAAAMAXMMAMAMASAAMMXSXXAMXAMMMAX
SMSMMSMMMMMXAAAMAXXMAAAMXAMXAXAMSMMMAXSAMXMSAMAMAAAXMAMAXMXXXXSMMSASAMXMAMXMXMASMSXXMMMSMMSMSASXMSXSAMASAMXAMAMAMSMSSSMASAMMSSSMXAASMMSSSMMM
XXSXAAAMAAXMSMXMAXMMSMXXAMAXSSSXSXMXXXSXSAXMMMXMXMAMSASMSMMSMXSXASAMXMXMASXMXMASAXMASXXAAMAXMAMASXAMMXAMASMSXXMXAXAMAAXAMASXAAAXXMAMAMAMAASX
MXXMASMSMSMMXXXMSMSAXAAASMSMXAXAMXMMMMMSMMSAMSMXXXMASASXAAAASAMSMMMSASASASAMXMAMXMXAMMMXMMAMMAMXAMMMSMMSXMMXMXMXSMSMMMMXSXXMMSMMAXXXXMASXMMS
AXXXAXXAMAXXMAMXAAMAMMMMXAXMMMMSMMMAAASAXASAMAMSMMAMMMMMMMSSMXXAXAASASASASAMAAAXASMSMSSSSMSASMXAMXXAXMAXASXAMAXAXMAAXXAXAXMAMXXMMSMSMSASASAS
MMMSMMSSMSMSMSAMXSMSMMXXSAMXMAAAAMSSMSMMSXMXSASAAAMXSAMXXAMXAMSMSMXMAMAMXMXXXSMSMXAMASAAAAAXMMSSXMMXSMMSMMSMSASMMSMXXMSMASASXMAXXMAAMMMSAMAS
MAXAAXXASAAXXXMAMXMAMXMASMXXSXSSXMAMSMAAMAMASMSAXMSAAMXMASMMXMAXXXXMAMSSMSMMMXMAXMAMXMMMMMMMSAAAAXXMMMMAMXAMXMXMAMXMMXAXAXMXMMMMMMSMMAMMXMXM
SXSSSMXMSMMMMSMMMSSMXSAMSAMXMMMMMMASASMMSAMMSASASXXMMMASAAAAMXXMMMXXXAXAAAAXAASASMXSAMXSMXXAMMSSMMSXMASASMMSMASMMMAAXSMMSSMMSAMAAMAMSXSXMMSM
MMMXAXXXXXXAAAXAAMXXAMXXMMAAMAAAAXMMMSXMSASAMMMAMMAXXSMMSXMSSMASAAMAMASMSXMMSAMMSMXSASAMMMMMSAAAAAMASAMXMAMXMAAAASMMMSAAAAAASAXSXSAMAASASAAX
MASXMMMMMAMMMMXMSSSMXXSAMXXASMXXSSSXAXMASXMASXMMMSSMXMMMMSMAAXAXXXAXMAMXAXMMMMSMMMAXMMMMAAMXMMSMMMSAMMSSSSMAXAMSMXASASMMSSMMSMMMASMMMMSAMSSS
SASXMAXAXMASASAMXAAXAMMSSSMMXMAXXAMXXAXXSXMASXMAAAAXAAAXSAMSSMSSSSSXMASMSMSAAAAAAMMMSAMSSMSAXXAMXAMMSAMXAAMXSMXMAXMMMSAMAMMAMXMXAXMAXXMMMAMX
MASXSSSSXMAXAXMMMMMMMSAAMXMSAMMMMAMAXMSXSAMASMXMMSSSSXMSSXMAXAXAAAAMSAMXAASMMSSSXXSAMAMMXASXSMMSMASMXMSMSMXMAMSMMXSAXXXMASMASAMMXMASMXMASMSS
MSMMXMAXMMSSSSSXSAXAXMMSMXXXAMXXSSMMAXMASAMXSAMXMXAMAASXMXSSMXMMMMMMMASMMXMXMXMAMXMMSSMMMMMMSAAMMMMMAMAAAAMXAMXAAAMSSXMXAMXAMAMAMMAMXASASXAX
XAASAMXMXAAXXAAASXMASMXMAMSSMMSMMAASXAMAMASMSAMXMMSMSMMAAASAMXMASAASXMMXMASAMXXMASMMAXAAAXAASMMSAXASXSMSMSSMAMSMMMSAMXSAMXMSSSSSMMSASMMMSMSS
SSSMMXAXMMMXMMMMMMAAXMAMMMAAMAAAMSMMSXMASAMXSMMXAAAXMAMMMXSAMXSASXXXAXSSXAMXXSAMXMAMMSSSSSMXMSASXMXMAAAXMAAXAMXXAXAMXAXAMAXMAXMAAMXAMXAAMMMS
XMMAXSMSMAMSMSAMASMMAMMSXMSSMXSSMXAXAXMAMASAMMSAMXXSSSXXSASXMXMASMXSMMAMMSSMXSAMSSMMXAMXAMMMMMMMMSMMSMMMMSMMXAXMMSMXMMSSSMSMMMSSMMMAMSMMSAAM
MAMMMMXAMXSAAXASASAASXXMMMMAMXAAMSMMMMMASAMASASAMXSMAXXAXMMXMAXXXMMAXMAXXXAMXSAMAAXSMSSMMMAAXASXAAXXAAXMAXXMASMMMAMXAAXAMXAMXXAAAMXMASXAXMXS
MMMXAMSASXSMSMMMAXAMXSSMAXSAMMSMMAAAXAMASAMXMXXAMXAMAMMMMXMAMMMMASAMXSXSXSAMXSMMSSMMAXAASMSXSASMSMSXSSMMASASAAAASASXSSXMMSXXSMXXMMSAMXMMSSMM
SAXXAMXXXAMAAASMSMSXAAXSAXMASAMXSMSMSXSAMXSXSMSMAMMASXXAAAMXSAASXMMMASXMASXMAMXMAAAMXMMMMAAXAAMAAXXAMXAMAXMMSSSXSASAAAAXMASXMSSXAXASXMAXAAAA
SASMXMMMMMMSSSMAAAXMMSMMMXSAMXSASXMXAXMAMAMAXXAXAXXXMASMSMSAMXXMASXMASAMMMAMXSAMSSMMSXXSMMMMMSMSMSSMMSSMMMAAMXMAMXMAMMSXMAXSAAXMASAMXAXXXSMM
MAMXAAAMAXXAXAMXMSMXXAAAAMMXSXMASMMMMMSAMAMSMSSSMMSAMXMMAAMMMMMSMMMMSXXAMXXMASMMAMAMXXXSAMXMXMAMAMAMXAMASAMXSAMMMMMAXAXXXAXMMMSXMSXMASMMAXAM
SAASXSSMSXMXSXMXXXMMSMSMXSASMMMAMAAXMASXSXMMAXAAAASAAAXMXMMXSAMAMXASAMASXSAMASXMXMXAMXMSAMAASMSMXSAMMAMAMAMAMMMAAMSSMMSSMMSAMAXAXXAAAXAMAMAM
XAMXXAMXXXSAMASMMASXAMAASXMMAAMAMMMMMXXMXMMMSMMMMMSMSSSMSXXAXASXSSMXAXAXXXXMASXMASMMAAXSAMXMSAAXXMMMSMMSMSMSSSSSSMXAAAMAAASAMSSMMSXMASXMASXM
XSMSAMSAXAMXSAXASAXSMMSXMASMSMSSSMSSSSXMAAXAAAAXMXMXAXAMXMMMSMMAAXXSMMMSMMSSMMAMAXASXMMSAMMAMMMMMMXAXMAXAAAXAXXAMAMMMMMMMMSXMMAAAXAMAXMAXAMM
AAAXXXMMSMXMMXSMMMXXXAMASXMAAAXAAAAAMAASMSMSXSMSMAMMMSMSSSXMAXMMMMXAXAAXXAAAASXMSMMMAMASMMAASASAAMMMSMMSSMXMXMMSMSAMSXMXAMXXMSXMMSXMXSSMXMSS
SMXMAXXAAMAXAAMMAMXMSMSAMAMXMMMSMMMSMMMMAAAMXXAMMASAMXAAAAXMAMSAAXXMSMSMMMSMMMXMMAASXMASASMMSASXXMAXAAMAMMXSXMAAAMAMXAXSAMMSMAMSMSXMMAAAXSAM
AXMMMSMSASMSMASMMSXAAAMMXAMXMSMMXMMAMXMMSMMMAMAMMMSMSMMMXMSMASXSMSMXAMAAAMAMSXMASMMMAMASXMAAMMMXSSXSSMMASMASAMMMSMMMSAMXAMAAMAXAASAMXMMXMMAS
MMSAMAAMAAAXAAXXMAMXMSMSSMSASAMXASMMSXSAMXSMASAMAAMAMXXXAAAMXMXAXMASMSSSMSAXMAAXMXMSXMXXXSMMMXAXMMAXAXSAMMMSAMSAMAXXXXMSSMMSSSSMXSAMAXASMSAM
SXSASMSMSMMSMSSSMSSSXAMXAAXMXMASMSAAAAMXMMXMAMAMMMXAMXASMSMMXSSMMSAMXAAAASXSSMMMMMAXXSMMMMMMXMASMMSMSMMASXMSAMMASXMMMXMXXAXMAMXXXSAMXSASAMXS
XASAMAXXXAXXAXAAAAAXSMSMSMSXSXXMASMMMSMMASAMSMXSAMXMSMXAXMAMAXAMAXAXMMSMMMAAMAAXAAXXASXMAAASASAAXAXAXAXAMMMXAMSMMMAAMXSXMXMMAMSSXSAMMMAMXMAS
MXMAMMMMSXMASMSMMMMMMXSAMAMXSAMXXMAXXAXMAMMSAAMMMSAMXMSMXSAMMSAMMSAMXXMXSMXMSSMSXXSSXSAMSSMMAMMXMASXSMMASASMMMAAASMSXMSASAXXAMAXMSSMAMAMAXMM
AAMXMAAXXASXMXMMXSAAXAMMMSMMXAMXMASXSAMMASMMMSMAAMMMMXAAAXASXSMMXSMSSSMAXXAXXAMXXMXMASMMMAMMAMXSAAAXAXSMXMXAXMXXMSXXAASAMXXSAMXSAMXSASASXMMM
SMSSSSSXSAMAMAXMAMMXMMXSAAAASAMASMMASAXSASASAXMMMXSAMMMSMSMMXMAXAMSAAAMSSSSSMMMAMMAMXMXXSAMSSMAXMAXXAMXMSASMMMSMAXASMMMAMAMMASAMMXMMMSMMXAAM
AAAAXAMMXMSAMASMSSSMAXAMSMSMSAMXXAMAMXMMASAMMXSMMAMASAAAXAMSMSSMSSMMXMMMXAAMXAMXMMMMMAMMMAMXXMASXSMMMAXSAMAMAAAAAMXMAXXAMXMMAMXXAMSAMXMSSSMS
MMMSAMXSAMXMAMXMAAMMXMAXAXMXSXMASAMXXASMMMAMSAMAMMSASMSMSASAAXAAXAXSAMXMMMMMSXXAMSMMSASXSSMXMAMMAAAASXMXSXMXMXMMMSSSMMSSSMSMSSSMSMSAMMAXAAXX
XSXMMSASASXMMXAMMSMAAMMMXMXAMAMXMXMASMXAMXSMMASXMXMAMAMXSXXMSSMMMMAMMXAAXAMASAMXAAAXSASXAAAAAAAMSMSXSASAMXXMMXSAAXMASAMXAMXMAAAAMMSAMMSMXMMX
AMAMAMASAMAASMXXAXMSXSAXAMSSMAXSAMXXAXSXMAMASMMXMASAMAMAMMXXXMMAMXASXSASXSMASMASMMMMMMMMAMSMSSMXXXXAMAMXXXAXAASMMMSAMXXSXMAMMSMMMAMAMAXASXSS
AMAMAMXMMMSMMASMASAAAMXMSXAASXMMMMXMXXMASAMAMXXSMXSXSAMASMSMAMXAXSMSASAXAXMXMXMSASAMAAXXAXAAAXMSMSMSMSMSMSMMMMMAAXXXSMMSASXSAMXXMXSAMMXMMAAX
MSMSSSMMSMAMMAMMAMXMMMSXXMSMMSXSAAASAMSAMMMAXMASXXMASASAAAASAMSSXXXMAMAMSXSMSSXMAMASXSMMXSMSSSMAAAAAAAAAAXAAXXSSMSMAXXASXSXMASAXSAMMMXSAMMMM
MAXAAAAAAMASMXSXSMMAAAMAXAXMAXMSMXMMAXXXMSASASASAAXXXAXMMSMSMMAMXMSMMMSMXAXAMXAMAMXMMMAAMMAAAAXMSMSMSMSMXSXMXAMXAAAMMMXSASAMXMAAMASMAAMAXAAA
SSSMSMMXXXAMMAMMAMSSMASMMMMMAMMXSSSSMMMMXAMXASASAMXSMMMXAMASMMMSAAAAMAAAMSMSMAAMSXSAASMMSMMMSMMXMAMXAXXMASMXAMXMMMASXAAMASXMXMMMSAMMMSXSSSXS
AMAAAASXSMSSMMSAMMAXMXSAAMSMSSXAAMMASAXMASXSAMMMXMMXAMSASMAMMAXXXMXMMXMXAXMXAMXXXASMMAMAXAXAXXXXMAMSMSAMXSAMSSSXXSAXAXXMAMMAAXXMMASXXXAAXXMM
SSMMAMMAAXMAXAMXXMASMXXMXXSAASMMMSSMMXSXAXAMXMASXSXXXMAAXMASXXSXSSMSMSAMXMMSXMMSMMMSMMMXSMMSSMSMSSMMXSAMMMXMAAAXXMMXSSMMASMSSSMASAMXAMMMMSAA
XAMMSSMXMMSMMMSMSXAAXMXMMMMSMXXSAXAXMASMSMXMASAXMXAMSSMMMSAMXAMAXAAAASXSAAAXAAAAAAAAMXMMXMAXAAMAAMAMXSAMSASMMSMMXAAAMAXSAXXXAAMAMASMAMSAAAXM
SAMAAMXXMXXXAXAAXMMSAMASASAMXMAMXSSMSXXAAAASXMASMMXMAAAMXXASMMMSMMSMXMAXMMMXSMSSSMSXMAAMAMMSMMMMMSXMXMXMMASXMXXAXAMMSMMSSSMMSMMSSXXXAXXMSSSX
SSMMMSAMXSXSSSMSMSAXASASMMMXAAMXMMAASXMSMXMMAMAAXAAMSXMXXXMSASMXAXXASMSMASXAXAMXAAMXSSXSAMXAMXXSAMASMXMMMAMASXSSSMXAAXXXAXAAAXAMMMMSMSMAAAXX
SXSAMXMMASXMMXXAAMASAMXMMSSMMXSAASMMMAMAAASMSMSSSSMXMASMMMXSAMMSSMSAMAXSAMMMSAMXSMSXXAASAMSAMSMMASAMXAMXMAMAMXAAAXXSXMSAMMXSAMXMAAAAAAMXMMMM
SAMMSASMAXAMSSMMSSMMAMAXSASASASXMXXASMMMSMSAAAMMAAXMSAMAAAMMSMAAXASAMXMMXSXXSMMMXAXXMMMMMAMAMAXSMMMSSXSAXMMSMSMSMMMXMSXAXSXMMAXSSMSMSMSMMXSA
SASMSASMMSAMASAAXXASXMMMMASXMASMAMSMMMSXXXMMMMMXSMMMMMSSMSAAMSMXSXXMXSMAAXMMMAASMMMAXMMAMMSSSXXXAASMMASASXAAAMAMAMAXMSSXMASMSMMMMAAAXMXMAAXX
SAMXMXMXMAMMASMMMSMMMAMSMMMAMAMAAAAXAAMXMXMAMXMAAAXXAAAAAMMXMXMMXMASAMXMXXXAXXMSAAXMSAXXMXSAXXXSMMXAMXMAMMSMSMAMAMSSMXXMASXMASAMMSMSSMAAMMSA
MAMMMSXXSMXMXXXSAXAASAAAXAXAMXSSSSSSMMSAAXSASAMMSMMSMMXMMMXMXAMMAXAMMXAMSMSSSMXSMMSXXAXSXMMMMSXAAASMMMMSMAXAMMASAMXAXAMXMAXSASMSAAXXAMMSMAMM
XMMSAAMMAXXAMXMMXXXMMAXASXSMSMMMMAXMXAMAMXMXSAMXMAMXAASMXXXAXMAXMMSSSMMXAAAAAMAMAMXMMXMSAXMSAMSMMMSAAAAAMMMAMXAMAXXAMMSMSSMMXSAMMSSSMMXAMASX
MSAMXSAAMMSSXASMMSSSXMSMAAXMAMAAMMMMMSMSXSMXMMMMMAMSXMSAAASXSSMMAMAAMASMMSMMMMXMAMAMAMMSAMXMAXAMSASMSMSSXXMXMMSMSMSSMXAMAAASASMXMXAAAASXSXSM
AMASXMMSXASXSMSAAAASAAAMMMMSASAXXAASAXAMASMSXAXXMAMAMXXMMMXAAAASAMMSMAMAAXXSMASXMMMSMMAMXMASXMAXMAXXMAXAMSSSMAXAAAMAMSMMSSMMXXXXMASMMMSXMAMM
XSXMXAAXMXMAMSSMMMXSMSXSMAAMASAMSSXSAMXMXMASXMMMSMSMASXSXXXMMMMXASXMMXXMMMAAMAMMSAMAAMAMAMXSXMMMSMSMMSMMMAAXMASMMMMMMMAAAAXSMSMXSAMXAXXAMAMM
XMMMSMMSXMSSMAXXXXXXAXMAXMSSMMMMAMAMXMXMSMMMMSSMAXAASAAMSAMXXMXSASAMASXASMMMMXSASASXSSMMSSMMMXSMXAAXAAAXMMSMMASAXXMXMSMMSSMMAAAAMAXSAXSXSMSS
SAAXAMSXMXAMXXSXMMSMMMMSSMMAMXMMXSMMMXXXAAMMAAAXMSSSMSXMASXMASXAXXAMAMXAMAAXMMMAXAMXMAMAMAAXSASMMSMXXSSMXAAMMASAMMMMMAMXAMAMSMSMSMMSMMSAMAAX
SSMSSXSAMMXXAMMAXMAAAXSAAASXMSXSMSAMSAMSSMMMMXSMXAXXAXMXXXMXAAMMSSMMASMMSSMXXAMMMSMMSAMXSSMXMASXAAXSXXMMMMMXMAXXXXAAXAXMMMMXAXAMXAAMAAMAMMMS
MAMAMMSAMSSSMASAMSMSMSAASMMMASASASAMMAXAAXXSMAMXMAMMAMMSMSAMXMAXAAASAXAMXAAASXXAXAAAMASAXMASMAMMSMSAMXAMXMAXMSMMMSSSSSSMMASXMSXSSMMMMMSXMAXX
MSMXXAMAMAAASAMXXXMAMMMMMAXMAMXMAMMMSMMSSMXXMASAXAMSAMXSAMASXSSXSXMMMSXMSMMMAMSMSSSMSXMAMSMSMAMMAMXMASMMSAXSAAAAAMAMAAAMSMSAMAAMAXMASMSMSSMX
MXSSMXMAMMSMMMXSMMSASAAAMXXMASAMXMXAMSAAMAAMMMSAMXXXASAMMSAMMAAAMSXMMAMMXSAXXXAMXAAAAXMSMAXXMSSMXSAXMAAXMAMXMSSMAMAMMMMMAASXMMXSAMMAMAXAAAAS
MSAMXXSASXAMMMXMAXSASMSSSSXSASMSMSMMSMMSXXXAAMXMASMMXMASAMMSMMMAMAXXMASMAMMASMXSMMMMMAMASXSXAMAAMMMMMMSXMXMAXMAMXSASAMASMMMASMASXSSSMMMMSSMS
MMAMAXXAMXXSAMAMSMMMMAMAAAAMXSAAAMSXAXMAMXMMMXAMXMAMAXXMASXSXMMXSMXMAMXMAMXAMAMAMSMXXXSMSXSAMSMMMAAASXXAMMAMXSMMMSMSASASMMSAMMAMMMAAXSAMAAAX
XSSMXSMSMMMSMXSMMXAAMAMMMMMMMMMMXXMMMMXAAAAAMMMXAXAMXMMXAMXMXMAASXSSXSXSXSMXMAAXXAMXMXMXMASMMAAMSMSMSASXMASMMAXXAMASAMMMAAMASMASMMSMMSASMMSM
AMAXMAXAAAAXAAXAMSSSSXSAMXSAAMMSMAMSXMSSSSSXSASAMSASXMSAASAMASMMXAAAASAMXSASXSSSSXXASAMSMMMAMXSMMAXAMAMXMAXAXMSMSMAMAMASMMSAMXASAMXAASMMXMAM
ASAMXMSSSMSMMASAMXXXAAXXMASXXSAASAMAAMXAAAAASAMAMSAMXAMSMSASASAMMSMMMMAXAMSMAMAXXMSMSASAAXSSMMMAMSMMMAMXMASAMXAAAMXMASAXSAMXSMMSAMSMMSSXAAMS
XSXSXXXMXAXMSMSMMSMMMMMSMMSMSMXMSXSSSMMMMMMMMSMXMMSMMMMMXSXMASAMXMASXSXMXSAMMMXMAXAASXMXSMAMAXSAMXMASMSAMXSMMSMSMSSMXMASXXSAMXMSMMSAMXXSXSXA

@ -0,0 +1,10 @@
MMMSXXMASM
MSAMXMSMSA
AMXSXMAAMM
MSAMASMSMX
XMASAMXAMM
XXAMMXXAMA
SMSMSASXSS
SAXAMASAAA
MAMMMXMMMM
MXMXAXMASX

@ -8,6 +8,7 @@
* @brief Advent of Code 2024 day 4 problems * @brief Advent of Code 2024 day 4 problems
******************************************************************************/ ******************************************************************************/
use crate::word_grid::WordGrid;
use ::solver_base::solver_base::{Solver, DataSet, RunMode}; use ::solver_base::solver_base::{Solver, DataSet, RunMode};
use utils::utils; use utils::utils;
@ -16,6 +17,7 @@ pub struct Day4
data_set: DataSet, data_set: DataSet,
run_mode: RunMode, run_mode: RunMode,
do_debug_prints: bool, do_debug_prints: bool,
word_grid: Option<WordGrid>,
pub final_result: i32, pub final_result: i32,
} }
@ -26,19 +28,26 @@ impl Day4
{ {
pub fn new() -> Day4 pub fn new() -> Day4
{ {
Day4 { data_set: DataSet::Test, run_mode: RunMode::FirstCase, do_debug_prints: false, final_result: 0 } Day4 { data_set: DataSet::Test, run_mode: RunMode::FirstCase, do_debug_prints: false, word_grid: None, final_result: 0 }
} }
fn solve_first_case(self: &mut Self) -> String fn solve_first_case(self: &mut Self) -> String
{ {
if let Some(word_grid) = &mut self.word_grid
{
self.final_result = word_grid.find_word("XMAS")
}
self.final_result.to_string() self.final_result.to_string()
} }
fn solve_second_case(self: &mut Self) -> String fn solve_second_case(self: &mut Self) -> String
{ {
if let Some(word_grid) = &mut self.word_grid
{
self.final_result = word_grid.find_x_mas();
}
self.final_result.to_string() self.final_result.to_string()
} }
} }
@ -66,13 +75,20 @@ impl Solver for Day4
DataSet::Test => format!("{}/data/day4_test_input", dir), DataSet::Test => format!("{}/data/day4_test_input", dir),
DataSet::TestAlt => panic!("Day 4: There is no TestAlt input file!"), //format!("{}/data/day2_test_input", dir), DataSet::TestAlt => panic!("Day 4: There is no TestAlt input file!"), //format!("{}/data/day2_test_input", dir),
DataSet::Full => format!("{}/data/day4_input", dir), DataSet::Full => format!("{}/data/day4_input", dir),
//DataSet::BALLS => panic!("BALLS"),
}; };
let _data = utils::load_data(&data_filename); let data = utils::load_data(&data_filename);
// TODO: Day4::init self.word_grid = Some(WordGrid::new(&data));
if self.do_debug_prints
{
if let Some(word_grid) = &self.word_grid
{
word_grid.print();
}
}
} }

@ -1,2 +1,3 @@
pub mod day_4; pub mod day_4;
pub mod word_grid;

@ -0,0 +1,271 @@
#[derive(Copy, Clone, Debug)]
struct IdxPoint
{
i: usize,
j: usize,
}
impl IdxPoint
{
fn new(i: usize, j: usize) -> IdxPoint
{
IdxPoint { i, j }
}
fn offset_by(self: &mut IdxPoint, offset: Point) -> IdxPoint
{
self.i = ((self.i as i32) + offset.x) as usize;
self.j = ((self.j as i32) + offset.y) as usize;
*self
}
fn new_with_offset(self: &IdxPoint, offset: Point)-> IdxPoint
{
let i = ((self.i as i32) + offset.x) as usize;
let j = ((self.j as i32) + offset.y) as usize;
IdxPoint {i, j }
}
}
#[derive(Copy, Clone, Debug)]
struct Point
{
x: i32,
y: i32,
}
impl Point
{
fn new(x: i32, y: i32) -> Point
{
Point { x, y }
}
}
#[derive(Clone, Debug)]
pub struct WordGrid
{
grid: Vec<Vec<char>>
}
impl WordGrid
{
pub fn new(input: &str) -> WordGrid
{
WordGrid { grid: parse_input(input) }
}
pub fn print(self: &WordGrid)
{
print!("Word Grid:");
for row in &self.grid
{
println!();
for c in row
{
print!("{}", c);
}
}
println!();
}
pub fn find_x_mas(self: &WordGrid) -> i32
{
let neighbor_offsets = get_x_neighbor_offsets();
let mut num_occurrences_found = 0;
for (i, row) in self.grid.iter().enumerate()
{
for (j, c) in row.iter().enumerate()
{
if *c as u8 == b'A'
{
// First make sure all four neighbors exist
// TOP LEFT
let top_left = IdxPoint::new(i, j).offset_by(neighbor_offsets[0]);
if !self.has_neighbor(IdxPoint::new(i, j), neighbor_offsets[0])
{
continue;
}
// TOP RIGHT
let top_right = IdxPoint::new(i, j).offset_by(neighbor_offsets[1]);
if !self.has_neighbor(IdxPoint::new(i, j), neighbor_offsets[1])
{
continue;
}
// BOTTOM LEFT
let bottom_left = IdxPoint::new(i, j).offset_by(neighbor_offsets[2]);
if !self.has_neighbor(IdxPoint::new(i, j), neighbor_offsets[2])
{
continue;
}
// BOTTOM RIGHT
let bottom_right = IdxPoint::new(i, j).offset_by(neighbor_offsets[3]);
if !self.has_neighbor(IdxPoint::new(i, j), neighbor_offsets[3])
{
continue;
}
// Check that they contain valid values
if self.grid[top_left.i][top_left.j] as u8 != b'M' && self.grid[top_left.i][top_left.j] as u8 != b'S'
{
continue;
}
if self.grid[top_right.i][top_right.j] as u8 != b'M' && self.grid[top_right.i][top_right.j] as u8 != b'S'
{
continue;
}
if self.grid[bottom_left.i][bottom_left.j] as u8 != b'M' && self.grid[bottom_left.i][bottom_left.j] as u8 != b'S'
{
continue;
}
if self.grid[bottom_right.i][bottom_right.j] as u8 != b'M' && self.grid[bottom_right.i][bottom_right.j] as u8 != b'S'
{
continue;
}
// Check that the diagonal corners have opposite values
if self.grid[top_left.i][top_left.j] as u8 == self.grid[bottom_right.i][bottom_right.j] as u8
{
continue;
}
if self.grid[top_right.i][top_right.j] as u8 == self.grid[bottom_left.i][bottom_left.j] as u8
{
continue;
}
num_occurrences_found += 1;
}
}
}
num_occurrences_found
}
// Returns the number of times the given word was found in the grid
pub fn find_word(self: &mut WordGrid, word_str: &str) -> i32
{
let word: Vec<u8> = word_str.as_bytes().into_iter().map(|x| *x).collect();
let neighbor_offsets = get_neighbor_offsets();
let mut num_occurrences_found = 0;
for (i, row) in self.grid.iter().enumerate()
{
for (j, c) in row.iter().enumerate()
{
if *c as u8 == word[0]
{
for n in neighbor_offsets
{
let neighbor = IdxPoint::new(i, j).offset_by(n);
if self.has_neighbor(IdxPoint::new(i, j), n)
{
if self.search_direction(neighbor, n, &word, 1)
{
num_occurrences_found += 1;
}
}
}
}
}
}
num_occurrences_found
}
fn search_direction(self: &WordGrid, start: IdxPoint, direction: Point, word: &Vec<u8>, next_char_idx: usize) -> bool
{
if self.grid.len() <= start.i
{
panic!("i is out of bounds");
}
if self.grid[start.i].len() <= start.j
{
panic!("j is out of bounds")
}
if next_char_idx >= word.len()
{
panic!("next is out of bounds")
}
if self.grid[start.i][start.j] as u8 == word[next_char_idx]
{
if next_char_idx == word.len() - 1
{
return true;
}
let next_idx = start.new_with_offset(direction);
if self.has_neighbor(start, direction)
{
return self.search_direction(next_idx, direction, word, next_char_idx + 1);
}
}
false
}
fn has_neighbor(self: &WordGrid, at: IdxPoint, offset: Point) -> bool
{
let neighbor_i = at.i as i32 + offset.x;
let neighbor_j = at.j as i32 + offset.y;
neighbor_i >= 0 &&
neighbor_j >= 0 &&
neighbor_i < self.grid.len().try_into().unwrap() &&
neighbor_j < self.grid[at.i].len().try_into().unwrap()
}
}
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// HELPERS
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fn parse_input(input: &str) -> Vec<Vec<char>>
{
let mut grid: Vec<Vec<char>> = vec![];
for (i, row) in input.split("\n").enumerate()
{
grid.push(vec![]);
for c in row.as_bytes()
{
grid[i].push(*c as char);
}
}
grid
}
fn get_neighbor_offsets() -> [Point; 8]
{
[
Point::new(-1, -1 ), Point::new(0, -1), Point::new(1, -1),
Point::new(-1, 0 ), Point::new(1, 0),
Point::new(-1, 1 ), Point::new(0, 1), Point::new(1, 1),
]
}
fn get_x_neighbor_offsets() -> [Point; 4]
{
[
Point::new(-1, -1 ), Point::new(1, -1),
Point::new(-1, 1 ), Point::new(1, 1),
]
}

@ -10,6 +10,7 @@
use day_1::day_1::Day1; use day_1::day_1::Day1;
use day_2::day_2::Day2; use day_2::day_2::Day2;
use day_3::day_3::Day3; use day_3::day_3::Day3;
use day_4::day_4::Day4;
use solver_base::solver_base::{Solver, DataSet, RunMode}; use solver_base::solver_base::{Solver, DataSet, RunMode};
fn main() fn main()
@ -25,6 +26,8 @@ fn main()
let day1_result = day_1.solve(); let day1_result = day_1.solve();
println!("Day1 Part 2 Final Result: {}", day1_result); println!("Day1 Part 2 Final Result: {}", day1_result);
println!("-------------------------");
// DAY 2 // DAY 2
let mut day_2 = Day2::new(); let mut day_2 = Day2::new();
@ -37,6 +40,8 @@ fn main()
let day2_result = day_2.solve(); let day2_result = day_2.solve();
println!("Day2 Part 2 Final Result: {}", day2_result); println!("Day2 Part 2 Final Result: {}", day2_result);
println!("-------------------------");
// DAY 3 // DAY 3
let mut day_3 = Day3::new(); let mut day_3 = Day3::new();
day_3.init(DataSet::Full, RunMode::FirstCase, false); day_3.init(DataSet::Full, RunMode::FirstCase, false);
@ -48,4 +53,19 @@ fn main()
let day3_result = day_3.solve(); let day3_result = day_3.solve();
println!("Day3 Part 2 Final Result: {}", day3_result); println!("Day3 Part 2 Final Result: {}", day3_result);
println!("-------------------------");
// DAY 4
let mut day_4 = Day4::new();
day_4.init(DataSet::Full, RunMode::FirstCase, false);
let day4_result = day_4.solve();
println!("Day4 Part 1 Final Result: {}", day4_result);
let mut day_4 = Day4::new();
day_4.init(DataSet::Full, RunMode::SecondCase, false);
let day4_result = day_4.solve();
println!("Day4 Part 2 Final Result: {}", day4_result);
println!("-------------------------");
} }

Loading…
Cancel
Save