Add solutions for day 4 and 5.1

This commit is contained in:
Felix Suchert 2025-01-11 16:28:26 +01:00
parent 8e9c34571d
commit 39b7dd0e8b
Signed by: feliix42
GPG key ID: 24363525EA0E8A99
6 changed files with 1775 additions and 0 deletions

141
inputs/day_4.txt Normal file
View file

@ -0,0 +1,141 @@
XMXMAXXSXSSMMMXAMXMMMAMXMAMXAMSAMXSAMXMXMMMAXXMASMSMSAMXMSMMMAMXMXAMMAMMMXMAMMMMMAMMMMSAMXMMAMXAXMXMAMXSXSMMSMMMMSMMXXAMSMSASAXMMMSMMMSMASMM
MSMSMSMXMMAASAMXMASMMXSSMSSMSMMXXSAMXMXMXMSMMXMMMAAXXAAAMXSSSMAAXSXSMSASXMMSMMAAMAMXMASMSASASXMASMMSMSAMMASXAXAASAAMAMSXMAXAMAMSAXAAMASMAMAM
MAAAAXXAAXXMMMSASASASAAAAAAAAAXSMSAMMMAMAMAAMMMAMMMMMSSXSAMXAMMMMAXSAXAXMMAAASXMMASMMMSXSASAXMSAAXAMAMAXSAMMSMSSSMSMMAAAMMMMMAMMASMSMAXMASAM
XMSMSMSASXMAAAMMMAMAMMSMMMMXMSMAASXMASASXMSMMAMXXAMXAMXMMAXSMMMSAMXMAMSMAMSSMMAMSMSASAMAMAMAMAMSAMXMAMXMMASAMXMAXXXAXXSSMXASXXXSAMXXMAXSMXAS
MMAMXXXAAAMMMSSSMMMXMAXXSXXXSAAMMMXMXSAXMAXASMSMXAMXSSXMSSMXXSXMAXSMXMAMSMAMAMMMAXSMMAMAMAMMMSMMXXASASXXSAMMSMMAMXSXMAMAXXXSXMXAAXXXSAMSMSMM
ASMXMSMMMXMAAAMAASMXSXSASXMMSASMMMXSAMXMMMSAMMAMMMMMMAAXAMXSMMASMMXMMSMMAMASXMXMAXXASMMXXXXAMAXSSSMSASMMMASASAMAMXMASMSXSMSMMAXMXSMMMASXAAAX
MXAASXSXAAXSMSSMXMMAMAMAMMMASAMXXAAMXMAAAXMXMMAMMMAASMMMSSXSSXXMXAMSAAAXSSMSAMASXSSMSAMSSXSASMSAAAAMAMAAMMMASMMASAXXMXAAAMAMMSMMAXXASXMMSMSS
XMSMSAXMMMMMAMAXAMMAMSMAMAXXSAMXMMXSASMSSSMAMMMSASMMSXSAMMAMXMSMXSAMSMSMMAXSXMASXAAAMMSAAASAMXXMSMMMASMMSMMMMASMSXSMMXMXMXASAMXMAXXASASXXAAM
SMMMMXMAXMAMXMASMSAMXMMXXMSXMXMSSMMSXMAXXAMXMAAXMXXXMMMASMAMAXXAAAXXAXXASAMXXMASMMMXSMMMSMMMMMXXXXMSASXAAXMAXXMAXAXAXAXXSSMSMSMMASAASAMMMMXS
XMAAXAASMSSMSAMMXAMSASXSSMSAMAMAAAAXXMMMXMMSSMXMXSMSMAMXMXXSASMMMSMMSSMASMSMXMAMAXAAXAAXAXMXAXSSMAXMASMMMSXAMSMSMAMSMMSAXAMSXAAXAXMMMAMXXAMX
SSSMSMMMAAAMSASMSMMXASXAASMXXAMSXMMSMSASMSAMXMSMAAAASXSXSAXAMXXAAXMAXAMAMAAAAMMXSAMASMMSASMMSMSASXMSMXASASMMMAAMAMXMAMXMSAMXSSSMMSXMASMXXAAS
AXAXAMAMMMSMSAMXAXAMSMMSMMMMSSXMSSXXAAAXAMXXMAAASMSMSXAAXMASMMSSSSMXSXMXSSMMMSMSXAMAXXAXAAAAXXSAMMMAMXXMAMAASMMMSMAMAMXXXMMMAMXAAAAMAMSMSSSM
MSXMASXSMMMAMAMXMAXXXAMMAAXMAMAAMMMSSMSMSMSXMXXAMAMASMMMMSSXMAAAXMMXMMSAMASAMXMAMXMXSMSMASMMSAMXMMSASXSMAMSMMASMAMASMMXSXAXAAXXMASXMAXXXAMAX
XMAMXMASMAMAMSMXXMMSSXMSMMSMAXMAMAAXMXMAAAXXASXSMXMAMAXAAMMAMMMXMASXAAMMSASMXSAMXMMXSXAMMXMMMMMMSASASAMMAMAASAMSXSASAMAMXMASXMXSXMMSMMAMMSSM
SMXMAMAMMAXAMAMAMSMAMXMMAMXMSMMASMSSMMSSXMMMXXAAAXMASXMMSXSAMMSAAMXMMMMAMMSASXSMXMAMMAMSMAMMAAAMAAMAMMMMAXSMMMMSMMXSAMASAMMAMMXAMXMAMXMSXAAX
MASMMMSSSSMMMASAAAMAMSMSAMSAMXSXXAAAMAAMMMXXAMSMMXSXMXXAAXSXSAMMSMAAXAMXSMSMAAXMXXSAMXMAMMXSSSSSMMMMMXMSSXMSAMXMASASAMAXASXAAMAMXXMASAAAMMMX
MAMAAAAXXMAXSMSMSXSXAAXXAMASXMXAXMXSMMMSAXSMMMXAMAMAMSXASXSXMASXAMASMXSXAAXXMXSXMAMXSSSXSXAMAMAXXAMMAMAAMXSSXMASMMMSMMMSMMMSMSAMXMXAMMSAMXSA
MXSSMMSSMXSXAAXMXMSMMSSSSMSMMAAMMSMMMXMMXSXAXASXMASAMSAMXAXMSAMXASXMXAXMMMMXSMSAMXMAMAMAXMMMAMAMMXMXAAMAMXMXSAMXXMMXXAAAXXAAXMAXXAMSXMXASAAM
AAMASAAXXAXXMMMAXAXSXAXAAXAAXMMXAAAAMAMAMXXAMXMASAXASMAMMAMAMASXXSAMSAMXXXMXXAMXMAMXMAMMMSXMSMMSAASXMSMMMMMASXMXSXSMSSSMSMSXSAMXXSAMASXMMMSM
MMSAMMSSMMSSMMMMMSMMMMSMMSSSMXSAMSSMSSMMMASMASMMMMSMMXAMXXMASXMMXMAMMMAMSAMXMSMMSASXAMSXAMMMAAXXXAXAAXAXSXXAXAXMSAAAMAAXXAAAAMAMAXAMAMXMAMAX
XXMXMAXAXAAMAAMAAAAAAMAMXXMAXAAMAMAMAXXMAXXMASMAAAAAXSXSXXSXSAAMMSAMXSAMXXMAAAXXMMAMXSAMASASMSMMSSSMMMSMAAASMMMAMSMMMSMMMXXXMMAASXMMSSMSMSAS
MXAMXXSAMMSSSMSMSXSMMMAXXMSSMSSSMSAMMSMMXSAMASMSMXSSMXMXXAMXMXMMASXSXMASASXMSSSXMXMMMXMAXXMMXXMAAXSAMAMMMMMXAXXSMMMSAMAMSMSMSSXMMAAAXAXAMMAM
SASASMMXMXMAXXAAXAXAMSXSAMAAMMAAXSAMAAAMASXMAXXAMXMXMMXSAMMXSAXMASXMXMAMXXAAAXXAMSMMMSXMSMSSSMMMSSXMMAMAXAXSAMMMMAAMAMAMAAAAXXMASMMMSAMXMMXM
MAMASXMMMMMMMMMSMSMAMAMMAMXSMMMMMSMMSSSMASMMMMSMSXSAXAMSASAAMSAMASMSASXSSSMMMSMMMAAAAAAXAXMAXAAMXMAASMSMAMAMXMAAMSSMSMSSMSMSMAAXSAMXXMSSXMAS
MAMXMASAAASASASAAASXMMSSXMAXXSAMAXMAMXMMMSASMASMMASXMXASAMMMSAMMASAMASAAAXXAXMAMSXSMSXMSMSMMMSXSAMMMSAAXSAMXAASMMAMAMAMXAAXAMXXMSAMXXMAMASAM
SMSASAMSSXSAMMSSXXXXMMAAAMXSASAMMSMMSXXAAMMMMXSAMAMMMMAMMMXSXMAXMSXMAMMMMMSMSSMMSXMXXAAAAAXXAAASAMAXMMMMMXSSXMAMXAMXMAAMSMSMSXSASAMXXMASAMXS
XSSXMAXXMMMXMXXMXSXMMMSMMMASXSMMAAAAAASMXMAAMMSAMASAXSAMSSSXMXMXXXAMXSXSAAMMAXXAMASASMMMXMMSMMMMMSXSAMMAMAXAMXXXXXXSAXXMXAMXAAMXXAMAASXSMSXA
SXMASXMMAAAAXAXMASMASAXAMXXSAXMMSSSMXXMASXSXSAXXMXMAXSAMAXXAMAXSMSAXAMAXMSSMAMMXSAMAAXSXMSXMAMXMAXMMAMSASMMMMSSXMMAXMASMSAMMMSMMSSMXXSMSAXAX
SAMXSMMMSMSSMSAMXXAXMASXMAMMXMSAMXXXMXXXSAMXMASXMSMSMSAMSSSMMAMSAAAMSMSMAAXMMSAMMMMMMMXMASASAMSMSMASAMMAXMAXAMAXXAMAXXXMSAMXXAAMAMMSXSAMXMAS
SAMAMAAMAXXMXXASMSSSMMMASAMMSMMMSAMXMMSMMMMXSXMAMAAMASXMAAAAAXSMSMSMXAAMMMSMMMMSXSAMXAMXSMMMXSAAXMAMXXMMMSSMMSMMSSXSSMMXSAMXSMSMASMSAMXMASAX
SAMXSMMSMSSMASXMASAAMMMXXASAMAAAXMAMSAAAAXMAXAAMSMSMMMMSMSSMMSMMMMMXMSMMSAAAAMSXMSASMSSMMAAXXSMSMMSSSXMAMXAAAXXAXXAAAXXAMXMASAXMASAMXMAMMMSX
SXMASAMSXAAMMSXMSMMMMMSSMAMASMMSSMAAMXSSMSSMSSMXAMXAMXXXXXAMMMAAXAAMXMAXMAMMMXSAMXMSAMXASXMXXMAMXXAAXAMXASMMMXMMSMXSSMXSXSMASMMSAMXMMSSSMAXS
MAMASXMXMSSMAMXMAMSMXAAAMMSXMXAAXMMXXAXAAAAXAASAMXSMMMMSSSMSASXMMMXSAMAMSSSMMASXMAMXMXMXMXAMSMXMXMMXMMSMMMSAAXSMMMAMXAMAASMXMXAMXSASXAAMMAMS
MAMMXMASAMXMXSASASASMMXSMAMXSMMXSXMAMXMAMSSMSXMXXMAMAAMAMAASASXSXMXSASMMMAAASXMSSXSAMXSXSXMASAMXSMSMAAAAXAMMMXSASXXXASXMAMSXAMXXMSAXMXSAMXSS
XXSXSXMAXMMSASMSXSMAMMMMMMSAMXSAMAMSSMASAMXMXAMXMSASMXSASMMMAMAMASMSMMAAMMMMMAAAXXMASAMXSAMAMSAMXAASMSSSXMSMXMSMMAXSSMMMMAMMXMAMXMSMMAMMSMXM
SXMXMAMAASAMXMASAXXAAAAMAXMAMAMASMMMAAAMAXMAXXMAMAAXMASAMAXMXMASAMMXXSMMSAXAMMMMMSSMMMSASXMAXMSSMSMSXXAMXMAMAMXXMXMSAAXSMAAAXMMXXAAXMXSAMXAS
AASMSAMSMMASXMAMMMSSSMXMSMMMMXSMMMXSAMMXXMASXMMSSMSMMXMMMSMSXSAMAXSXAMMSMMSMXAAXAMASAAMXSXSMSSMSXMMMMMMMMSASMSSXSMXSXMMXSASMMSAAMSMSMAXMMSXS
MXMAMSMXXSAMXMASAAXAAAMSMSAAAMXMASASAMXSSMMXAMAMAXMAMSASMXAAMMASMMSMMAXAAAAMSSMMMSAMMMSXMASMMXAMMSAAAASAAMASAAXAMXXSSSXAMXAAAMMMMAAAMXMSAMMS
SMMMMXXSAMASXSXSMSSSMMMAAMMMSAAMSMMSXMAAAXASAMXSMMSAMXAMXMAMXSAMAAXAXSSSSMMXAMXSAMAMXXMAMAMAMMAMASMXSMSAXSXMMMMMMSSMAXMXSMMMMSXMSMSMSAAMXSAX
AXAAMXAMMMASMMASAXAMMXSMSMSXXXSMXXXMXMSSMMXSMMXAMAMASMXMMXAXXMASMMSSMAAAAASMMSAMASMMSSSMMSSSMSAMXMXMXASMMMASXSXSAMXMAMSMMAXSAXAXSAAAMMSMAMMS
MSXSMMSMXMXMAMAMMMAMMXMAXAMXSAMXMMMXAMMAMXMSMMAXMAMMMXMAMSSSMSMMMAMMAAMMXAMXXMASXMXAXAAMXXAAASXSAMASMAMMAXMMMAAMMXMMSSXAMSAMXSMMSXMXMXMAAXXS
XMMMAAMMSXSMSMASXXMMXXMAMAMAMAMASXSSSSMMMAXMASMAXXXXAMMAMMASAASXMASXSAXXXSSSXSAMMMMSMSMMSMSMMXASXSAMMAMMAXSASMSMSXMAXAXSMXAXXAMXXASXSXXSXSMM
XXASMMSMSAMAMMMAMXSAMXMASAMXSASXSMXAAAMSSMMSAMXSMMXMASXSMMAMXMSXXASAMAXSAAAAMMMXAAAMMXXAAXAMXMMMMMMMSASMMXSASXMASAMMSAXMASMMSMMMSMMASAMXMMMX
XSMSAAAASXMAMASAXMAAMXMASAMXMMXAMXMMMMMAAMAMAMAMAASMXMAMAMXMSSMMSMMXAAMMMMMMMAMMSMSSMMMXSSMSSMAAXXAMXASXMAMMMAMAMMSAAMXMMAMASAAMSAMXMXMSMAAX
MMAMXSMMMSMXXAMXSASMSAMMMAXSMSXSMXAAASMSSMASAMASMMMMAMAMXSAMSASAAXXSMXSXXSAMMMSAMXMXXASMMMXMXSXXMMMSMSMMMMMASMMXSASMXSAMSAMAMMMXMAMAMAXXMMSM
XMAMXAMASMSSMSSMSXMASMSSSSMMAAAAASAMXSAXAMXSASXSXASXMMSMMMAMSAMSSSXXAAAMASAMXAMAXSAMXXXAAXASMXMSMSXAXMASAMSASMAXMASAAXAMMAMMSMSMMXSSSMMSMXMM
XMASMXXMASASAAMAXAMXMAAXXAAMXMMMASXMXMAMMAXSMMXXMASAXAXAAXAMMXMAXAASMMSMASAMMMSAMXAMMMSSMSMSAMXAAXAAMSXMAMMAMMXMMAMMMSXMMAMXAXMASXXMAAAASAAA
MSXMMMXXMMSMMMXMSSMSMMMSMSSMAMXSAMASXMMAXXMXMXMMAMXMMXXSMSSSSSMSSMAMAAXMASAMXMMXSMMASMAMAMAXMAMMXMMMAASMXMSMMMXSMXSAAAMAXXMMSSXSMXASXMMASMSM
MAXSAMSMXXAMMSAMMMASXMXXMAXMASAMASAAXMAMXAMMSAASXMMAASMXAAAXAAAAAXASMMSMXSAMXSAXMASAMMAMAMXMXSAMXMSASMMMMXAAAAMSXMMMXSAAMSSMMSXAXSXMXSXMXAXX
MMMSASAXASXSAXMSMMAMAMSAMSSMMMMMMMMMAMASMMXASAMAAASMMMASXMMMSMMMSSMMXAMXAMASAMMMSAMASXMSMXXXMMXSAAAMXXMAMSSSMSXSASXSAMMASAAAASMSMSAMXMAXSXMM
AAAXXMMMMSAMMXMAXMASAMXMXAMAAASASXSXSMASMSMXSMMMSMMAXMAMAXXXAXMXAMXSMMXMXSAMXSAAMXXAMXAAAAMMSAASMMMXXXMAXXAMXXASAMAMXSXMMXXMMSAMMMAAASAMMAXX
SMXXAXXAAXXASASXXSAMASMXMSSSXXXASAMAXXMSAMXXXAMXMXSMMMAMAMXSXSAMMMASASAMXMASXSMSMSMSSMSMSXSAAMMSXSAMSASXXMAMAXMMSMXMASAMXSMSMMXMASXSASAASAMX
MAXSXSSMSSXMSASAXMASXMMAAAXMXSMMMMMAMAAMAMSMSMSASMXSXXSMMMMSXMXSXMASAMMMMSAMASAXASXMAMXXAMXXXSXMXMAMSMMXASXMXXXAAMAMASAMAXMAAXASASAMAXMMAMSM
MSMMAMMMMMAMXAMXMMMMMASMMMSMAMAAAMMSSXMSAMAAAAXASAMAMAXAMMMSAMAMXMAMXMSAMMXSAMAMAMXSMMMMMMMXXMASAMAMMAMXAMAMMMMSMXAMXMAMMSMSXMMMMMXMMMXMAXAM
AXAMAMAAASMMMXMXSASAMXMASXAMMSAMXSAMXAXSMSMMMSMXMMAMMASAMAASAMXMMAMMSAXSAAMXAMXMXMXSSXMASAMXMXXMASXSMASAXSAMAMXMASMSMSAMXSMXASXXMXAMXMXSMSSM
MSASMXMMXXAASXMAXASXSMXAMSAMXXXXXMMSSSMSAAXSAMXAMXSXMASXMMXMAMASAAASMAXMMMSSSMASAMXMAMSASXSSMSSSMMAMMAMXMSMSXSAMAMXAMSMMMXAMAAAASMSMASAXAAAA
MMXMMAMSSSSMMAMAMMMMXMMMXAMXXXMSMAMAAAAMSMXMASMMXAMAMASAMSSSMMXAMSMXXMASAMXAASASAMAAMMMXMMMXMAAXAAMSMMSAMXAAASASXXMMMXMAAMMMSMMMSAAAXMMSMSSM
SSXMMSMAAAMMSXMAMAAXXAXMAMSXSAAASAMMSMMAAMASXMAXMMMAMASAMAAAXMMMXXMMAXMSASMSMMMMXSSSXXXXSAMAMMSMSSXSAAXASMMMMSMMXXAMMAMSSMSAMXXAMXMMMMXAMXAX
SAASAAXMSMSAMASXSSSMSMXSAMMAMMSMSSSXAMMSXXASASAMXXXAMXXAMMXMAMXXXSASMXMSAMAAMSMMAMXAAMSMASMMSAXMAMASMMMSMMXSMMAAXSXMMMXAAXMASXMMAMXAXXMXSMMM
MSMMASXXAAMASAMMAMXAAXAMASMAMAXXXXXXMSXMSMXSMMXSAAXSMMSAMXASXSMSASAMXXMMAMMMXAMXSMMMMMAAMAMAXXSMXMXMAMMMAMXMASMMMMMSAMMXSMSAMXXSAXSMSMSMSAXA
MXMAMMXMMSMAMASXSMMAMMMSAMXMMMSMMMMSMXAAXXMXMSAMMSMMAASMMXMAAAAMASASXSXAXSMSMSSMMASXSXMSSSMMMXXMAMASAMAMAMASAMXSAAAXAMAAXAMXSXMMAXXAAAAASXSS
XSMSMXXMAXMXSMMMASAXMAMMXSXXSMAXAAAAXXMAMMMAXMASAXAMXMSMSAMMAMXMAMXMASMMMSASAMMASAMAMSXAAAMXXAXAXSASMXXMAMXMASXSMSMSSMMMMAMMMMMXXMMMMSMMMAMX
MXAAXAMMMSMAMAAAMXXMXAXMASASASASXSSMSMSASASMMSAMASAMXXSASXSXMMAMXSAMMMAMAMMMAMMAMMMAMAXMSMMMMSAMMMXSMASMXMAXSAMXAXMAXMXSMSMAMXSAMXXSAMXSMSMS
ASXXMMMAMAMXSSMSXMAMSASMAMXSAMXSMMAXMAAASMSAAMASXMASXAMXMAMAASXSAXAMXXSMSSXSXMMMSMSXSXMXAMASAMXXASMMMASAMXSMAMMMSSMMSMMSAAXXSAXASAMXASAXAMAA
MXMAXMAXMMXMMAMMXMSMAAAMSMAMMMAXASAMMXMMMXMXMXMAXSSMXXSMMAMSMMAMMSSMAMMXMMASMSMAAAAAMMSSXSAMMSMSMSASMAXASAXMAAMAMAMXSAAMSMMSMMSXMASMSMMMSMXM
SASAMSSSXXAXSAMXAAMMMXMAXMAMAMMSXMMAXMSXAXMAXMAAXMAMXMMMMAXAAMSMMAAMMMSAAMSMAAMSMSMSMAAMXMASMSXMASAMMXSAMASMSSMASMMXSMMMAMXXAAMMSMMMXMXAXMAS
XAXAXMAAASAMSXSXMMSAXASMMSASXSAMMAMSMMMASMSAMMMXSMAMMSAAXSSMSMXAMMMSAASMMXXMXMMAAXAMMMMSAMXMXSAMAMXMAXMXMAMMMAXASXMASAMSXSMXSMMAAAMXSMMMXSAS
MSMMMMMMMASMSMSXSAMASMMAAXASAMAMXSXMAAAXMAXXMSAMXMXMXMSXSAMXMMSAMAASMMSASMSMMMMMSMAMAAMMASAMASXMASMMMSAAXXAMSMMMSAMXSAMMMAXAXAMSXSMAAXAAXMAS
MXAAXXMSXMASXASAMXSXMXMMMMSMMSSMAMASXSXSMXMMMAMAMMMSMMAMXXSXMAMMMMMSMAMASAAAASXMXMSMMMMMMMMMAMAXAMAASMMMSSMAAAAASAMMXMMMASMMXAMMAXMASXMSSMAM
SSXMASXMASMMMMMXMAAAMXSXSXMAMAXMAMXMAAASXSMSAASAXAAAMMMXSSMMMSSSSSSXMASMMXMSMSAAXSXXMAAASAMSSMSMMSSMMAAMAAMSSSMMSAMXMSAMXMAMSAMXAMAMXAAMAMAM
ASMXXXASXMAAAMAXMMSSMSXASXSAMASMMSMMMMMMAMASMMSASMSSSXMAXAASAMXAAXSASASXAXMAXMMMSMMSSMSMMAXAXAXAMAMAMMMMMXXAAAMASAMXASASASMMAMSMMMSSXMSSSXSS
MXSXXMASMMMSXSXXAAAAXSMMMAXXMASAMSXMASAMAMXMAXSXMAXAMAMSMSMMMSMMMMMXMAMMSSMAMXSXAXAAAXMASXMMXXMAMSSSMSXAMSMMSMMAMXSMASMMASMMMAAAXAAAXXXAAAMX
XXMMAMXXAMAXXAMSMMSSMSMSASMMSASXMXAXASASMSMSMMXAMXMAMMMXAXXMXAMAAASASXXAAXXAXXMSMSMSSMMAMXAXXSSXMAAAXSXSMXAXAMMMSAXMAMAMAMAMXSSSMMSSMMMMMMMA
MSMSMAAMMSMSAMXMAMXMAMAAAMXAMAMASXSMXXAMMAMAAMMAMXXSMSMSXMASMMSSXMSAMAMMSSMMMXAAXAMAMXMSSSSMXMAMXMSMMMAXMMMMMXAMMXMMASMMMMSMAXAMAMAMXSMMSSMM
SAAAMMSSMAASMXXSMSASMMXMMMMSMAMMMAXAMMAMSASXSMSXSMSXAAASAXAXMAXXSAMXMSMMAXAASXMMSMXAXSXMAAXMASAMAXAMAMSMMSASXMXSASXMMMAASXMMSSMSAMAAXMAXAAAA
SMXMXAAAMMMMXAAMAMASXXXAAXAXSMMSMAMAMSSMSXSAMXSAAXSMSMMSAMSMSMXAAXXAMAAMMSMXMAAXXXXMMSAMMMMSASASXSAMSXXAAMXMAMAMXMAMMSSMMAAXXAXSXSMSMMMMSSMM
MMSSMMSSMSXSMXSMAMMMAMSXMMXMAXAXMSMAMXAAMASXMASMMMXAAAXMXMAAAXMMMMSMXSSMXXMAXMMMXMASAXAMSXAMAXXXXAXAXAMMMSASAMSSMSSMAMMASXMMXAMXAXMAAAXXXAAX
MAAASXXXAAAXMAXMXMAMAMXAXASMMMXMSASAXSMMMAMXMXXMXXMSMSMSSMXSMSAXAMXAAMAMXMMSAXSAMXAXASXMMMAMSMSMMXSMMXMAAAAMXSAAMAMMAMMAMMAAXXXMXMMSMMSMAMMM
MMSXMXMMSMMMSXMSSMASMMSMMSMAAAMXXMXXMSASMXSSSSMSSMAXAMXAASXXMAXSASMMMSAMXSAMXXXSXMMXXMAAXXAAAMAAAAAAASMSSMXXMAXXMASXMMMMSSMASMAMXSAAMXSXXMAX
SAXXXXXAXASAXAXXASXXMASXMASXMSMSSSXSASAMXAAAMAMAAXAMAMMMSMMAAAAMAMAMASMMXMAMXSAMXMMSSMSXMSMXXSSMMSSSMSAMXXXMASMMSASAMXSXMXXAAXAMSMSXSSMMSSXS
AAMSMSMSSSMMSMMSMMMSMAMASASMXAAXAXAMMMXMMXMMXAMSSMMSAMMSXMSSMASMSXSMAMASXMSMMXAXAXAAAXAAXXMSAMXSAAAAAXMXXAAMAXSAMASXMAAAXAMSMMMMAXAMSASAXMAM
MXMAAAAASXAAAAMXXAAAMMSMMMSMSMSMMMXMAXXMAMXXSXXXAXASXSMAXMAMMXAXMAXMMSAMXAAAXSMMMMMSXMMSAAXMMMAAMMMMMMSMSSMMMXMXMMXAMXSSMSXXAXSMSMMXMAMMSXAS
SSSMSMSMMXMMXMMASMSXSAAAAXXMASXMXXMASMSMSAAMAXMSMMMSSXMASMXSAMMXMXMAXMASXXSAMMXAAAMMXSXMMMMMSMMSXSXASAAAMAAASMSMSMSAMAMXMXAXXAMAXAMAMSMMSMMA
XAAXXMAMSXSSMXMAXMAXMXSMMXXMXXMXSXMAXAXAXMXSXAMAMAXXMXMASXMAMSXSMMMAMMSMXMXMASMMSSSMAMAXXMAXXAXAAMSXMXSXSXSMMXAAAAMAMMSAXMAMSXMAMMSXMMAMXASM
MSMMSXMASAAASXMXMMSSMMXAMSXSMASAMXMASAMMMXMMAMXSSSSSMAAAXAXAXXAAAASAMXXAMXXSXMAMXXAMAXMMXSMSMSMMXMSXSAMASAXMSSMMMMSAMXSASXMMXAMXSAMXMXAMXAMX
MAAXXXMASMSMMXXMXAAAAASAMAAASXMASMMASAMAAXAXAMXAAMAAAMMMSAMMSMSMSMSMSSMAMSAMSMSAAXMMMSMAXSASAAAXAMXMMAMAMXMXAASAXXSMSMXMMMSASXMMMXXMAXSSMMAS
SSMXMXMASMMASMSMMAMMMMXMMMSMSXMAMXMASASXSSXMASXMMMSMMAAXMXMASAAXXAXAAXMAMMAMASAMXSSSMAMMMMAMSMXSXSAXMMMSMSMMMSSXSASAMXASAAMXSAAXAMMAMSMAMMAA
AAAXAXMASASAMXAAAAMSSXSAMXXAXMXSAXMASXMXAAASAMASXAAXXMMMSAMXMXMXMMMMMSXXXSXMXSMXAAAASMSSSMMMMXAXASXSMMMXAMMAMAMMMXMASXXSMMMASMMMAXAASAMAMMMM
SAMSSMMAMMMXMXSMMASAASXMMMMXMMXMAMSAXASAMXMAASAMMSMXMAAAMASXSXSXAXXXAXXMXSXMXXXXSMSMMSXMAXAXMAXMXMMAMAAMAMXAMMSXAAXAMXMMXMSXXAXSSSSMSAMMXASM
AAMAXAMSSSMMSXAXXXMMMMMAAXASASASMXMMSMMMXAXSAMXSXAAASMMMSAMAMAMXMASMSSMMAMASXMMXXAMAXXMASMSSMAXXAXXAXMMSAMXXMAXMMMMASAXMAMAMSMMMMAXXXMMSSXSX
SMMASXSAAXAAASMSXSXSXAXXSSXXASASAMMAAAAXSSMXXSXMXMSMMAAMMXMXMXMAXSXAMMAMXMMMAAMXMMMMMMSAMXXAMAXSASMMSSXSASAAASXSXAXSSMXMAXAAAMAMMMMSMSMXAXMX
MAMAMMMMSMMSAAXMASAMMXSAMXXMAMAMMAMSSSMXMMMAMMMSAMAMXSXSXSAASMSMXAMMMSSMXMASMMMASASXAXMASXSMMMXAXMXSAMXSAMMSMAASXMXMXXASXSMSXXAXAAXXAAAMXMXA
MAMASXAXMXMAMXAMXMMMAAXASAMXXMXMXSXXXAMXAASAAAAXMSASXMASXMSASAAMXSAMAXAAXSAMAAXXSASXMSMAMAAXMSMMSSXMXMAMAMAAMMAMASMMAMMXAAAXMSSSXSXMMMXMASXM
SXSASMSMSASMXSSMAMXMSSXXMAXMAMXMXMXXMAMMMMMASMXSXSAMXMAMXMXXMXMSAMAMSSMMMSASMMSAMXMMMAMAASMMMAAXAMXXAMSSXSSSSMMSAXAXMSSMSMMMXAMXMMMSAMASAMAX
MAMASXMASASXAXMASAXMAMXAMXMXSMMMASAMMSASAAXXMXMAAMXSXMASXMMMXAXMXSXMAXMAAMAXXSAMXXXSSXSXXMAXSSSMAMMMSSMAAMXMAAMMMSMMAAMMXASMMMSAMXAMASXMXSXM
MSMAMMMXMAMMSSMAMASMASASXXSAXAXSAMAXMAAAMMMMAXXSXSAMASASAMAAXXMSMMASMASMMMXMMSMMMMMMSXAXMSSMMAXXAMMAMAMMMMASXMMAASAAMMSSSXMAAASASMSMAMXAXSAS
AAAAMMMAMAMMXAMXSXMMMXAXAXMAMMMSXSMMSMAMXMAMAMXMAMXSAMXSAMXSAMXSASXMXMXASMMSAMXMAAMSMSMXMAMAMXMMMSMXSXMXSSXMAMSMMXXMSAAXMASXMMSAMAXMMMMXMSAM
SSSMMSSSXXMXSSMAMXSXMMSMMMMAMMMSASMMXXSXMSXSAXAMAMAMASAMXSAAMAMSAMMXMAXAMXAMXSASMXMAAXXMMXMSMMMASAMXMASAMXMASXSMSMSMMMSSMASMSMXMMXMSAMAAAMXM
MAMAXXAMXSMAMAMXMAXAXAAAXAMMSAAMAMXMAMXAMMMXMSMSMSXSAMXMASMMMSAMAMSMSASMAMSMAMMSAASMMMMMSAMMAMXMSASMSAMASMXMXAMAAMAAAAAAMASXAMAMMXMXAMSXSXSX
SAMSMMAMAXAASMMSASXSMSSMXXXASMSMMMAMMMMMMAMAAXXAMMAMXSXMAMAAXXSSMMAAAXAMAAXMASASXMMAAMMAMAXMAMSXSXMAAMSXMAMSMAMSMSXSMMSSMMMXMSMXSASMSMXAXXMM
SXMXASMMMSSMXXASAMXXAXMMSSMMMXMMAXASASAXSAMASMSMSXSMAXXMSSSMSAMXMXMSMAMSSXXSAMAMAXSSMSMXSMMASASASAMSMASAMXAXMAMMASAAXXXAAXXSXSAASAMAXMMXMASA
MASXMMMAMMXSXMAXXSMMXMMAAAAASAMSSSMSASMMSXXMAMXMAXAMXSAAXXMMXASXXMAAXMXMAXMAXMMSAMXXAXMMMMSAMASASXMXMASASASXMXSMAMSMMXMSMMSAAXMMMMMMAMAMSAMS
SAMXMAMAXMASXMXMSAAMASMMMSMMXAMAXAAMAMXMXMAXSAMXSXMXSAMXXMAMSAMAASMSMXAMXMMAMAXMMXSASXAAAAXXMAMAMXMXMXSAMAMSSXMMXXMMMMAMAMAMAMXXAXMSAMAXMASX
XMAMSASXSMASMXAMSMMSASAAMMASMXMMSMMMAMAAAAXAAAXAMMXMXXXSMSAMMSMMAMAAMSXMAAMMMXMAMAMMMMXMAXXXMAMMMAXMXXMXMAAMSAMMMXXAMXAMAMMXXAMSXSASASXSAMAA
XMAMMASAAMAMMMSXMXAMASMMXSASMMMMAAASAMSSXSXMSSMAMSAMAXMSAMASMXXMAMMMXMASMMMSSXSXMAXAAXXMSMSMSMSSSXSXMMMXSMSASXMAMMMSSMSSSMXSXSXSAAXSXMAAASMA
MMMMMAMMMMXXXAXASXMMMMAMMMAMAAMMSSMSMXMMAXXMAMMSXSASXSMMXMXMMXXMMMSXAXMASAMAMXAXSMSSSMSAXAAXXSAMXSMXMAAAXXMASASASMXMAMMAMMAMMMSSMMMXAMXMAXXM
MAAXXXMASXSMMASAMMAMXMSMAMAMSXSAXMMMXAAMXMSMASAMASAMASXASMXSAMXMAAASMMSAMXMAMAXAMAAAAAMAMSMSSXXAMXMMMASMSMMMMXSAMMXXAMMAMMAMAXASAASXSMSSMMAS
SSSSXAMASAMXMAMXMASXSXMSXSAMXAXMXAAXSMXMAMASXMMMAMAMAMMASMASAASXMXMXSAMXMASXSSMSMMMSMXMXAASXAAMSSMXSMXXASAAAXAMMMAMMMMXASXSSSSMSSMXAAAMAASAM
AAAMMXMXMAMAAXXMAAAAXAXAMAMXMMMXSXMMSAXMMSAXXAMMASMMSXMSSMAMMXXAMXXAMXMAXMSXMXAXXMMMMAMXSMSXMAMAAAAMMXMAMSMSMASAMXSAMMSMMAMAXAXMAXMSMAMSMMAS
MMMMSSMMSMSSSMMASXMXMMMSMSASAXMAXASMMSMAXMXSMSMMAXAAMXMMMMASMASXMXMAMSSSSSMAMMSMMXXMASMMMXXMXSMSXMMSAMMXMAXXAASAXASASMAAMSMSMMXSAMXXMAMXXXMM
XXXXAAXASAAAAXAXXASAMXMXAXXSMAXSSXMAAXMXMAMXAAMMSSMMSASMASAXMAMSAASAMXAAXASXMXXAMMMMAAAAXAMSAMXXXAAMMSAXXAMXSASMMXMAMXMMMXAXMXMSAMXAXMASMSMM
SSSMSXMXSMMSMMSXSAMMXMSMMMASXSXMAMSMMMMMMAMSMMAAAAAASXXSAMAMMAMASMXAXMAMSMMMMMSXMAAMXSMMMMMMASASXMMSXMASMASMMAMAMXMSXSXSAMXMXSAXMMSXMXMASAAM
MAMAMASMXXAMXMXMMMMMMAAAAMAMAXMMAMXXAAAAXAXXAXMMXSMMSAMMXSASMASMMMSSMSMXAXAXMAAASXMSAMXSXSAXMMASASAXMAAXMAMXXMSMMASAAAASMSAAAXSSXMXSMXMSXSMM
MMMMSAMAXMAXAMXAXAAAMSSSMMMMAMMMSSXSSSSSSSMSAMXAAMMXMAMAXMAMXAMXXAAMMSASMSSXXMSXMAXMXSXMASXSAMXMAMXSAMSSMXSXMMAMSMSMSMXMAXMMMAXXXMAXMAXXAAMX
SXSAMAMMAXMSASMASMSMXAAAXXAMXSXAMAAXAAAMMAMXXMMSSMASXMMMSMAMMMSMMMMSAXMXXAMMSMMMSMMMMMMMAMSAXASMAMMAXAAAXMAMAMAXAMSMMXXMAMXAMAMXXMMSSMSMSMXS
AAXMMMSXMAMSMSMAAMAMMMSMMSMSXMMASMXMMMMSMSASAXMMMXXMAXAMAMASASAMXXSMMXXXMXMXAAAMASAXAMXMXSXXMAXSAMAAXMSSMAASXSSSSXMAMAMSAMXSXASAXSAAAMXAXXAA
MMMSAAMASXMXAXMXMMAMAMMXXAMAXXMXAMXMSXXSAMASMSMAMSXSXMSSSXXSMSXMAMMAXSMMSASMSSMSASMSMSAMXMMMMMMMMSSMMAAMAMASXAMAMMSAMAASXSAXSXAMAMMSSMMSMMMS
XMAXMMXAMXMMMMAXSSMSXMAMSMSAMMSMMSMAAAAMAMMMXXMAMMAMXXMAMSMXASMSSXSAMAAXSAMAMXXMASAAXSMMASASAMXSAXAAXMAXSAASMSMAMASMSMMMASAMMMMMMXXAXXXMXSAM
MMMSASMXMAMAXMAXXAXXAMAMSXMASASAAAXSSSMXXMSXMASXSXSMSMMAMAXMSMAAAXSSSXMMMMMSMSAMXMMMMXASASXXASAMXSSMMXMAMMMMAMSMSMMASMAMMMSMAAXXSMSSMMAMAXAM
XAXMAMMSXSXSSMSASMMSXMASXASXMAMMXMXMAAMXSXSAMXMMAMAAAASXSMSMAMMMSMSASAMMXMXMASXXAXMXXMAMASMSMMMAXXAAMSMSXAMMMAAXXAMAMMASXAXSSSMMSAAAMSAMSSMM
MMSMSMXMMMAAXAAAMXMSMSMSMXMXMAMSMSAMSMMXAAMSMAAAMXMSMXMMSAMXXXXXXXMAMMMXAMSMXMMMMSMASMMMMMAAMASMMSMSMAAXSMSSSMSXSAMXXXXXMSMXMAMAMMSMMMASAAMX
XAAAAXAXASMMMSMSMSMXXAXMAMMXSAMXASMXAXAMMXMXSMMMXXMXMASASMSMMMSAMMMMMAMXXSAMSXSAMAMAXAXAAMSMSASAAXAMMMMMAMSXSXAASXMASMSMAAASMMMXSXMMSMMMMSMX
XSMSMSSMXSAAMXAAASMMSSSMSMXXAXXMMMXSMSSXAAMMMMSSMMMASAXAMAAAXAMMSAAASASMMMAXAAXMMAXMXSMSSXMAMXSMMMSMAAMSSMMASMMMMASASAAXSSXMAASAMXSASASMSMXX
MMAXAAMMMSAMAMSMSMAAAXXAAASXMMSAAMXSXAMMSXXAAAMAAMSXSMMSMSMSMXSASMMXSASMASMMMSMSXSMSAMMAMAMAMASAXXMXXMXAMAMMMMAAXMMAMXMMAXXSXMMASMMASAMXAAXX
AMSMMMSMAMAMMAMXAXMMSSMMMXMAXAXXXSAMMMSMAMMSMSMSMMXAXAAXAXMMXMMASXSXMXMMAMXAXAAXAXAMXXMASAMAMXSXSXXASXMMSAMAASMSSMMAMMMSMMAXAXSAMAMAMXMSMSMS
XSAMXMAMMSMMXXXSMMSXMAAASXSSMMSSMMASXXAMASAXAMMXXSMMSMMSAMASMMMAMXAXSAMMMSSSMXSMXMASMASASXSASMSASMMXSAAXSASMMMAXAASXMMAAXAMSSMMMSAMXMAXAAAAX
SXMXMMMSASAMAAMAAASASASMSAMAAXAAMSMMMMXMAMXMSMASAXAMXMAMXSXMAMMMSSMASXXAMXAXAXMMSXAXXXMASXSXSAMAMXMMSXMMSAMMSMMMSMMAMMSSSSXAMAAASASXSSMMSMSM
XXMASXXMMSAMXXAMMMXAMAXXMAXSSMSMMAAASASMXXAMXMASMSSMASMSASASXMXMAAXMXMXSSMSMSMSAMMMSMMSASMMMMAMAMASXMSMAXASAMAXAXAMXMAAAMMMXSSMXSAMMAAAXXMAX
XXMAXAASXSMXMASXAXMSMMMXSMMXXAXASMSSMASAMSSMAXXMASMMXSAMASAMASAMXSSXMASMAAMAAAMMSAAAAXMAXXAASMSMMAMAAAMAXAMASMMMSSMAMSXMXSMAMAXXMMMMSMMMAXAX
SAMASXXMAXSAXMAXXXMMAMXMAMMMMMMAAAXAMAMXMAMMSXSAMXMMMMMMAMXMAMXMAAMAXSASMMMMMSMAMMSXSXMMMSSXSXAMMSSMSMSMMSMMMAAASMSAXMASAAMSSXMXMASAMAXXXMXS
AXMAMXAMAMSMSSSMSMMSAMMSXSAAASMSMMMMMXSAMXSAMXSAMSSXAXAXSMSSSMSMSXXAMMMMXXAMXAMXSMMAXXMAMAMXSMMMAAAAMAAXXMASXMMMSASXAMAMXMAAXMXAXAXASXMSSMXS
MSMXSSSMMXSSMAAAMAASASXMASMMSAAAXSAXAMSXSAMXSASAMAASXMMSAAAXAAAAAAMSSSXSXSSSSXSMAASMMMSAMASASASMMXMMMSMSXSAMXAMXMAMMSMAMSMSSMXMMMSXMMXMXAAAM
XAMXMMASXXMAMMMMMMMSMMAMXMXSMMMMMMXMAMXXSAMXMASXMAMMXMXSMMMSMMXMAXSAAAXMMMXAAAXXMAMAAAXAMMMASAMXMASXMMAMAMAMASASMXMAMXSMXMMAAMAAAMSMAXXXMMMS
SXSAASAMMXMAMXXMXSAXMSASAMXAMXAASXXXSMMMSASAMMMMXXMAXSAMXAAXASXAXXAMXMMMASMMMSMMXSSSMSSSMAMXMAMASASAAMAMAXAMMAMAAMMASAXXAXXXMAXMXMAMXMMMMAAX
ASMMXMAAMSSMXMSAASASXSASMSAMXSSXSASXMMAXXAMXMMAMXXMMMSAMXMMXXMASXMXMAMASMSXAAAASAMXMMXAMMAMAXMXMMASMMSXMMMSSSMXMXSMAMAMSMSXMASXMSSMMMAAASMSX
SXXSXSSMMAASASMMMSAMAMAMASASAXXAMAMAMSSSMMMSMSAMASXAAMAMXSXSAMAMAXXSASXSASMSXSSMASAMMMAMMXSSSMAMMMMXASMSMMXAXXAXXXAAMMMASAMXAMAAXAXMSSSXSSXM
MAXSAMXXMSAMXSASMMAMXMXMASAMASMMMAMSMMAXMAAAAMAXAMMMSSXMXAAAMMSSXMASXSXMAMXMMMAMAMASASMMSMAAXMAXAXXMMSAAXSMMMSMSMMSXXASXSMSSMSSXXMMMAAXMXMXA
MMMXAMXXAMASXSAMXSSMAMXMAMAMAXAASAXMAMXMSMSSSSSMXSAXMAXSAMXMMAMXMAXMAMXMMSMMASAMXSAMXSAAAMMMMSMSSSMAMMMMXMASAMASAMMMSMSAXMAXMAMAMMAMMSMMSMMM
AAASXMASXSMMAMMMXAXMASAMASAMXSSMSMXSAMMAXAAAAAAAASAXSAXMAXXSMXSAMSAXAXXSAMASMSXSAMXSAMXSXSMXXXXAAAXSMXXXASMMSAASMMAAAAMMMMASMAMAXSAXSAASAAAX
SXXAMMAXMAMMXMXMASASMSASMSXSAMAMXAMSAMXSSMASMSMMMXSAMXSSMMAXSXSASXMSAMXXMMMAMXXMXXSAMXMMMXXMASMMSMMMMSAMXSMAXMASXSMSSSMXXAMMXASMXAMXSASXSSMS

