Solved day 4 part 1 with dynamic programming.

Signed-off-by: jmug <u.g.a.mariano@gmail.com>
This commit is contained in:
Mariano Uvalle 2024-12-04 22:40:13 +00:00
parent 883190e2ee
commit a60010f7bc
4 changed files with 308 additions and 0 deletions

10
inputs/day04.example.txt Normal file
View file

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

140
inputs/day04.txt Normal file
View file

@ -0,0 +1,140 @@
MSMMXMMAMXMAMSAMXMXXMMASAXAXAMXSXMASMXASXAXXMASMSXSAMXSMXMMXMMSMMSSSMSSSSSMMASXMAXXMASAMXMSXAXSAMXSXAMXSAMMMXMSMXSXMAMASMSAMXMSXMXSXMASXMAMX
ASAMXXAMAMXXMAMSMSMAXSAAMXMSMMAMXXMAXAXMXMMAXSMAXMMXMASAASXMXAAAXAAMAAAXAAXMASMMSAMXASAMSAMXXAXAXASMMAAAAXMMAMAAAXASAMMAMXSAMXSASASASASMSMMM
MXAMXXXMAAAMXSSXAASMMMMXSAAAAMSMXMXAMXMMSASMMMMMMXXAAAMSMMAXMMSSMMSMMMSMSSMMXMMAMXMMAXAMMAMMSMSMMXSASMMMXMASASMMMSMSASAAXAXXMAMAMMSAMXXAAXXX
XSXMMAXSXSXSAMXMSMSMAXMASMSMSMMAAAMXSAAXMAMXAAAAMMMMSMMAXXSMSXAAXAMXSAMMAAAXMSMXMAXXAXSMSSMAAAAAMASXMASMXMXSMXXAAMMSAMMSMMXMAMMAMXMMMSMSMSSS
MAMAXXXMAMMMMSAMXAXMSMMMSMXXMASMMSXASMSMMSASXXSASAXXAAXMSSMAMMXMMMMAMASMMSMMAAAMSMSMSMXAMXMSSSSSMASAMAMMXMASXSSMMSAMXMAXASXSAMMSMAXMAMXAAAAM
XASMMAMMAMXAASASMMMMAAAXXMXAMAMAXXMMSXMAAXMASAXASASMSSMXMASAXAMMAXMAMMMXMAASMMMMAXMAXAXMXMAAAAAXMXSMMSXMAMXSAAXXAMASXMASAMAMMSAAXMSMASXMMMSM
SAMAMMXSASMMMSXMAXSSSXMSMXMAMSMMMSAMXAMMMSMSMMMMMMMMAMAMSASXMMAMSXXASAAXMMMMAASMSXXAMMMSAMMXMMMMMMMAMAAMSSMMXMXMASMMMMAXAMXMAMXXMXXXXXXASAXX
AXSAMMAXXXAXAMMSSMMAMXAAAAMSMXAXAASMMXMAMAMAASMMASAMAMSAMXSASXSMAMSASMSSMXSMMMMAAAMSSMASXMAAMMMSAAMAMMSMMAMXAXSAMXXAAMMSMSXMAMASXMMMSMXMMAMA
MXSASMSSSSMMSSMXMMSASMSMSMMXAMXMXSMXSMSXSASMSMXSASASMSXMSXMAMMXMAXMAMXAXXAXXAXMMMMMMAMMSAMSMSAASXXSAMAAXMAMSXSSXMAMSSSMSAAMXSMAMSAAAAXXMAMMS
XMMAMAAXAAXAMAMAMMMAMXAAMXSMAMSSMAXAXAXASMSXAAAMMSMMXSMXMMMAMSAMMSSMMMMSMMMXXSMXAXMSAMSMMMXAMMXSAMSAMSMSSXMAMXMAMMMMAXAMMMXAMAMMSSMSSSMSASAX
MAMXMMMSSMMXSAMXXAAAMSMMMMMMMMAASMMMSMMMMAMMMMMSAXASXXAAMASAMMASAAAAXAASASASMMMSXSAXMSXAXMMAXSAMXAMMMMAMAMXXAASAMXSMMMXMXXMMSAMXXAXAMAAAAMAS
MXSXAXXXASXMMAMMSMXMAXMMSSMASMSMMXXXAAAXMAMXAXMMMMXMAMSXSXSASMMMMSSMSMXSAMASAAMAMMXMSMMMMXSAMAXMMAXAAMXMASXMXXSASASAMXMMMXMASAMXSMMXSSSMSMXM
AAMXMMSAMSMMSAMXAAASXMSAAAXAMXMXSXXSMSMSSMSSMSMAMSMAAMXXMAMMMAXXMAMXAMMMMMMSMMMASAMXAAAXAXMXXMAXMASMSSXSMMMSXASAMXSAMXMAAAMASMMASXMAMAMXXMAS
MXSASASAXXAASAMSMMMXAXMMSSMMSMMAAMASAAXAAAMXXAMAMAASXSXAXSMSSSSMMASXMMSAXAAMAMSAMXSSSSMMSXSMMSMMMAXXAMXMAAAMMMMXMAMXMASXSMSASAMASAMSSMSSMSAS
AAXAMXMXMMMMXMAMXAMXAMXAAXXAAAMASMAMSMMSMMMSMAMXXMMMXMMSMMAAAAAASAMMSASXSMXXAMMXMXMMMAXXXAAXAAASASMMMSASMMMSAXAAXXXMXMSAAXMMSXMXSXMAAXXAAMXS
XMMSMMSSMXAXXSAMSMSAMXMMMXMSSSXAMMXMAXMAMSAMASMMASAMAASXAMMMMMSMMASAMMSASAMSMXMAMAMMSAMXMMMMMSSMAMXMASASMAMMAMMSMMXSAXMMMAXMXMXAXMMMMMSMMMAS
MSAMAAAAMMSSXMAMAAMMMXMASXMXXAMXXAXSMSAMXMAXXXASASASXSMMMMMXXMMXSSMMSXMXMAMAAASXSMSAMASMSAAXXMXMAMASAMAMMAMAAMXAAAAMAMMAXMMSXMSSMMAXAXXMAMXS
XMAXMMSSMAAXASMMSXMASXSASAMSMMMMMSMSXMASXXMMXXAMASAMXAMXSASMMXMAMAMXXXXMSSXMSMSAAAMXSSMASMSMXMXMASXMAMSMSASXXSXSSSMSMMSASXAMAMAXASXSXMAMXXAM
XXSMSAXAMMSMXMAMAXMXSAMXSXMAASXSAXAXXXXMXAMSAMSMMMAMSXMAMMMASAMASAMMMXMXAXAXXAMXMMMAMAMXMAXMAXXSMXAMXMXXMASXMXAMAMAAXMXASMSMAMMMMMXAMXSMSMSS
MAMAMMSXMAMMXSAMMXSAMXMAMASXSMAAMMAMMSMXMSMAASMASXMMMAMXXSSMMASASXXAXSSMASXMMXMXSAXXMAMMMMMSSSMMSSSMSMSSMAMMAMXMAMSMMSMMMAMSMMXXXXXMAMAAAAAS
MAMAMXMMXXMAMSXSXMAXMAMASXMXAMSMXAXMMAASAAMSSMMAMAXAMXMAMXAXSAMXSAMMMAXMXMASAMXASXSMSMMAAXXAAXMAAXAMXAAXMXMASXMASMAXAXAAMAMMMMSAMXMMSAMXMSMS
MASMMMSMXSMMXSAMXMXASXSAXMMSXXAXXMMSXXSSSSXMAXMSSMXXXMMSASMMMMSXMMASMMMXASXSAMMXSASAAASXMSMMSMMMSXMAMMMSSXMAMASMMSXSSSSMSASXAAXAXXXAXAXMXMAX
XAMAAXAMASAXSMSMAMSXSAMMXAMXMSMSMSAMMMXMAXAMMMMMAXXSSMAAXAXAXXSXSMASAXMSMSMMAMXAMAMMMMMAAAXAAXMAMAXXSXXAMAMASAMAMXXMAXMASASMMSSMSMMMSMMMAMXM
MSSSMMAMAMAMXAAMAMAXMAASMSAAMAAAAMMSASMMSMSAXMXMASXAAMSSMMSSSMSAXMAXMAMAASXSAMSAMXMASXSMSMSSSSMASMMAMXMMSAMAMMSSMAMMMMXAMSMXAAAASAAAAAMSSSMM
AAAAXSSMXSSMMSMSSSMSSSMSAXMSSMSMSMASASAMXAMAASXMASMSMMAAAXAXAAMMMMSMMAXMSMAMAXMASAMXSAMAXMAMXAMASAMMSAMXSASASMAMXXAAXXMMXXSMMXSAMXMSSXMAMXAS
MMSMMMMMMMAAXMAAAAXAXXAMXMXMAMXAXMMMMMMMMMMSMAAMAXMAAMASXMASMMMAAXMAXSSMMXSXMMSSMMXMMXMAMAXMXMMXSXMASMMAMMMMXMXSXXMXMMAXMASXSXMMSXMMAXMASMSM
AXAMAAAASMSSMMMMSMMMMMMMASASMMMAMXSAMMSAXSAMXSXMASASXMAAXSXSXASMSSMMMXAXMAMAMAXAAMXAAAMXSSMMAMMMXMMAXXMSSXMSMXSAMSSSMSSSMMSASXMASAMMMMMMMMXM
MSASXMSMSAAAAAAMAXAXAAXXAMXSXMAXSASAMASMSMASAMSSMMAMXMXMASAXMASXAAAXSSMMMAXAMMSSMMMMSXSXAXASMSAMXSMMXXMAAMMAAMMMMAAAAAAXXSMAMXXMSXMAXAAAAXSS
XSMMAAXXMMMMSMSXSSMXSXSMSMXMAMSASASAMASXMMAMXMASASXMMMAXAMMMMMMMSMMMMAMMMXMAMMAMXAAMAASMMSXMASASMMASMMMMSXSAXSASMSXMMMMMXMMMMSMXMXMASXSSXSAA
MXSMMXSXSXXXMAXAAAXXAASAMAXXAMXMMAMMMXMXAMXMXXMSXMAAXSMMMSAMXXAAAXSASAMSASMSMMMSSXSSMMMAASMSMSXMXMAMXAAAXXMAXSAMAMXAXSXMAMAXAAAAXAAXAAXMMAMM
XAXSSMSAMXSXMAMMSAMXMMMAMASMMSSXXXMASASMSSSSMMXXASMAAAAAASAXXSMXSMMAXAMMASAAXAAMMXAXMXMMMSAMXMASXMMSSXMSSXSXMMAMAMSXMSASXSMSSSMMMAXAMXMMMAXX
MSMASAMXMASAMXMXMMMSASMSMAMAAXMASXSXSAXAAAXAASMSAMXMSSSMXSMMMXMAXAMMMSXMAMXMSMSAMAMMSAXXMMXMAMXMSSXAMXMAMXSAASMMSXMXASAMAAAXAXASXSXSXSXSSSSS
AXMAMSMAMASAMSMXAAAMAMAXXMAMXMASMMAXMXMMMSSXMMXAAXXXAXAXAMASAAMASAMAAXAMXSAMXMMAMMMASXSMSMMSXSAMAMMMSXMAMAXXMMXSXAMMAMAMSMMSMSMSAXAAAXAAAAMA
MXMAMXSAMXSAMXSSMMSMSMMMAMXXAAXMSSSMSAXMAMMXSSXSMMMMMSSMXSAMXXMAMASMSMMMXSAXAMXMSAMMSXXAAAAAMSAMAXXAAXSAMMSSMSMSSMXSXMAMAXXAASAMAMXMMMSMMMXX
ASXMAXMMSMMMSAMMXMXXXAXSXMASAXSXMXAAXXSXAAXMAMAXMXXAAXXAXMASXXXMAAAMMAAXXMASAMMXSASMMAMSSSMSXMXSSMMMSMSASAMAAAAXAMAMMXASMSSMSMAMMMAMAXXAMXMM
AMAMMMAAMAAAXAXXMASMXMMMXXXSXSMAMAMAMXMMSSMXMMSMMXSSSMMMMMAMXMSMMXSASMMSSMMAAXSASXMASXMXAXAXMMAXMASXMAMXMASMMMSSMMASASXSAAMXXMXMASASAXXAMXAX
MSMMASMMSSMXSAMMMMAAASAMSAMXMAXAMAXASAAAMXAAXAMAXAXXMAMSAXASAMXASAMXAAAXAAXMMAMASMSAMAXMXMMMMMMSSMMAMXSXSMMASXAAXXSMMXXMMMMMMAMXASXMASMAXSSM
XAXSAMAAAAAMAMXAAXMSMSAMMMSMMMMXXSXMXMMXSSSXSXXXMMSSMSMSASASASXMMASMSSSSSMXXXMMAMMMMSMMXAAAAXAAMAASXMXAMXMMAMMSSMMXMSMXMAMSAMXMMXSAMAMMXMAMA
SAXMAMSMSSMXASXSMSXMXSAMXAAAAXMSMMASXSMAXMAMSMMMSXAMAMXMAXAMXMXXMXMAAAAAXXSASXMMXXAAAAAXSSMSSMSSSMMMSMMMAXMAMXAMMAXAAAXAAXMMMAMMXSXMASXMMSSS
MMMSAMXAMXMMXMAXXMXMASXMMSSMMAXSASAMMAMXSASXXAAAAXMXXXMASMXMSAMXMMMMSMMSMMSAMXSAXSMSSMSMXAMMXAMXXAAXAAXSMSSSSMASXSMSMSSMSSSMSMMMAMMAMXAAAAAX
SMXMAXXAMSXSMMAMAMAMMMXSAAXMSMMMAMAMSMMXSAXXSSMMXSXMSSXAXMASAMSMSMSAAXXAXAMAMMMAASAAAXMMSAAAMXMAMMMXSMMSAMXXAXSMAXAAAXAAAAMAAAAMXSXMASMMMMSM
MMMSMMSMMXMAXMASAXMMMSAMMSXMAAAMAMAMASXXMAXAXXXSMSAAXASMMAMXAXAAAAAXMMMMMMSAMXMMMMASAMXASXMASAMSSSSXXAXMAMSMMMAMXMSASMMMMSMSSSMSAMASAMMXAAAA
MAAAAXMAMASMXSAMXSXXSMMXAAASXSMSXSMSASMXMXMMMSMAASAMXMASAMMSSMMSMSMAXAAXAAMXXAXAAMAMXXMASXMXMAMXAASAXSMSXMMASMXMAMMAMXXAAXXMXAXMASAMXSSSMSSS
SMSSMMSAMAXXMMXXMAXXMASMMSMSAAXMASAMXSMXSMMMAAAMAMMMSXMMSAAAAAXMAMXASMXSMASXSSMSSSSMXSAXSASMSSMMMMMSMAMMAMXAMAXMXMXMSSSMMSASMMMSMMXMASAXXAMX
XMAXAMXAMXMSXAASXMMMSAMMMAXMMMMMMMAMMXMAMAAMSMSXSMSASMSAXMMSSMXMASAMXMMXMAXAAAMAAMXMASXMXAMAAXXXXAAXSMMSAAMSSSMSMSAXXAXXAXMAAAXAXMAMMMAMMMSS
XSAMXSXMMSXMMMMXAXAMMMMSSSSXMMXXXSMMASMSSSMMMAMXMAMASXMAXSAMAXSSMMASASMXMASMMMAMMMSMMSAMMSMMMMSASMXAMXAMMXXAAXAMASMSMMMXMXXSSMSXSSMSAMXXXAAM
XMASMAASAMASAMMXMMXSAXSAAAMAMSXMASAMSXAAMMXAMAMAMXMMXXMAMMASAMMAMXXMASAAAAXXXMMMXMXAMSAMAAAAMXMXMASMSMSXSMMMSMSMAMXAAAAAMSMXMXXMMAMXAXXSMMSS
XSAMMSMMASASMSAAXAMSASAMMMMXMAAMAMMMXMMMSXMXMASAMXASXMMSMSAMAMSAMMXMXMMMMSSMMXXXSSSMMSMMSSSMSAMXMMAMXAMAXXMAXAXMAMXXMMXAXMMMSMMXMAMMSMMMAAXX
MSMSXMXXMMMMAMMSMAXMMMAXSAMASXSMMSAAXAXMXXXMSASASXXMAAAAXMASAMSASASXXMAMAMAAAXMAXXAXAMAAAAMXMASAXXMSXSMXMMXMXAAMASXSMSSXMAAAAXMAMAMAXMMSAMSM
AXAXMSAXSAXMAMAXXXMMASXMSASASMXAXXMSSSMMMMXMAMXAAXXSSMMSSMMMAMXMMXAMXMAMAMXMMXSMMSAMMSMMSSMASXSMSMMSAMMXAMAMMMSMASXAAAAASXMSMSSMSSMXSAASASXM
SMSMAMAMSAMSAMXSAMSSMSAMSMMXSMSSMXSAMXAAAXMASXMAMAMAMXXMMASMMSMAMMMAAMAMXSMXMAXAXXAMAAAXMXXXSAMAAMAMAMASMMASASAMMSXMMMSMMAAXXAAXAMMASMMXMMXA
XAMMSMSMMAMSAMAMMMXAXMAMXMXAMXAMMMMASXSSSSSXXMASMSMSAMXXSAMAAMXAMSXSSSMSAAAAMMSMMSXMASXMMAMXMAMSMXAXAMXMXSASXSMSXMAMXMAMSMMMMSSMXSMXSSSMSMSS
MXMMMMAAMSMSXMXSSSSSMSSMMSSMMMMSSXXMXXMAMAMMMSMXAAAAMAMMMASMMXSXSAAMAAAMAMSXSAAAAXXMMMMMMASAMAMAMSMSXMAXXMMSMSXSMSAMXSAMSASXAMXMMAXAMXXAAAAA
XXXMAXMSMXAMXMMMMAAAMXAAAAAASAMAXMMMSMMMMASAAAAMSMSMSAAMXAMXAASXSMSMMMMMMXAAMMSSSMSXAAAXSMXMSMMAXAAAMMSXSAASXMAXAMMSASXMSAMXXMASXMMMXAMMMMMM
MSASMSMMAMXMXMAAMMXMAMSMMSSMMAMAXXMAAAAXSASXSMSMAMMASMSSSSSMMXMASAAAXXXMXMMMMMXAAASXMSMMSAMXAMSSSMSMSAAXMAMSAMMMSXMXMXMMMSMAMXXMAXAXMASAAAXX
MXAXAAAXXAAMAXMMXXSASMXAXXAAXMMMXMMSSSMXMXSAMAMMSSMAMMAAXXXXXAMXMSMSAMXXAMXSASMSMMMMMAMMMAMMAMAXAAMXMMSSMMMSXMAAAAMSAMXAAXMSSXASXMAMXAMXXMSM
SMMMSMXMMMXSAMXSSXAAMASMMSSMMSAXAMXAAAXSXSMMMAMAXXMSMMMSMMASXMMSAAXXASMSSXMSAXAMXAAAMASAMMMXXMAXMMMMXMAAAAAXXAMMSSMAAMSMMSAASXMMSSMSMAXSXSXM
SASAAMSMSAMMMXSAAAMXMAMAAAMAASASMMSXSMMAMMASMXMAXSAXXAAAAXAAAAXMMMXXMSAAAAXMSMSMSSSSSXSXXMAMXMXMSAXMAMXSMMSSSXSXAAMSMMXMAMMMMXMAMMASXXMSXMAS
SAMMMXAAMAMAASMMMXMMMXMMMMSSMMMMMASAMXXMAMAMXSXMXMASXSXSSMMSAMSMSXSAAMMMSMMAASXMAMAAMAMASXMASMAASAMSASXMAXAAXAXMMXMASXXMAXXAMAMSSMAMMSMMASAM
MAMXSMMSMMMXXMAAXAMXMAMMSMAASASAMMMAMAMXSMAMAMASXMAMAXAXXXMXMASAAASMMMXXXAXSMSXMASMMMSMAMXSASMXXMAMSAMMMSMMSSMSASASXMMMMMXXMSASAAMMSAAASAMAM
SAMAMAMAMXSXMSSMXXXAMXSAAMSMSSSMSASAMMMAMXSMXMAMAMMSAMXMMXXMASMAMXMAMXXASXMMXXXMAMAMXXMASXSASAMSSMXMMMAAXXXAAXMAMASASXSSSXXASMMMAMXMXSMMMXSM
SAMMSSSMSMXAAAAASMSXSAMXXMAASAMASASMSSSXSAMXSSMSXMXMASXAAMMSMASMMASXMXXMASXMAXMMSXMMSXMXSAMAMXMAAXXAASMSSMMMSMMAMXMMMAAAAASAMXXMXSXSMXMASAMM
MSAMXAAXSASMMSSMXAAAXASXSSMSMAMXMMMAAAAMMXMAAAASAMXXXMXMSAXXXAMXMXAXXSXXAXMSSSMAAASAMXSAMXMAMXMMSMMXMSAXXXAXAAMXSXSXMMMMMMAMSSMSASAMAMXAMMSS
SXMASXMXMASAAAAMMMMMMMXMAAXMXMMSAXMMMSMAASMMSMMMASMMSMMXMXMMMMSAMMAMXMAMSSMAAAMASXMAMAMASMXMXMXAMXMASMXMMSSSXSAXSASMSSSMXXMXAMAAMMXMSSMXSAAX
SSMASAXMMAMMMXMMAMAXXXAMMMMSAMASAMXXXAXMAXXAXAMSAMXAAMSASAXMAXMXSAMXAMXMAAMMSMMXMMSAMXXAMXAMMXMMSASXSAAMXXAAAMXXMAMAAAAXXXXAMMSMXSMMMAAAMMSS
SAMAXMMSMSSSSSMMMSXMASXSXXMXAMXSMSMMMMXXSXMASAMMXSMXSMSASMSMSSMAAXSSSSXMSSMMAMXAAMMASMMXSSMSSXAXSAMAXMAMAMMMMMSAMMMMMSMMMSASXXAXAMAAAMMMSMAX
SAMAMSAMXASAAAAMMMXAXMAMAMMSMMMSXXAAAXXAAAXAMMSMMAMXMXMXMXMAXAXXMAXAXAXMAMASXSSMSMSMMMSXAXMAXMMMMAMXMXSXASAAXAXMASMAMAXAXMXMXMMMMSSMSSMXAMSS
SXMAXXAXMXMMMMMMAAMMSMXMASAAAXASASXMSSMMMMMMSAAAMAMXMASXSSXSSSXMXMSXMMMMASMMMMAMAAAAAAXMSMMMSMSASAMAMMASASMMMMMSASXMSAMSXMAMXAXSMAMXMAMXMSAA
SMMMSSSMMSXMSSSSMSMASMMSASMSSMASAAXAXXASMSAMMMSSMAAMMAMXXMAMAXMXAXMAASMXMSXAASXMXSSMMXSAXMASAMMAMXXAXSMMMXAXXSAMXSAXMAXAMSAMASMAMAXXMASXXMMS
SAMXAAAAAAAXAXXAAAMAXSAMXSAAAMMMMMSMXSSMASMXAXXXMXSAMASXSMMMSMMSSXSSMMASMMMSMXSMMMAMAXMXMAMMASMSMSSSXAXASMMMXMASASMMSMMAMSASXMXSSMSAMAAXAMXX
SSMMMSSMSSSMMSSMMXMSXMXSXMMMXAMXAXAMAXAMXMAMSMMMSMMXSMSAXXXAXAXXAAXXMXAXAMXMSMASASAMSSSSMAMSAMXXXAAXMASMSAXMSXMMMSAMAMMMMSAMAMXAAMAXMMSSMMSM
SAXXAXAAAXAAXAXMASMMASASMSASMAMSXSAMMSMMSMSMMAMSAAAASAMXMXMAMXAMMMMAAMMSSXMAXMAMMMAMMAMXXAXMMSXXMMMMAMXASAMXAXSAMSXMASAAAMMMAMMMMMAXXXMAXAAX
SAMMSSMSMSSMMMXSAMASAMASASASXSXAMSASAAXAXAAASAMASXMMMAMMMMMASXMSAXMXMMXAMAMAXMSSMSXMMMMSSMXASAMXXAXMSMMMMMAMSMSAXXXSASMMMSMMMMXAAMMXMXSXMASM
SSMAXAXAXXMXXMXMASMMASMMAMMMAMMMXSAMMSMSSXSMMMMMAXMASMMAAAMASAASXSAAXXMASXMXSXMAMMMMSMMMASXMMMMMSXSMAXASASAAMASXMXAMXXXXSXXXAASXMMSAMXXXMXXA
MAMXSMMMAMAAXMASAMMSMMXMMMXMAMAMMMXMAMXAXXXXMAAXXMXXXMSMSSMAMXMSAMMAMXSXMXMASMSMMSMAAAMMAMSSMXAAAXMMAMMSAXAMMAMAASMMMMMMSAMXMMSMAAAAAXMMMSMS
SMMAXAAXASMMMXAXASAAMMAMAMXXASASASMMSSSMXXMASMMSAASMSXSMXAMASMXMAMXMXXSASASXMMASAAMMXSMMXMAXASMSSMXSSSMMMMSMMMMSMMAASXSAMAMAAMXMMMSSMSAAXAAA
AXSXSSMMXXAAAMXMMMMXSSXMAXSSMXXMASXAMMXXMMMAMMAMAXAAAAMMSAMAAAAMSMSXMASAMMMAMXAMMSSMSAMAXSMMMSAMXMASMXMASAXAASAMXMSMMAMXSAMXASAMXXAXMAMSSMSM
MMMMMMMXSSSMMXMASASXMMAMSMXAAXSMMSMSSMMSAXMAXMAMMSMSMSMASXMMMSSXAAXMAXMMMSSSMMXSXMAXAAMMMXXAXMASAMSSXAXMMMXMMMAMXAMAMXMASMSXAMXSMXMASXMMXAAX
XAAAAXXXMAMAAMMSMAMXAXSAXASMMMXAAMMAAAAXXXSSMSMSXAMMMXMXSXXSXAAXMMMMMSASXAAAXXAMAMXMSXMASMMSXSASASAMXXSMASMMSXSASXMAMMMMSMMXXMASXSMMSAAAMSMS
SSSSSMMSMAMMXSXAMAMSMMMASAXSAASMMSSMMMMSMXXMASAMXXMASMXXMMASMXMMXAAXASAMMMSMSMMMSMXAMMMMXAMAMMAMMMAMXMAMAMASMAMAMXMXMSAMMMAMMSAMMMAASMMMAXAX
AMAXMAASXMSMASXXMXMAAXMAMMXMXMAMXAXXAMAAXAAMSMAMMSSXSAMXSSMXMSXSSMMXAMAMAAXAMXAXMASMXMASMSMSSMSMMSSMMAMMSSSMMAMAMAMSASASAMXAAMMSSXMMSXXMASMX
XMMMXMXMAMMMASAMXASMSMMMSAMXMMASMMSSMSSMMMSXMMMMMAAMMMMAMASAXXAAAMSSSSXMSMMSMMASMAMXASAMAXAXXAXMAAAASMSMMMMASMSXSAXMAMASXSMMMSAAMASAMMXMAMXS
SAMSSMSSSMAMASMMSMSAMAMAXXXAAMASAAAAXAMXAXMASASAMAXSAAMMSMSMXSAMXMAAAMAMXMAAASMSMAMXMMMMSMSMMSMMMSXMMAAXMASXMASXMAMMMMAMMXAASMMXSAMAXSXMXSAM
XAMAAXMAXSXXXMAMMXSASAMMSMXMSMAMMASMMSSSXSAAXAMASXXSXSSMMXMMAMMXXMXXMSMMAMSSMMAXXAMAXAXXMAMAAAAMAMAMMSMMSAMAMAMXMAMAXMASXXXMXAAAMASXXSAMAMAX
SMMSSMMSMXSSSSMMSASXMMAMAXAAMMSXSXAXXMAXMXMASMXMMMAXAXMMXAXMASMSSMSSXSAMXMXAAMMMSSSMXAMMMAMMMSSMAMXMXAXXMASMMMSMSAXXXXSXAMSSSMMXSAMMASAMMSSS
AXAXMMAAAMSXMASAMXSMMSMSASMSXAMMMSAMMMAMMAXMAMSXAMXMMSXSMMSSMSMASAAXASMSMSSSMMXMAMAMSMSXSASAXXAMXSMXSSXSMAXAASAMXMSMSMAMSMAAMXMXMASAMSAMAAAM
MMXSMMSMSMMASAMXSASAXAAMXSXXMMXAMMSSXMAMMMXSAMMMXMMAXMMSAMXAXXMAMMMMMMAAAXAMXMAMAMAMAAAXASXMSXMAMAAXXAAXMASXMMMMAMAAAAXAMMMMMXSXMXMMXSMMMMXS
XMASXAAXMASAMXSAMASMSMSMMMMMMMSMSAAMMSASAXAMAAAMXMSMXMAMAMSMMSMMSAMXAMMMMMAMXSMSXSASMMMMMMXMMASAMXXSSMMMMXSXAXASASMSMSSSSXXSXMMSMMMSMSXMXSAX
XMAXXSSXMAMXSMMMMAMMMAMMAMXAAXAXMMMXAXASASXSSMSSMAAMXMMSAMXMAAAXSXSSMSMXXMAMXSXAAAAMXSSXXAXASAMMSSXMASMXMAMMSMMXAMXAXXXAXMXMAMAAMAMAASAMAMMS
SMSSMMXXMAMAMXMASAXXMAMASMSSSMMSXSSMSSMMMAMXXMAAMMMSMAXAAXAMSSSMMXXXMAMMSSMXXMMMSMMMXAMMMMSMMASXAAXAXAXASASAXXSSSMSSSMMSMSASAMXSSSSMSMAMASAS
AAXMASAMXXMASASMSMSSSSSXMAAAMAXMAASAAAAAXMMAMSMSMSAMMSMSMMAMAMXAMXSMSASMMASXAXXAMASXMMSAAAAMMMMMXSAMXXSASAMASMMAAXXXAXAAASASASAAXXMXMAXSASAS
MXMSMMASAAXASXSXMAAAAAAAMMMSMSSMMMSMSSSMSMMMMAAMAMXXAAAAXXAXAXXXMSMAXAMMMAMXXMMMSMMAAXMXSSMSMMAXMXAMAMMXMXMMMAMSMMMSXMSSMSXSAMMAMAMXMAMXAMAM
MAMAXSAMXMMASXMMSMMMMXMXMMXXXMAXAMXAAAAAAAXSMMSMAMSMSMSMMSSXMSMSMMXSSSMMMASXMXAMMASMMMMAXMXAASXSAMAMXXMMSAMMSMMAAAAXXMAMXXAMXMAXXMASMMSMMMAM
SASMMSXAASMAMAAAXASXMSMXXSAMXSAMMSMMMSMSSSMMAMXXXMSAMAAXMAXAAAAAAXSAAAAXSAMMXSXSSMXASAMSSMMSMMASMMSMSSXASASAAMSSSMSMXMSXSMSMMXMAXAMXAAXAXXAM
SASXAMASMAMASXMMSAMAXAAXAMXSXMSMSXMMAXXAAMASAMXSMXMAMSXXMAMMXMXXMMAMSMMMXASXASAMAXSAMAMMAAMMXMMMMMXAMXMXSXMMXMAXMAMASMMASAAMAAMMMSXSMMSMMSSS
MAMAMSAMXXSASXSXMASXSMAMMMMSXSAXXAMMSSMSSMXSASAMAXMMMXXAMASXSSXSAXMXMASXSMMMASASAMAXMASMSMMAAXAAAXMAMMSXMASMSMSSMASMMAMXMMMSSXSSXMASMAMAAAMM
MSMXXMXSXAMXSAMXSXMASMASXSAMXMMXSAMXAAAAAMXXMMMSSXSAMXMSMASXAAAXXMXMSAMXMAAMXSXMXSMXMXSMAMXSMSSXSMSXMAMASMMAAAXSMASXMMMASMMXMAAXMASXMAXMMSSX
SAMSSSMMMMMAMXMAMASAMXASAAMXASXMAXMASXMXSMMXXAAXAASMXAAAMMMMXMMMMAXAMMSAMSXMAXAXXAMSSMXXAMMXAXAXMMMASXSAMAMSMSMXMMSXSXMAMAMAMMMMXXMMSXXAXAXM
MASMAAAAAAAAMAMASXASXMMSMSMXXAMXSASAXAAAMAMSMMSMMMMXSMSSSSSMASXXSMXMMXMAXAAMSSMMXAMAAMXSXSAMAMMMMAXASXMASMMMMAAAXAMMSAMXSAMXSSXAXMMAAMSSMASX
SSMMMMSSSMSASASASAMMMMASAAASMMMAMXMSSMMMMAMSXAXAXMAXAXAAXAASAMSXMXSAAAMSAMXXMAMSSMMSSMMMAAXMSMASMMMAMXSAMMAAXMMMSXMASXMXSXSAAXMASAMMMMAMMXMM
XAAMXXAXAAMXXXMASXXAAASMSMAMASMMMAXMXMAXSMMXMAMMAMXMMMMSMSMMXSASAAXMMMXAXXMSSMMXAAAAAMSMSMMMMMXXAXMMAAMMSSSSXSAMMXMASAMXMAMMMMAXSXSXSMMSSMMM
SSMMSXMMMMMMMMSMMXSMSMMAMXXXAMMSXMMMMSAXSXSAAXMSMMAAXAMAMXAASXMMMSXSASMMMXXAAAXMXMMMSMAAXASXSAMSSXMMMAXSAXAAASAMSAMXSXMAMAMAAMXMXAMAMASAXAMX
MXMASAAAMAAAAAAAMXMAXASAMSSMAXAMAMXAMMMSMASXMXXAAMXSXMSMSSMXAMXMAXASASASASMSSMMXSSMAXXMSMASAMMXAMXXAXAXMAMSMMSAMAAAAMMSASMSXSAASMSMAMSMASMMM
XMMAMXSMSSXMXXSXMXSMSAMASAXSSMSSSXSMSAMXMAMASMSSSMMXAAAAMAMAMSXMASMMXSXMASAMAMXXAAMASASXMAMAMXMMSMMMMXXXMAXXXMAXSSMMSASXSXMAMXMSAMSXSAMMMAAX
MMMMMMAMXMXSSMXAXAXAMASXMMMAXXXAMAMASXSXMASXAAXAAAAXMMMMXAMSXSAMASXMASAMXMMXSMMMSXMASXMAMMSSMXMAXAASMMSXSAXAXSSMAXAXMASXMXMAMMSMXMASMXSMMXMS
ASAMMMAMXMXXAAXAMMSXSXMASXXMASMAMXMAMXSMSXAXMMMXMMMXMXSAMSMXASMMASAMASMMAMAXMAXAAMSMXMSSMAAAMSMXMSMMAAMAMSMSMMMAMSMMMAMASMMAXMAAAMXMXXMASAMX
MSASMSXMASMSSMMXMXAAMMMMXXSAMXSSMXMXSAXMASMMSAMSSMSASASAMXAMAMXMSSMMAMAXAMMXSAMXMXAASMMASMSSMAAAXAMSMMMXMAXMAAAAMXAXMXSAMAXASMMSSXSAMXSASASM
AMAMXAMSXSAAMMAXXXMMMAAXMXMXMMMMAASAMMSMAAXASASXAASAMXSAMMAMSMAMAXAMSSSMSXMASXMXSSMSMAMAMXXXMMSMXAXAXXMAMXMSSMSAMXSAMAMASXMMSAAXXASMXXMASXMA
XMAMMSMMAMMMSMSSMASMSSMMAAMAMAAMMMSASXAMMXMXSMMMMMMXMMSXMSXMASASMMSMMAAAAMXAMXSXMAXXXXMSSSMMSMAXXSMMMMSAXSAMXMXMSAMAMMSAMMAXSMMMMXMASMMMMASM
SSMSAAAXAMXXXXAAMAMMXAMXSMSSSSXSAXSAMXMSSXXAXXAAXMMSSMMXXMAMMMMMAAXAXSMMMSMASASAXXAXXXXXAAXAAMXSXMAXAXMXMXXXAXAXMMMXMMMAMSXMXXXAMAAXMXAXSXMS
AAAMXMSXMSMXMMSMMASXMAMAXAAMMMAMAAMAMAXAAMXMAMXSSMAAAAXXMASXXSSSMSSXMASXAXXMMASAMXMSMSMMXMMSMSAMASAMSMSSMSSSSSMSAXSASASMMSASXSSSMMXMSXSMSAAX
XMXMAXAASAMAMMASXXSMSXMXMMMSAXMMSSSMMXMMAXSXXSAMXMMXMMXSMAAXAAAAXAMAXSAMXMAXMXMMMASAMAASMMAXXMAXAMMXXAMAAAAXAAAMAMSAMAMMXMAXAAMMMSAAAAXAXMMM
MXMASMMMXASAXMXSXAXXXASAMAXMAMXAXXAAAXMXAAMAAMAMMXSAASMMASXMMMSMMMSAMAXSSMSSSMSASXSXSSMMASXMSSMMSSMAMMMMSMSMMMMMSMMAMMXMAMMMMSMSAMMMMXMXMMSM
ASXAMAMAMXMXSMAMMMMSMMMASXXMXAMSSSSMMMMMSXMSMSXMAAMMXMAXAMXSXXAXAXMASMMAXAAXASAMXMSMMMMXAMAXAAXAAAMMSXSXXAXMAAAXAASXMMASXSXXAAXMMSXSMMMAMAAS
SSMMSAMASAAXXMAMAAXXSASMMXXXSMXMAXXAAXMMMAMXAMXMMSXSSSSMASXMAXMSSMSAMXMXMMASMMMXAXXAMAMMASMMMSMMSXMXAAMAMMMXSSXMSXMSASXSAMAMMSSMMSAAAASASXMS
AMAMSXSASMSMMSSMSMSMMXSXAXSMSXAMAMSXMSMASAMSASXSMXAAAMASAMAMXMXAMMMMXXMSASAMXMXXXXXAMASMMMMAAAAXAAMSMMMXMAAXXAMXXMXSXMASXSASMAMXAMSSSMSXSXXX
SSMMXMSAMXMAXAXAMMSXSXMMMMMAMSXMXASAXXMMXAMSAMXAAMMMMXMMMSAMXXMASMASAMXAXMASMSSMAMSAMXMMAASXSSSMSAMXXXSXMMMMMAXMASAMAMMMMSASMAMMXMAXXAMXMMMS
MAMMAMMAMMMSXMMSMASAAMXAAAMSMMXSXASXMASXSSMMAMSMMMAAXXAMXMAMSASMMMAXASMMMSAMXAMMAMASXSXSSMMXAAAXXSAXMAMXXASXMMMSSMASXMXAAMAMMXMMAMXSMMMXSAMA
MSMSASMMMMMMAXAXSAMXMAMXMXMAAMASMMMAMMMAMXAXXXAXMSSSSXMAMSAMXASASMSSMMMXAMASMMSSMSAMMMAAMAAMAMMMMMSMSASAMXMAAXMXMAMMMXMMMMAMMXSAMXMMAXAXSXSM
XAMAMXXMAMASAMSMMXSXXSMSMSSXSMAXAASMMSAAASMMMSASAMAXAAXAMMXMASMMMAXAXAXMXSAMAXXAAMXXAASMSSMSAMXAXAAMAAMASMSSMSMAAAMMXSAAASMMSASASXSSMMMXSAMX
MMASXSMMSMMSAMXMMMMMXMAAAAAAXMXSSMSMASXMMAAMXXSMMMMMSMMMSAMXXXXXMXSMMXSAXMASMMSMMMAXSMMAXMASMSSMMMSMMSMAAAAXAAXSXMSXAXMXMSAAMASAMAMAAXSAMXMX
XXAMAMAAAXXMASMXSAMSMMSMSMMMMXMAXAXMASXMXXAMXMAXAAAAAMXXMMMMMSMXXAMXAMMMMXMAMAXAAMMXMAMMMMAMXAXAMAMXAMMMMMMMSMXMAMXMASMSAMXMMXMMMXSAMXMMSMAM
MMAMASMMXSSXMXAAMSMAAMAMAMXSXXAMMSMMASAMXSSSMMMXSSSMMSMSMMAAAAAMSMMXMSAXXMXAMXSSMXSASXMSMMASMSSSMASMMMAXXXAAAXASAMXSXSAMXSAMXXAXXMAMSMMMAAAA
XSXSMSASAAXXMMMMMMSXMXASAMSAMSXSAXXMASAMAMXAAXXXXAXMXAMAASMMSSXMAAMAMMMSMASXSAMXXAMASXMASXXSAAAMMXMASXSSMSSSSMMSAMXXAXXXMMMMSMSMXMMAMASXSSMS
MXXMAMAMMSMXXAAXXMASMSMSASXAMAAMASAMXSMMAXSSMMXSMAMXSSXSXMMAAAASMSMASAAMAMAMXASAMMSMMXSXSXAMMMXMMAMXMSAAMAMAXAXSXMMXMMMMXMAXAAAMAXXMSAMAAMAX
MMMMAMAMXAMMMSXSASXAXAASXMMMMMMMXMAMAXXSMXXMMMMMMMMMAMMMXXMSMSXMAAMXMXMASXMAMMMAXAAAMASMMMSMSMSSMSAMXXMMMSMMXAMXAXXMXAXAAXMSMMMSXSAMXAMXMMMM
AAAMASASMXSAAAMMAMASXMXMASAXAAAXMSSSMSASXXXAAXAXAAAMMSAMXMXMAMAMSMMSXAXAXMASMSSMMSSSMASAXAMASAAAAXMAMXAMXXAXSSMSSMMAMXMSXMMAMXMAAXXAMXSMXXAA
SSXSAMASAMXMMSSMAMAMXXMSASXSMSXSAAAXAAAMMMSSMSSSSSXSASASAAAMAMAXAAASXSMSMSAXXAASXXAXMXSMMMMAMMMMMMSASMXSASAMXXAAMAMSSMAXASXAXXMXSMMSMAAAMSAS
MAXMXMXMMMXMSAXXXMAXXMAMXMMMXXXMMMSMMMAAXAAAMAAAXXAMASAMXSMSMSXSSMMSAMAXAXAMMSMMSMMXMXSXAXMASXXMAMSASAAMAMSMXMMMSSMAAAMMAMMMMMMMMXXAMMMSASXM
MSMSMXMAXXAXMASMXMSMAASMSSMSASMXSAMAXXXSMMMSMMMMMMSMXMXMXXMAAXXXXMMMAMSMMMSMMXAAXXMAMXMSSSMAAXSASXMMMMMMMMAMAXXXAMMSSSXMAMAMAXMASMSXMMAAXMAX
XAAAAASXMMSSXMAXAAAAXAMAAAXXASAAMASXMSMMASAXAAXAXXAMSAMXMMSMSMMSMSSSXMMAAAMASXMMSAMXSAAAXSMMMMSAXMXAXAAAASASMSMMMSMAMXAXASMSMSMASAMAMMSMMSXM
SMSMSMMAASMMMXAXMMMSSMSMSSMMXMMMSXMMASASAMXSSMSXMXASXXMAMXAXXAAAXAMMMMSSMSSMMSMASMMASXSSSSXXSAMAMXSSMXSSXSXXAAASXAMMSMMSAMMAMXMASXMAMAXAXXSM
XAXAAAMSXMAAMMMSMSAMXAXAAMXXXXXXXXAMAMXMMSMXMAMMSMMMMASXXAMXSSMMMMSAMXAMMXMMAMXASMSMSXMXAMAXMSMASXAAMMMMXXAMSMMMSXSXSAXAAXSSMXMASMSMSMSAMXSX
MMMSMMXMASMMSAAAAMMMMAMMMSXMMMMMMXXMXMXXXAAMMAMAXXAAMXMMSSXXMAAXSXSMSMSSMXMMSXMASAMXMASMSMSMAXSASMMMMAAMAMXMAAAAMMSASMMMSMAXXMASXXAMAAMXMAMX
MAAXASMSAMAMSMMSSXMAMAAMAMAAAAAAAAMSMSAMSSSSMSMMSSMMMSAAAXAMXXSAMXMASAMAAMXAMASAMXMXSAMAXAAMXMMMSAAXSMSMXMASMSMXSAMMMXMSMXMAMSMMMSSSMSMAMASX
SSMSAXMAXSAMXAXMXMSMXMMMAXXMMXXMMMXAAAXMAMXMAXSMAAAAASMMSMSMAXMAMSSMXSMXMXMAXMMMSSXMMSSSXSASXAAASXMMSAMMSAAXAXAAMXMAMXXSAMXMAAAAASMSXAXXSAMM
XMAMXMAXXMASXSMSXMASAMXXSSMSXSSMSMSMMMXMAMMMSMAMSSMMXSXMAAAMAXXSMAXXXMXSXMAMXAMXSAMSAMXXXMAMXSMMSXXXMAMASMSMMMMMSMSASXAMAMAXSSSMXMASMSXXMAXA
MMXMSSMSXSXMAXMMXMASMMSAAAASAMXAAAAXXXMMSMASASAMXAASASMSMSXSMSAMMMAMMMAMAMASXMMMSAMMXSMSSMASAMXSXASXMSMMMAXAXMXAXAAASMSMSMXXAAAMSMSMAMMMSXMS
XSAMXMAAMSAMXMAAXMASAASMXMMMSMMSMSMSAASAASXMMXMASMMMASAAAXAAAMAMAXAAAMASXMASXAAXSAMXAAXMASASASXAMMMAAAXSMASXSAMXSMMAMAAAXAMSMSMMASAMXMAAAASM
SSMSAMXMASXMSSXMXSAMMMSXAXAXXXMAXXAXXSMSXSXXXXMASXSMXMMMSMMMXMASXSMSSSMSMMSSXSMMSAMMMSMSXMXSMMMXXXSMMMSXSMXXMXMMMXXAMSMSMXMXXXMSSSXSSSMMSSMA