1353
inputs/day_5.txt Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,5 @@
#![feature(int_roundings)]
mod solutions; mod solutions;
use std::env; use std::env;
@ -14,6 +16,8 @@ fn main() -> std::io::Result<()> {
Ok(1) => solutions::day_1::run(args)?, Ok(1) => solutions::day_1::run(args)?,
Ok(2) => solutions::day_2::run(args)?, Ok(2) => solutions::day_2::run(args)?,
Ok(3) => solutions::day_3::run(args)?, Ok(3) => solutions::day_3::run(args)?,
Ok(4) => solutions::day_4::run(args)?,
Ok(5) => solutions::day_5::run(args)?,
Ok(_) => eprintln!("Unknown day. Are you from the future?"), Ok(_) => eprintln!("Unknown day. Are you from the future?"),
Err(_) => eprintln!("Unknown day format. Use integers to specify."), Err(_) => eprintln!("Unknown day format. Use integers to specify."),
} }

184
src/solutions/day_4.rs Normal file
View file

@ -0,0 +1,184 @@
use std::env;
use std::fs::File;
use std::io::{BufRead, BufReader};
use std::ops::Add;
enum State {
ExpectM,
ExpectA,
ExpectS,
}
#[derive(Debug, Copy, Clone)]
enum Dir {
/// Diagonal up left: x - 1, y - 1
DiagUL,
/// Up: y - 1
Up,
/// Diagonal up right: x + 1, y - 1
DiagUR,
/// Left: x - 1
Left,
/// Right: x + 1
Right,
/// Diagonal down right: x - 1, y + 1
DiagDL,
/// Down: y + 1
Down,
/// Diagonal down right: x + 1, y + 1
DiagDR,
}
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
struct Point {
x: usize,
y: usize,
}
fn check_direction(map: &Vec<Vec<char>>, state: State, pt: Point, direction: Dir) -> bool {
let next_pt = pt + direction;
let c = map[next_pt.x][next_pt.y];
match state {
State::ExpectM => {
if c == 'M' {
check_direction(map, State::ExpectA, next_pt, direction)
} else {
false
}
}
State::ExpectA => {
if c == 'A' {
check_direction(map, State::ExpectS, next_pt, direction)
} else {
false
}
}
State::ExpectS => c == 'S',
}
}
fn check_all(map: &Vec<Vec<char>>, x: usize, y: usize) -> u64 {
let pt = Point { x, y };
let mut sum = 0;
if x >= 3 {
if y >= 3 && check_direction(map, State::ExpectM, pt, Dir::DiagUL) {
sum += 1;
}
if check_direction(map, State::ExpectM, pt, Dir::Left) {
sum += 1;
}
if (y + 3) < map[0].len() && check_direction(map, State::ExpectM, pt, Dir::DiagDL) {
sum += 1;
}
}
if y >= 3 && check_direction(map, State::ExpectM, pt, Dir::Up) {
sum += 1;
}
if (y + 3) < map[0].len() && check_direction(map, State::ExpectM, pt, Dir::Down) {
sum += 1;
}
if (x + 3) < map.len() {
if y >= 3 && check_direction(map, State::ExpectM, pt, Dir::DiagUR) {
sum += 1;
}
if check_direction(map, State::ExpectM, pt, Dir::Right) {
sum += 1;
}
if (y + 3) < map[0].len() && check_direction(map, State::ExpectM, pt, Dir::DiagDR) {
sum += 1;
}
}
return sum;
}
fn check_day_2(map: &Vec<Vec<char>>, x: usize, y: usize) -> bool {
map[x][y] == 'A'
&& x >= 1
&& y >= 1
&& (x + 1) < map.len()
&& (y + 1) < map[0].len()
&& (map[x - 1][y - 1] == 'M' && map[x + 1][y + 1] == 'S'
|| map[x - 1][y - 1] == 'S' && map[x + 1][y + 1] == 'M')
&& (map[x - 1][y + 1] == 'M' && map[x + 1][y - 1] == 'S'
|| map[x - 1][y + 1] == 'S' && map[x + 1][y - 1] == 'M')
}
pub fn run(mut args: env::Args) -> std::io::Result<()> {
let filename = args
.next()
.expect("You must provide a filename as argument");
let f = File::open(filename)?;
let reader = BufReader::new(f);
let mut sum = 0;
let mut sum_2 = 0;
let mut map: Vec<Vec<char>> = Vec::new();
for line in reader.lines() {
let l = line.unwrap();
if l.is_empty() {
continue;
}
map.push(l.chars().collect());
}
// x: the rows
// y: the columns
for x in 0..map.len() {
for y in 0..map[x].len() {
if map[x][y] == 'X' {
sum += check_all(&map, x, y);
}
// part 2
if check_day_2(&map, x, y) {
sum_2 += 1;
}
}
}
// Task 1
println!("Number of 'XMAS': {sum}");
// Task 2
println!("Number of 'X-MAS': {sum_2}");
Ok(())
}
impl Add<Dir> for Point {
type Output = Self;
fn add(mut self, other: Dir) -> Self {
match other {
Dir::Up => self.y -= 1,
Dir::Down => self.y += 1,
Dir::Left => self.x -= 1,
Dir::Right => self.x += 1,
Dir::DiagUL => {
self.x -= 1;
self.y -= 1;
}
Dir::DiagUR => {
self.x += 1;
self.y -= 1;
}
Dir::DiagDL => {
self.x -= 1;
self.y += 1;
}
Dir::DiagDR => {
self.x += 1;
self.y += 1;
}
}
self
}
}

91
src/solutions/day_5.rs Normal file
View file

@ -0,0 +1,91 @@
use std::collections::{HashMap, HashSet};
use std::env;
use std::fs::File;
use std::io::{BufRead, BufReader};
use std::str::FromStr;
enum ParserState {
Restrictions,
Updates,
}
#[derive(Debug, Default)]
struct NumEntry {
pub less_than: HashSet<u8>,
pub greater_than: HashSet<u8>,
}
pub fn run(mut args: env::Args) -> std::io::Result<()> {
let filename = args
.next()
.expect("You must provide a filename as argument");
let f = File::open(filename)?;
let reader = BufReader::new(f);
let mut state = ParserState::Restrictions;
let mut ordering: HashMap<u8, NumEntry> = HashMap::new();
let mut lists: Vec<Vec<u8>> = Vec::new();
for line in reader.lines() {
let l = line.unwrap();
match state {
ParserState::Restrictions => {
if l.is_empty() {
state = ParserState::Updates;
} else {
let nums: Vec<u8> =
l.split("|").map(u8::from_str).map(Result::unwrap).collect();
assert!(nums.len() == 2);
ordering
.entry(nums[0])
.or_default()
.less_than
.insert(nums[1]);
ordering
.entry(nums[1])
.or_default()
.greater_than
.insert(nums[0]);
}
}
ParserState::Updates => {
if !l.is_empty() {
lists.push(l.split(",").map(u8::from_str).map(Result::unwrap).collect());
}
}
}
}
lists.retain(|v| is_compliant(v, &ordering));
// Task 1
let sum = lists.iter().fold(0, |acc, v| {
let idx = v.len().div_floor(2);
acc + v[idx] as u32
});
println!("Sum of middle values: {sum}");
// Task 2
// TBD
Ok(())
}
fn is_compliant(list: &[u8], ordering: &HashMap<u8, NumEntry>) -> bool {
for i in 0..list.len() {
// skip numbers that have no associated rules
if let Some(entry) = ordering.get(&list[i]) {
for j in i..list.len() {
if entry.greater_than.contains(&list[j]) {
// that's a violation!
return false;
}
}
}
}
return true;
}

View file

@ -1,4 +1,6 @@
pub mod day_1; pub mod day_1;
pub mod day_2; pub mod day_2;
pub mod day_3; pub mod day_3;
pub mod day_4;
pub mod day_5;