154
src/day04.zig Normal file
View file

@ -0,0 +1,154 @@
const std = @import("std");
const print = std.debug.print;
const process = std.process;
const fmt = std.fmt;
const files = @import("lib/files.zig");
const args = @import("lib/args.zig");
const Direction = enum(u3) {
LD, // \
UD, // |
RD, // /
LR, // ->
RL, // <-
LU, // /
DU, // |
RU, // \
};
const Errors = error{
NoPreviousCharacter,
};
const one: u8 = 1;
fn setDirection(flags: u8, dir: Direction) u8 {
return flags | (one << @intFromEnum(dir));
}
fn hasDirection(flags: u8, dir: Direction) bool {
return (flags & (one << @intFromEnum(dir))) != 0;
}
fn getCharFrom(dir: Direction, search: *[141][141]u8, size: u8, x: usize, y: usize) ?u8 {
const at_x = switch (dir) {
.LD => if (x > 0) x - 1 else return null,
.LR => if (x > 0) x - 1 else return null,
.LU => if (x > 0) x - 1 else return null,
.RD => x + 1,
.RL => x + 1,
.RU => x + 1,
else => x,
};
const at_y = switch (dir) {
.LD => if (y > 0) y - 1 else return null,
.UD => if (y > 0) y - 1 else return null,
.RD => if (y > 0) y - 1 else return null,
.LU => y + 1,
.DU => y + 1,
.RU => y + 1,
else => y,
};
if (at_x >= size or at_y >= size) {
return null;
}
return search[at_y][at_x];
}
fn prevChar(current: u8) !u8 {
return switch (current) {
'S' => 'A',
'A' => 'M',
'M' => 'X',
else => {
print("Found illegal char {d}\n", .{current});
return Errors.NoPreviousCharacter;
},
};
}
// NOTE: would be nice to be able to pass a slice of slices, but this works.
fn solve(search: *[141][141]u8, state: *[141][141]u8, size: u8, dirs: []const Direction) !u32 {
var total: u32 = 0;
for (0..size) |l| {
for (0..size) |c| {
if (search[l][c] == 'X') {
continue;
}
for (dirs) |dir| {
if (getCharFrom(dir, search, size, c, l)) |actualPrevChar| {
if (getCharFrom(dir, state, size, c, l)) |prevState| {
if (try prevChar(search[l][c]) == actualPrevChar and (actualPrevChar == 'X' or hasDirection(prevState, dir))) {
state[l][c] = setDirection(state[l][c], dir);
}
}
}
}
if (search[l][c] == 'S') {
total += @popCount(state[l][c]);
}
}
}
return total;
}
// TODO: Find a nice way of abstracting this.
fn solveReverse(search: *[141][141]u8, state: *[141][141]u8, size: u8, dirs: []const Direction) !u32 {
var total: u32 = 0;
var l: usize = size;
while (l > 0) {
l -= 1;
var c: usize = size;
while (c > 0) {
c -= 1;
if (search[l][c] == 'X') {
continue;
}
for (dirs) |dir| {
if (getCharFrom(dir, search, size, c, l)) |actualPrevChar| {
if (getCharFrom(dir, state, size, c, l)) |prevState| {
if (try prevChar(search[l][c]) == actualPrevChar and ((actualPrevChar == 'X' and search[l][c] == 'M') or hasDirection(prevState, dir))) {
state[l][c] = setDirection(state[l][c], dir);
}
}
}
}
if (search[l][c] == 'S') {
total += @popCount(state[l][c] & 0b11110000);
}
}
}
return total;
}
pub fn main() !void {
var margs = process.args();
defer margs.deinit();
_ = margs.skip();
const input_path = margs.next() orelse {
print("First argument should be the input file\n", .{});
return args.ArgError.MissingArguments;
};
// Only read one dimension, the input is a square matrix.
const input_size_str = margs.next() orelse {
print("Second argument should be the input size\n", .{});
return args.ArgError.MissingArguments;
};
const input_size = try fmt.parseUnsigned(u8, input_size_str, 10);
const input = try files.openForReading(input_path);
// 140 is the size of the max input.
// NOTE: I could use a single matrix of u16 and store the state
// on the MSB, this is fine though.
var word_search: [141][141]u8 = undefined;
var state: [141][141]u8 = undefined;
for (0..input_size) |l| {
_ = files.readLine(input, &word_search[l]) catch {};
@memset(&state[l], 0);
}
const directions = [8]Direction{ .LD, .UD, .RD, .LR, .RL, .LU, .DU, .RU };
var total: u32 = try solve(&word_search, &state, input_size, directions[0..4]);
total += try solveReverse(&word_search, &state, input_size, directions[4..]);
print("Total XMAS: {d}\n", .{total});
}

View file

@ -2,6 +2,10 @@ const std = @import("std");
const process = std.process; const process = std.process;
const print = std.debug.print; const print = std.debug.print;
pub const ArgError = error{
MissingArguments,
};
pub fn getFirstArg() [:0]const u8 { pub fn getFirstArg() [:0]const u8 {
var args = process.args(); var args = process.args();
defer args.deinit(); defer args.deinit();