diff --git a/Cargo.lock b/Cargo.lock index 8a07bf0..e9a8c36 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6,6 +6,7 @@ version = 3 name = "adventofcode2024" version = "0.1.0" dependencies = [ + "itertools", "regex", ] @@ -18,6 +19,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "memchr" version = "2.7.4" diff --git a/Cargo.toml b/Cargo.toml index 1339bf6..5c2abc8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,4 +4,5 @@ version = "0.1.0" edition = "2021" [dependencies] +itertools = "0.13.0" regex = "1.11.1" diff --git a/input/04-0.in b/input/04-0.in new file mode 100644 index 0000000..1f4eda2 --- /dev/null +++ b/input/04-0.in @@ -0,0 +1,10 @@ +MMMSXXMASM +MSAMXMSMSA +AMXSXMAAMM +MSAMASMSMX +XMASAMXAMM +XXAMMXXAMA +SMSMSASXSS +SAXAMASAAA +MAMMMXMMMM +MXMXAXMASX diff --git a/input/04-1.in b/input/04-1.in new file mode 100644 index 0000000..e04c96a --- /dev/null +++ b/input/04-1.in @@ -0,0 +1,140 @@ +SSSXMASAMSSSSSSXMASXMASXXMXMAXSSMSSXXSMMSXMMSMMMMMAXSSMMXMAMAMSMXXSMSSMXXMAMMXSMMSXMAMAMXSMMMSMSAMXXMSMXMXSAAXMSMMXSSMSASMXMSAMXXXMMASXXMSSM +AMMAMXXAXAXAAAXAMASXMAXMSMSSSMAXMASMMMAAMMSSMAAMASXXXAXXXMAXAXAMMXMXAAMSASXMSXMAASMMSSXMASAAXMAMXSAXMASAMMMASXMAAXMXAASAMXAMMMMSSSMSAMXAAAAS +MMSSMMSSMXSMSMSMMASAMXSXAAAAAMMMMAXXAXMMSASASMMSAXMASXMMSMMSMSAMSAMMMAMSAXMASAMMMSAAAMAMASMMXMAMAXAASXSMSXXSMASMSMASMMMMMSMSAAMAAAMMAMSSMSSM +XAAAAXAMXMAMAAXAMXSXMASMMSMSMMMAMSSSSSMAMXMAMXMMMSXAMAXAAXMAXXXXSASASAAMXMMAMASMXSMMSSXMASXAMMMMMSSMMXMASAXXMXMAXAMXASMSMAXSMSSMMMMMMMAXAMXM +MMSSMMMSMMMMMMSAMXMAXAMAMXXAMASXMAMMXAMASMMSMMSAMXMASXMSASMSSSMXSAMXSMMSAXMASMMMAMXMXMAMXMMMSAAAAMAAXXMAMMMSXMSSMXXSAMASMMMSXMAXSASASMAMXAAX +XAMAMSAAMAAXXAXAXAMSMXSSMMSXSASMMXSMSAMXSXXMASMXMAMXXXAXMXMMAAAXXSXXXAAXXSXAXMAXMAMMAMXMAAAASXSMSSXMMMASMXAXAAMASAXMSMAMAMASMSMMSASASMMSMSSS +SXMAMMMSXSSSMSSSMSSXAXAAAMMMMASMSXAASAXAMXSSMMSSSMSSMASMXAMMSMMMAMSMMMMSMSMXSMSMSMSMXSAXMSMMSAMAAAAXASAMMMSSMMSAMXXAXSXSXMMMAXSAMXMXMAXMAAAX +XAMSMMXMAXAAAXMXMXAASMSSMMAAMAMAXSMMMMMSSMMAMAMXAXAAMXXAXXSAAXXMAMAMAAAAAXAAXAAMAAXXMAXMAAXXMAMMMSMSAMXSAAAXAAMASMXMASMMMSMMSMMXXSMMXMMAMMSS +MSMMAXAMSMSMMMMASAMXXXXAASMMSAMXMMMAAAAMAMSAMASXXMMMMAMSSMMMMSMSASMSSMSMSMSMMXMSMMMXMASMSMSXSXMMXMXAXMMSMMSSMMSMMXAMAXAAASAAMAXSXXAAAXXAXAAA +AAAXAMMXMAXXMAMMSAMAMASXMMAAXASMMAAXSMMSAMMAMMSAXSMSMXSAAMASMAASASXMAAMXXXMXAAMAMASASAMXMASAAXXXAXAMSXMMMMXMAMXXAXXMSSXMSSMMMSAMAMSSMMAMMMSS +SSSMXAXMMAMAXSXMSAMAMXXSASMSSSMMSXSMXMASASXSMSMMMXAAASMMSMASMMMMMMMMMMMAXASMSMSASXSASAMXMAMXMASMMSMXAASASMMMSSSMSXMAXAXSAMXAXMAMXMAAMXSMMMAM +XAMAMSSXMSSSMXAAMASXSMMMXMAAMAAXSAXAMMASAMAAXMASASMMSMXMAMMMXAMMMSMSSMMXMSMAXASXMAMXMASXMMMAXMMAXAMMSMMASAAMAAAAAMSSMAMXAXMMSSSMSSMSMXMAXXAM +MAMAMAXMXMAMAMMMMAAXAAXMAMMMMMMMSAMXXMAMAMMMMSAMXASMXAXSASASXMMAXXAAMAMXXMASMMMAAXMASMMXXXSSMMAAXXSAXXSASXMMMSMMMXAAXMAXMMSAXAAAAASAMXMXMSXM +SSMXMXSXSMMMSMSSMXXSSMMXASASXXMAMAMSSMSSSMMXAAXXMAXXMXMXASASAASMSMMMSSMSMSMMMASMMXMXMMMMMMMAASMSSXMMSAMASXXXMXXAMMSSMMMMSAXMMSMMSSMMSASAMMMS +XMASXMMMMAMAXSMXMMMMAMXSASASMMMMSAMMAAAMAAXMASMXSASMMMSMMMAMMMMMAAAAAMAXAAAXSAMXXXMASAAAAAASMMAAMMSAMAMAMMMXMAXXSAXAXAAAMXMXMXAAXAAASAMAMAAA +XXMXMAMASAMMSMSAAASXMXMAAMASMXAAMAXSMMMSSMMSXMXXMXXAAAXMAMAMASASXMMSSMSMSMMMMAMMAXSXSSSSXSXMXMMMMAMASXMAMXMAMSSMMMSMSMMSSSSSSSMMXSMMMMMSMMSS +SSSMSSSMSAXMAASXSMSAMXMMXMAMAMMSXMMMASMAMAMAASMXMMSSMMSSMSAXXMAMXXMAXAAAASXSSXMASAMXMAMAXXMSAXAAMSSXMASXSXXXXXAMXAAXAAAAAASAAMAMAXAMMSAXAAMX +AAAAAXMXMASMMMMXMAMAMAMXSMMSMMAMAMAMXMMMSXMMXMAAAAXXAMMXASXSSMSMXMMMXSMSMSXXAMXXMASAMXMSSMASMSSSSMMMXMAMSAASMSMMSSMSSSMMSMMSMSXMASAMXMASMMMM +MSMMMXXXMMMMAMAXXMMSMMSAAAAMXMAMMMMMAXXMAXXXSMXMXSSSMMMMMMMAXAASXXASMMMXMXMSAMXSXSMMXXSXAMAMMAAMMAAXAXSAMXMMAAXMAMAAXAXMXXXAXMXMASMMMMAMXMAM +XAMSASMXMXAXSMMMXSAMAAMMMMMSSMSMSAASXMMMMSMAAXMSXMMMXAXXMASMMSMSXMASAAXMMMAXAXASMMAXSSMSMMSSMMSMSSMSXSMMAAXMSMMMSSMMXMMMMMSMSAXMAMAAAXMMMMMX +SASMASAASXMSXAAAAMASMMSSSXMXAAAAMSMXAXXAAAMMMMMSAAMSSSSXSAMXMMMMMSMMXAMXMASMMMXSAMAMXAAXXAMAXMMXMAXXMXAMXXXAXAMXAAXSXXSAAAAAMAMXMXSASASASASM +MMMMMMMMMAMAXMMSXMASXAAAMMXMMMMSMAMSMMSMSAXMXMASXMMAAAMAMMMMXMAAAAAAXXMASMXAXSMMMMXXSMMMSXSMMMMMSXMMASMMSMMSMMMMSSMSAASXSSMSMAMAXXMAXASASASA +SSXMMASMMSMAMXXMMSASAMMSMMSMMXAMXMMAAMAAXAXSAMXSSMMMSMMSXSASAMSMXSMMMMSASAMAMMAXASXAMXMXXAMAXSAAXMAAMAXAXAAAAAAMAAAMMMMAXMAAMASXSAMAMMMAMAMX +MAAAMASAAAMXSMSAAMASXMAXAAMAMMXSAXMMSMMSMXMSASMXMXMXAXAXASAMMXMMXXMAAMMMMAMMSXSMASMMMAMXMMMMAAMSSXSSMMMMMMSSSMSXSMMMXAMSMMSMSMAMXAMXSASXMXMX +SSMMMAMMMMMAAAMMMSMMAMXMMMMAMMMMMSXXAAMMXXAXAXAMMASXMSSMAMAMSAMXASMSMSAXMAMASAMMXMAASASAAAAXMMXAMAMAMXAAAAXAXAMAXXMASMMAMAAXAMAMSMMMMASAMXXX +MXMXMXSASAMSXSXSAXASMMSXSMSMSAAAAMXSSSMAXMMMXMMXSASAXAXMXMAXSASMXSAMASASXXMASAXXXSXMSAMMSMSMXXMMSASAMSSSSSMMMAMAMASAMASMMSSMXSAXAAAAMAMMXXMS +SAXXAAAAMAXXAXAMXSMMMAMAXAAMXMMMAXXAXAMXSAXSXMXAMASAMXSXXMAMMMMMAMAMAMAMMSMMSMMAMSAMMAMXAMMMMMMASXSAMMAMAMAMSXMXSAMASAMXAAMMMSMSSSSSMMSXSAAX +XSMMMMXXXXMMAMAMXSMAAXMAMMMSAMXSXMXSSSMMSAMSAMXMMAMASXSMSMMSASAXMMSMMMAMAAAASAMXASAMMMMMAXSAMAMXSASMMMAMAMMMMASAMASXMXSMMXMAMXXAAAXAAXAASMMM +XMXAAMSMSMSMAMMMAXAXSXMXMMAXASAMASMMAXMXMMMXAMAXMASXMAXAAAXMASXSXMXAAXAMSSSMXAMAXSAMAMSSMMSASMSMSMSMSSSMXMSASAMASXMXAMSXMASMSSMMSMSSMMMMMAMX +XMSSMSAAAAAXMMAMXSMSXAMAMSMSMMASMMAMAMMAAAAMXMMXSASXMXMSMSMMAMMXAXSSMXXAMXXAMSMMXSAMXSAAAASAMXAASAMAMAXMAXMAMMXAMAMMSAMAMMSAAAMAMXMAAAMXSXMS +XMAMXSMSMSMMMXXXXXMAMMMMMAAAXAAMXSSMAMSSMMXSAAMAMAMAAAMAAAMMASMSSMXAXAMSSMMSMMAXASAMMMXSMMMSMSMMMAMMMAMSSSMSSSMASAMAXXMAMMMMMAMAMAXMMMXASAMS +XMASXSMMAMXAMSMSSMMMSMAMSMSMSSMAMXMSSMMXAAASMSMXMASXMMSMSMXMASAAXMMSMMXAAAAXAXAMXSXMXAXXXMAXXMXXXSMMMAMXAXAAAXSXSAMXMMMMXMAAXAMXSASMSXMMSAMX +MMXSASXMXMMXXAAAXAAXAAAMXXMAMASXAAXAMAASMMMSAMMSSXMAMAMXAXMMAMMMSSMMASMMMSMSAMSMXSMMMSSXMASXAXXMAMAMSASMSMMMSMXMMMMSMSASASMSSSSMMASAASXXSAMX +ASMMXMASXXAXSMMMSMMSSSMSAMMMMMAXSSMMSMMSXMAMAMAAMMSAMASMMSSMXSAAAAXSAMAMAMMAMXAASXMAAXMMMMMSMMXMASAMSASAAXAAAAXMAAAAASASAXAAMMAMMMMMMMMAXAMS +SXAXASAMAMMMAXAXAMMAMAXMAMAAMXMMXMAXXXAXAMXSXMMMSXSASASAAAXAAXMMSSMMASAMSMSASXMSMASMSSXXAAXAXSAMMSAMMMMMMSMMSSMSSSXMMMXMAMSMMMSMSXMASXMMMXMX +XAXSAMXSXMXMMSMSMMMASMMMMSAMSAXSAXSMSMSSMMAXMXMAXMSXMXSXMMSMMSAXAMASAMMXMAMASAMAMXMAXXASMXSASXAXAMAMXSAAMAXMAAAAAAXSMMSMSMXAXAMMSAXMSMAAAXMX +MAXSAMMAMXXXXXMAMASMMMAXMAMMSMSSMMXAAMXAAMMSAMMMSAXMXXXXXAXXXAMMSSMMMMSAMAMAMASAXMMMMMMAAMXMAMMMSMSMMAAXXAXMSMMMSMMSAAXAMASAMMSASAMSMMSMSAMX +AMMMMMMAMMSASXMASMSAMSXMAMXXXSAMXAMXMXSXMMXXASAMXMXAMMMXMASXMASAAMAMXAXMXAMAMAMXMSAMASXMMMMXSAMAMXXASMSMMXMXXMXMAMASMMSSMAMAMXMXMXMAAAMMXMMX +SXAAAAXMMMSAMAMASXSAMAXMSXMASMMSMXSMSASAXMASAMXSAMMSAAAMMMMASAMXSXMMMXSXSMSAMSSMAMASMMAXXXAAXMMSSXSAMXAAXMASASASMSMXAMAAMSSMMXSXMASMSMXSSMSS +ASMSSSSSXAMAMAMASMSAMXXXMASMXAXMAXXXMASAMSAMXSASAXAXSSXSASMMMASAMXSAMMMXAMMAMAAMASXMMXSMSMMMMXXAXXMAMSXSMMMXASASXAXSXMMXMAAAMAXAMXAMXMASXAAX +MAMMAMAMMASXSASXSASXMSXSXXMXMAMXMXSSMAMXMMXXAMXSXMSMXMASMMAMXSAAMASASASAXMMAMSSMAMAAAAMSSMAMSMSMMSSSMMMMASXSMMMMXSMSXSSXMSSMMMSAMXMAAMXSMMMS +SASMSMAMAXXAXASAMAMMMAAAASMMMAXMAMXAMXSXMMMMAMAMMMXXAXMMXSXMXAMAMASAMASMMSXSAXAMMMSAMXSAXAASAAASAAMMAMXMAMAXMASXXMAXAAXMAXXAAAMAMXXSXSAMAMAM +SASAMXAMSMMSMXMASMSAXMXMMMAASMMMSXMXMSXMAAXSSMAXAMMMMMAAXSMMXMSAMXMXMXMXAXAXSAMXAAMMXMMMMSMSMSMMXSSSSMSMSMMMSASAAMAMXMSAMXSMMMSAMMXMXMASAMAS +MMMAMSSSXSAAAXSMMMAMAMXXXMMMMXAXAAASMMMSXSXMASMSXMAASXMMXMASXXXMMAXMXMSXSMMMAMXMMSSMAXAXXXAXMAXXSXXAAXMMMAMXMXSMXMXMAXAXMAMMAMSMMMAMASAMXSMS +SAXMMMXAAMSSSXAAASMMMMSXXSAXXSXMMMMMAAAMXMASAMXAAMSMMAASASXMXSSSSMMSAAMAXMASMSXSSMAMASAMXAMMSAMMAMMSMMSASAMSMAXXAMASXSMAMMSMMMXAASASASMMMSXS +SMXSAXXMMMMMMXSMMSXSAAMMXXASXMAXXXAMSMMSASXMAMMMSAXASXMMAMAMXMAXXAAMSSMAMSASXMMMASMMMAASMSAAMXSAMAXAMXMMXMMAMAXMAMAXMSXMMMAAMSMSMSAMASXSAMMX +MAASXSMSAXAAMXMAAXASMMMAMSMMASMMSSMXXSAMXSMSSMMAMMSAMMASXSAMMMSMMMMMAXXXMMASMMAMAMXAMMMMAAMSMSAMXXAASAXXSSMMMASXSMXSAMXMAXMSMAAAAMXMSMMMASXM +MMMSMXAAAMMXSAMMAMXMASXSMAXSAMXAAAXSAMMSASXAXAMAMXMAMSMMMSASXAAXXXXMMMMXXMXMMXAMSXSMSAMMAMSAXAMXSXMMSXMAMXAXMXSAMAAMAMMSSSMAXMSMSMMXXAXSAMAA +MAMXMMSMSMAMMAXAMXAMAMXASAXMMSMMMSMMAMXMAMMMMXMSSSSXMASAXSAMMSMMSMMXSAAMSMMMAMMXXASASMSSSXSMAMAAXXXMMMSXMAMMSMMMMMMSSMXMXAMXSXAAXXMAXMMMXSMS +SASAMMMAAMASMSAASMSSSMSAMXSXAAAAAXAXAMAMAXXSASXMAMXMSXMMXMSMMASXMASAMAXXXAAMASMAMAMAMXMXMAMXMMSSMMMMAAXMASXMXAAXMAMAXMAXSMMSXXMSMXMASMSMMSXX +SXSASASXMXXMAAMMSAMXAAAMSMMMSSSMSSSMASXMXXAAASXMAMMMMSSSMAXMSASXSXMMSSSMSSMSAXMAMSMXMXAMMASMXAAAAXAMMMMSAMXSXSMMSAMXSXSXSXMSMSMMXSXMAXAAAXMM +MASAMXSAMXSMMMXSMAMMMMMMAASAMAAAXAMSMMMMSSMMXMASASXSAAMAMXSAMASMSAMXSAAAAAAXXXXAXAXAXXAXMAMXMMMMMSMSMSXMASASMMAASXMASXMXMAAXAMSAASMXMSMMMSMA +MMMMMMSAMASAXAMXMAXSAMXMXSMXSXMMMXMAXAMXAAMXMXAMXXAMMMSXMAMAMAMASMMXMXMMMXXXMASXSMXMMSAMXSSMMSSMAAAAAAXSXMASAMMMSAMXSMSASAMMSMMMSSMAXAXAAAAS +XMAMSAMMMMXXMMMASAMXASAMSMMMSXXXXXXMSSSMSMMMAMSSSMAMXASAMXSAMXMXMASAMASXMMSSSMAAAAASAMAAAMAAAAAMSMSMSMMAXMMSAMXASAMXSASXAASAXAXXMXXXSMSMXSXM +ASAMMAXXASMMMMSAXMASAMASAAAAMMMMMSMMAXAMXSAMXMAAMXMXMAMAMXMASXMMMXMAMAMAXAAAAXMSMSMMAXAMXMXMMMMMMXAAMAMMXMXXXMMMSXMMMMMMMAMAXAMXSAMXMXAMXMAM +XSASXMMSMSASAAMMSSXAXSXMMSMMSAXAAAXMSSMMAAMXAMMSMMMMSMSMMAXMXXAAXSSSMMSXMMSSMMXXXAMSSMASXSSMMSAAAXMMSAMSAMASAMAMXMMAXMXAXSMSMSMAMAMMXAXMASAM +XSMMAMXAASXMXSSXAMMMMSAMXMMMSMSMSSSXAAAMMMMSSXXAMAAAAMAMSSSXAXMSMAAAAAAXXMAMMXMMSXMAMSMMMAAAAMXMMXMXSXMSASAMXSMSMAMSXAXSAMAXMASXSAMXSMSXXSMS +AMXSXXSMXMAMXMAMXXAXMXAMASAAMXMAAAAMSSMMSAASMXSASMMMXXAXAAMMMMXXXMAMSMSSSMAMXMAXAXMAXASAMSMMMSSMMXMAMSASXMASASXAXSMXMMMXAMAMMAMXSMSMSAAXXMMS +XMASAXAMXXAMXSXAMSSSSSXMAMMMMAMMMMMAXAMASMSMAASAMMSSMSSSMMXAAASMMXSAMXAAXMASAMMMMMMXXAXXMAAXXAAAAAXAMMXMASXSASXSMMSXXMASXMMSMMSXSXAAMMMMXAAX +SMASMMXMMSMSMMASAAAAAAXMXXSSSXSAMSSSSMMMMMXMMMMAAXAAXAMXMXSSSMSASAMXMMMSMXMAMSSMSASMMSMMMSMMMMSXMASMMSAMXMASAMXMASAMXSXMAAAAAMSASXMSMAXASMMS +MMAMMSXMAASAASAMSMMMXMXXMMAAAXSMMAAXXXAASMSMSMXSMMMSMXSAMXXAAASAMXMSAMXAMXSAMXAASXSAAAAAAAXMSAMMSXXMASMSAMMMAMAMXMMSAMXMSMMMXMXAMXXAMXXXMSAX +XXMAAMAMXMMSMMAXXXMXXMMAAXMMMMMSMMSMMMXMSMAAAXMXAXXMAAAAASMSMMMMMXSAMXSASXMXXMMMMASMMSSMSSSXMAXAXSAMXMASXSXSXMASMXXMASMXXAAXAMMXMXMSMMMSAMXS +XMSMMXSMMSMMMSSMMSMXSASMSMXXXAAAMXMASMSMMMMSMMASAMMMMMSSMMAXMAAAMMSXSXMXMAMXMMSSMMMAMXMMXXMAMAMMMSMMMMXMASAMXMMSAMSSMMXAXSAMXMASMMMMAAASAMSX +MAMAXAAXAAAXAAAAXAAXSASAAASMSMSMSAMMMAAAXAXXXXXAMXXAAXAXMMMMMSSXSAMMMMMASAMMXAAAAMSMMAXSXMXAMXSMASMAXSXSXMMMXMAMXMMASAMXMMXMSMXMXAASMMXXAXXS +ASXAMSSMSSXMMSSMSMSMMAMAMSAAMAXAMMSSMMMMXSSMAMSAMMSXSMASXSMMAXXAMXXAAAXAMASAMSSSMMXAMASXMASXMAXMXMMXSMAMXXMSMMAMMXSAMXASAMXSAMMSMMMSASAXMMAX +SXMAXXAXXAASAAMMAMAAXMAXMMMSMAMMSMAAASAXSAMMAMMASAMSXMAMAXAMSSMXMAMXSSSXMMMXAMXXXSMSMMMMAMXMSMSMMXMXAMXMAMMMAMSSMMMAMMSAAXSMASAAMSMSAMAASMSX +XMAXMSMMMSMMASXMAMMMMMMSAXAAMSMAAMSMMAAXMASMAXSAMAMMXMAXMMSMXAMAMMSAAAAXSMMMSMMMXMAMXXXMXMXMAMAAMAMSXMXMASAAMSAAAXSAMMAMXMAAAMMSMAAMAMSMXAMA +XSSSMAXXAAASAMXSSSSXSAAMAMSMSMMMMMXMXMSXAAAXMXMMMSMSMMSAMXXXSAMXAAXMMMMMAAXAXAMSAMSMMMAMASXSMSMSMXXAASMMASASMMASMMMXSAMXSSXXMXXXMMSMMXXXMXMA +MAAMXMMMXSXMASXMAAXAMMXSMMMMSAMXSMSAXXMXMMSSSMXSAMMAAAMMSMSMMMMSMMMXAAAXSMMXSASMMXAAASXXXXAMXMAAXMMSSMAMMSAMMXMXMXMAMAMAMAAXMXXXAXMAMAMAMMMS +SMMMAMASMXAMXXXMMMMSMMAMAXXAXAXXAAXMASXASAMAAAAMASXMMMXAAMAAAAAXSXAMMSAMXASAMXMAXSSSMAAXSMSMAMSMXAXMXMXMMMXAXMMMSAMAMAMASMSXMASXMMMAMASAMAXM +MAMSXSAMAMMMMSMMAXXAAMSSSMMSSSMSMMMXMAMAMAMSMMXSAMAXMAMSMSSSSMSSSMSXAXMAXXMASASXMAMXXMXMAAAMXMAASMXMAMSSXMXAMAAASXSSSMSASXXAMAXAAAMASXXMMSSM +XAMMAMMMSAAAAAMSMMMMMMXAXXXMAXXXXXMASXMASXMXSMAMAMXMMAXAAXMAAAXAXAXMMMSSMXSAMAXSMSSSXXXSMSMSMSMMMAASAMAMASXAAXMMXXXXAXSAMXSMMSMSMMXXSMSMAMAX +SMSSMSMAMSSMXSMSASXMXSMSMSMMAMXMXSMMMXSASXMXMMMSSMSMSMSASMMSMMMMMMMMXAAAAMMSMXMAXAXMASXAAMXMXXXAMMMAAMXSAXSAMXSAMXSSMMXAXAMSXMAXXSXMXAAMXSAM +ASAAAAMXXAMMMXAMXMAAASAXAAAMASXMASAAMXMASXSAXAAAAAAAAASAMXXMAXXMAXASMMSXXXAAMMMSMMSXAASMMMASXSMSSXXMXMAMXMMMMAMASAAAXMSXMMASMMSMAXAMMXMSMMMM +MMSSSMSXMAXSAMAMSSMMMMAMSMXMAMAMASMMAAMAMASXXMSXMXMSMMMAMXMSMMMSMSASAMXMSMSMXAAAXXMMMXAXAXSMAAXASAMXMSSXMXAAMXSAMMSMMMMSAMAMAAMXXSAMAASAMAXM +XXAXXMXMAMXMSXXXXXXXAMXMMMXMSMMMASASXMSAMXMSXXMASAMAXMMMMMXAAAMAAMASAMAASAMXSMMMXAXAXAMXSSXMSMMASMXMMAAASXSMSAMASXMXXAASXMMSMMSAXSXMSMSASMSM +MMMMAXAMXXXAXMMMSMMSXSAXMASMMASMMSMMAXXAMXAAMXAXMASASMAMAAMSSMSMXMAMXSSMMAMAAAXSSMSMSASAMMMAASMMMXAXMMSMMAAXMAMMMMMASMMMAMXMASMXXMXXAXSAMAAX +AAAASXSAMXMAMAAAAMAAASMXSMMAXAMAAXAMXMMSMSSMSMSMXMMXMMAXXXAAMMXMXMASXMAMMSMMMSMAAAAAXAMMSMMSAMXAAMMSSMXAMSMMSSMSAMXAXMASAMXSMMSXXMAXMXMAMSMS +SMSMMAXASXMAXSMSSSSSMMXXMASAMXSMMSMMSSMAAXAXSAMAASMMMSMSAASAMMAMXXMAMSAMXMAXAAMMMMMSMXMASXAMASMMXSAMAASMMAAAAXXAMXMSSSMSASXXMAXXMASMMAMAMMXX +MMMAMSMMXMMXXXAXXAAMAMXMXAMAMAAMAMAAAASMSMMMMAMSMXAAXAXMXMMAMMASAMXSMSMSASMMSXSASAAXMAXSMMXSAMMMMMAXMMMMSSMMSSSMMMAXAMXSAMAXMMSMSAXXMXSXXMSX +MAXMXXXMASMMAMMMMMMMMXASMAMAMSSMSSMMSXMXAAASMSMMMSSMMMSMMXXXMXXXAMAMXMASAXAAAAAMSMSASMMAXSMMMSSSSSSMSAXXAAAXAAXMAMXMAMXMAMXMASAAAAMSSXAXSSMM +MMSXAXAMMSXMAXAASAMXXSASXSMXMMAMXAXAXXMSSSMSAAXXMAXAAXXAASXSSMSSSMXMAMMMSMMMMMMXMAXMASXMXSAMXXAAAAAAXSSMSSMMMSMSXSMSMMSSSMMAMMMSMSAASMAMXAAX +AXAMSXSAMXXSXSSSSMMSAMXMAMMAXMASMMMAMXAAAAAMMMMSMSXSMSMMMSAAAAMAXAMSMSMAAXAAXASAMMMSAMXXAMAMSMMMMMMSMXMAMAAXMAMXMAASMMMAMMXSXAMXAMMMMMMSXSMM +SAMXMXAAXXMAMXXMXXXSXMSMMMXMXXXMAXMAAMMMSMMMAXXAAAAMSMASMMMMMMMAMXMAAAMSSSSSSMSAXSAMAXMMMSSMXAXXXXAXAAMAMXSMSASASMXMAAMAMAAMMSMMXMXXXSAMAMAM +MMXSMMSSMMMSAXMASMXMMXXAAASXMSASXMSMSASAXASMXSSMSMSMAMSASAMXMXMMMXMMSMXMXMXXMASAMMMMXXAAMAMAMSXMMMSSSMSASXMASASAMMMSSMSSSMXSAMMSAMXMXMASAMAM +XAAMAAXAMAAAMAASASAASXSSMMSAASAMXXXAMMXAMASXAXXAAXAMAMXAMXSMMMSAMXMXXMASASMMXXMXSMAAMXXMMAXMMMXXAAXAAAXASAMMMMMXMAAAAXAAAAAMASAXASAMXMMMMSMM +MMSSMSSSSSSSMXMMAMMSMAAMXXMMMMAMMMMMMMMMMAMMSSMSMSMSSMXXSAMAAXMASAXXAMAXASAMMXMASAMMSAMSSSXSAXMMXSMMMMMMMXMXAMAXSMMSMMMMMMMMMMXSAXMXSXMAXAMX +AAXAAMMAAAAAAASMAMXXMMMMSSMSSSXMXSAAAAAASAXAMAAAMXXAMXSXMASMSSSMMMMSAMSSMSAMASMASXMAMXSAAXAXASAMXMMXAMMAAXSSMXAMXMAMAXXSSSMSXAXMMMSXMASMMXSX +SXSAMXMMMMMMSMXMASXAXAAXMAAAXMAMXMASXXSAXMMSSMSMASMSSMMASAMAMAAAAAMMAMMAASASMXMXSXMXSSMMSMSMASMSAAMSMSMMASMXMASXMSASXMMXAAASMXMAMAXAXMMSAMAX +XMXMMMSMSAMXAXXXAXXXXSASMMMMMSAMAXAMMXMMXSAAAAXAAXMAAASXMXSMMXMSMSSSMMSMMMAXXXSAMXMAMAAAMAXMMMAXMMMXXAAMMMMASMXAAMMXMASMMMMMAMSSMMSSMMAXXMAM +SAMXXMAMSAMAAMXMSSMSMMASASXMXSMSSMASXXXMAMASMMMMXXMSSMMASAXXASXMAXAAXXAMXMMMASXMMAMASMMMSMSASMSMSASXSSSMMMSASXMMXMMXMASMMSSMXMAMAMXMAMMSAMXS +XMAMXMMXMAMMXMMMXAAXAXASAMXSAMXAAMSMXSAMXMMXXAAMXAMAXAXAMXMASAMMSMSMMSXSMXMAXMAMXASAMAAMXMSAMAAASASXMXXAAMMMSXMMSMMSMMSAXAAAXMASXMSSSMAMASAX +MSSXMAXSSMMAAMAMMMMMXMMMMMAMMSMSMMASASMMASMMSSSSSMMASMMSSSMXXMAXAAAMMSXAXAXXAXAMXXMMSSMMAMMSMMMMMMMAMMXMMMAMXXSAXAAAAAXMMSSMXSMMMXMAMMSSMMXS +AAAMXMXMAMMXMSASAXMMMXMASMASXSAXXSXMMSAMAAAAMXMAMXMMMAAMAAMAMXSSMSMSAMSAMMSMAMSSSMAXAXASMMSXSXSXMASAMAMSMSMMSXMASMMSXMSXAXAMAMAAXMMAMMXAAASX +SMMAMMMSAMMSMSASMSAXSMSAXSASMSAMAMXXASXMXSMMMAMAMMSAMXSMAMMXSAMXAMXSAASXAAXMAMMAMSSMSSXMAXXAAMMMSASASXSAAAXMSMMAMAMAMXAMXSAMXSSMSSSMSXSMMMSS +XXXMASXMASXAAMAMAMAMAAMMMMMXAMMMXMMMASXMMXXASMMMSXSAMAMAXMXXAASMXMAMMAMXSAAMXSMAMAXAMXAMAMMAMMAXMXMXSXMMSMSXMASMSXASXSXSASAMMAAXAXAMXAXXAXMA +SSXSSXXSAMMMMMAMXMAAMXMMSSSMSMSXSASMSXXSAMSMAAAASAMAMSSMMAXSSMMMXMXSSSXXMASAAMMXSAMXMSSMXXAAXMMSMMMMMMXAMAMXSXMMXMMMAXAMMXAMMSXMSMXMMAMSXMAM +XAXXMAMMXSXXXSASASMMSAAAAAAAXAMXSAXXXAMMSAAMSAMXSASXMMAMXMMMASAXMAXMAMXXMAMXXMAXMXMXXAMXMSSXXMMAXAAAAXMMSSSMMMASMXXMMMMSSSSMMAXAMXSSMXMXAXXX +XMMAMSMMASXMXXASASAASMXMMMMMMAMAMAMMMXMAMSXXXXXAMAMMXSMMMSMSAMXSAMXMAMMXMASMSMXXMAMXMSMMAAAMSSSSSMSSXSAAAXAAMSAMXSMSXMAAXAXAXMMMSAMXMAMSMMXX +XXAXMMAMAXMSSMXMMMMMMSXASAMXXXMMSSMSAMMAXMMSMMMSSMMSXMAAXAAMXSXXMAXMAMSAMMAAAMAMSASXMMAMXMSMAAAXAAMAMSMMMSSMMMXSMMAAAMMSSMXSMXAAMMSASMMAMMXX +SSSSMSSMSSMAXSAXMASAAXMAMXSMMSAAAAMXMXMSXSAAMXAAMAAXASMMSMSMXMAXASXSMMMAMMMMMMAMXASXASAMAXMMMMMMMMMAXMMSAMXMSMMXASASXMAMAMAAMMMMMXSASMSAAMMS +AAASXAAMMAMXSMXXSAMMXSXSMASAASMMSMMAMSMXAMSMSMSSSMXSMMAAAMAAMMSMAXMAXASMMSSXMSSMMAMMXMASMSXMSAMXMSSMMSAMMMMMAAXMXMAXAMXXAMSSMAMASXMXMASMMAAS +MMMMMMXMMMMMMXMXMAXSMSAASAMMMMAAAXMMSAAMMMXMAXXAMXXMASMSMSSSMAAMXMXMSMSXAAAXMAAXSXMXMMXAXAAAMSAMXAAAAMAXMAAMSSMXMMXMMSSMAXXAMXSASAMASXXXSMMS +SASAXSXSASXAAAMAMXMSAMMMMXMXMXMSSSMMSMSMAMMMMXMAMMSMAMXAAAAAMSXSAMXXAXSMMMMMMASAMASMSXAMXSAMSXSXMMSMMXSMSSSXXXAASMSASAMXXMXAMXMMSAMXSAXXMSXM +SASAXSASAMSMSSSSSMMMAMXSASXXXAXMAMAMMXXXASMSAAMXMXAAASXMMMSMMMMXAAMSSXSAMXXSXAMASXMAMXMSAXMXAAMXSAXAAXXAMAMXMMSMSAMXMASAXSMXMXAMSAMXMAMSASXM +SXMMMMAMXMXMXAXXAAXSXXXMAXAAMSSMXSSMMSMSMSAXSSMXXSXMMXMXSMXMASMSMMMXMASXMSMMMSSMMMMAMMMMMSMSMMMAMSSMMMMAMAXMAAAXMAMASAMXSXAXSSMMXSAXMSMMAMSA +SASXSMSMSMSAMMMSSMMMXMMMSMMSMMAXAAAMXMAAAMMMMMAMMMXMAXSASMXSAMXAAASAMXMAXXXMAAAAAXMMMAXAAMMXAAMXMASXAAXXMXSAMSASMMMASAMXSMMMAAASXMXMMMMMAMXS +SAMAXAAXAAAMAXAAMAAMAMAAXMAMASAMMSMMAMSMMMAAAAMAAAASXMMASAMXASXSSMSXSXSMMSMMMSMMMSAXXXSMSXMSSMSMMMXMMMSASXXXXXXAAAMXSAMAMAAXMAMXAMAXAAAXXMAM +MAMSMMMMMSMASMMMXMAMMSMSSMAMXMXXXMXSXXAMXSSSXSXSMSMSAMMMMAMSXMAXXXXAMXMXMAAMAMXSAXMSSMAAAXMAMXAAAMSMSAAAMSAMXXSSSMMASMMASMMXSAMSAMMSSSSSSMAS +SAMXAMXXAAAMMASXMMSAMXXMAXSSMMXSAXMAMXAMXMAXAMMXAMASMMAASAMXSMXMMMMAMAMAXSSMSSXMASXAAMMMMXMASXSSMXAMXAMMMXSXXXAXMAMAMXMAMMXASAXSXSMAXMAAASAM +SXSSSMSMMSSSMASMXAAMMSMSXMXAAAAMSMXMASXMAMAMSMSMAMAMASXXSAMAMXAAAASAMMSMXMXAMSAMASMSMMXMAMSAMXAAXMSMSAMXXAAMSMMXSAMXSSMXSAMASMMSASMXSMMMMMXS +SXMXMXMAMAAAMSMAMSMMAAXAXMSSMMXXAXAMXAASXMMSMASMAMXSXMMXXAMASMMMMMXAMAAMXSMSMSMMASAXAXAXXAMMSMXMXMAASAMXMXSAAAXXMAMSAMMXAMMASAAXMXMAMXXMSAMX +MASASMMSMMMMMAAAAAXMSSSMSMAXMASXSMMXMSXMXXMAMAMSXMMMMSXSSXSASAASMSMMMSMSAMXXAMXMMSASXMAXAAMXXMAMAMMMXMAXAMXXSXMXMAMMAMSSSXMAMMSSMAMMSAMXMXMS +SAMXSAAXAAXSXMSMSXSMAAAXMAXSMAMAMAMSXMAMASMMMAMSMXMAAMMMAAXAMMMAASMMXAAMASAMAMXXXMXMASASXMMXAMAMXSXMAXAMSMSAMASXMAMSAMAAMXMMXAXAMXXMXMXAXAXM +MASXSMMSMMXXAMXMXMAMMSMSMSMSMSXAMAMSASXMASAASMSMAASMMSMMMMMSXSMMSMAXMMMMMMMSAMMSMSAXMMMMAAXMMMXMAXMASMMXMAMAMAMASAMAAMMSMXMXMASMSSMMASMMSSMM +MASAMAAXMSMSMMAXAAAMXMXAAXAXAMSSXXMSAMXMASXMMXAMSMSAAMXSAXXMAXXXXXMMSXASXSXSAMXMASAXMAMMSMMSAASMXSAAXMSAMXMSMXSAMXSMXMXMMSMXSAXAAAASAMAMAMAA +MAMAXMMMMAMAASXSXSXSAXSMSMMMXMAMMMMSAMXSMSMMXSXMMMSMMSAMSSSMSMMMMAXAMSMXAMASXMAMMMSASXSAAAAXMASAAXMXMAMXSAAXAAMMSMXAAXXXAAXMXSMXMSMMASXMASMM +MSSSMSXXSASMMMMMMAXMAMXAXXMAXMAMXAAXXMMMAMMMAMMMAMXSMMXSMMXSAAASMMMXXASMXMAMMXAXAMXXXAMXXMMMSMMMMXMMMAMASASAMMSAMAMSMMSMMMXMAMMSXXAXXXASXSXS +MXAAAXAAMXXXXAAXMASXSAMXMXXAXSMMSMSSMXMMAMAMMXMMASAMXAMMAMXXMXMMAXAXSAMXSMSSSSMSSSMXMXMASXSAAAXSSMAASAMASAMXMAXMMSMAASMSMXAMXMASMSMMMSXMSMMM +XMAMMMMMXSSMSSMXMASXMAASMSMSMMAAXXMAXXASASXXSAXSAMMMMSMSAMSMSSMSMMSXMXMASXAAXXAAAAASMXMMAAMSSMMAAMSMSASMSMXXMMXMAMMSMSAAXMXSAMXMMAAMXSAMXMAX +MXXXAXMMAAAXMAMXMAXXMAXXAAXXASMMSXSAMMMSAMAAMAMMMMSAAAMXMMMAAAMSXMAAMXMASMMSMMMMSMMMAASXMXMXMASMMMAXSXMXMASMSXMSASAXAMMMSSMMXMSASXSSMSAMAXSS +MSMMMSAMMSSMXAXMSSMMSXXMSMXSMMAAAMMMMAXMXSMMMMSAMASMSMMXSAMMMSMMASXSMAMSXMMMXMAXMAAXXMXAXASXSAMXXSXXMAMXMMMAAAAMAMXMAMXXAAAMAXXXMAXAXSMMAMXA +MAXAAXXXAMAMMSMXAMAXSAXMASXMXSMMMSAAMSXAAXAXAAAAMAXXXXAAXXMXMAXSMMAXXXMAMXAXXMXSSSMSMSXSMMXAMXMMMXMSMMMAMAMMMSMMAMASXMMMSSMMMSSSSSSMMXAMMXSA +SMSXSSMMSSSMAMXMAMSMMXMMASXSAXMMXSMSAMMMASMMMSXXMASMSMMSSSXMSMXXMMMMMMSSXXMSSXAMAMASAAAXAXMMMSMAXMAAAASMSAXAMAMSMSASAMXMAMXAXAAXAXAXXXXMSASX +MXMXMAMMAAMMXMAMAMXASMSMAMAMMSAXAMXMAXXXMAMMAXMMMXMAAAXMAAXXAMSMSAAAXMAMXASAMMSMAMMMXMMXMMAAAASXMSSMSMSASASMMSMAAMMSAMXMASXSMMSMMSSMMSMAMASM +AAMAXAMMMMMAMXMMAXSAMAAMAMXMXMXMASAMAMXMMAAMASXSAMMSMMMMMXMMAXSASXSXSMASXMMASAXMXMAMMSSSXMXMMMSXAAMAAAMAMAAAAASXMMMSMMSMASAMAMXAXAMSAAMAMMMM +SMSMSSSSSSMMXASXMMSAMXMSMSMMSMSMMMXXAXASXSSMAMMMSMAAAXXSXMMSSMMXMAXAAMAXXXSAMXSMMSMXAAAMMSASXAMMMASMMMMAMXMMSMMMASXMMAAMXMXMMMSSMMMMMXSAXSAS +XXAXMAAAMMASMMSAAASAMXXAXAAMAMAAXASXMSXSAAXMXSMAAMMSMMMMMSAAMMMSMAMSMMMSSXMAXXXMAASMMMSMASASAMXMMMAMAXSXSAAXMASXMMAXMXSSXMMSAAXXAMASAMMMSMAS +MSMSMMMMMSAMAAMMMMSAMXMAXXMMASMSMMMAAAMMMMMSAAMSSMXAXAXAAMMMSAAMMXMAXMSAMXMMXSSXMASMAMAXXMAMMXAXXMASXMXASMSMSAMXASMMSAMXAXASMSMSMMAMASMMMMMM +XAXAMXSXMMXSMMXSXMSAMXSMMSSSMSAAMXMSMMMSAMXMASXXAXSAXSSMXXAMSMSSSMSMSXMASXMAAMAAXMMMAXMSSMAMASMSXSASAMMMMMXMMASMMMSAMXMSAMXSAXXXAMXMAMAMAAAS +SSSMSAMXMXAXAXMMAAMAMMAMXAAAMMAMMSAAAXAXAXASXMMSMXMSMMAXAMMXSXMAAASXSXMASAMMXSASMSXSSXSAMMAXMMMXMMASXSAMAMXAMSMXAAMSSXMMMMMMAMMMMMSMMSSSXSSS +XXAMMMXSMAXXAMXMAMXSMMMMMMSMMSXSAXSMMMMSSMMSASXAXXAAXXSMMXSAMXMMMMMASAMASAXMXMAXAXAAAXMASXMSXASAMMMMAXXSAMSSMMASMMMAMMAXAAAMMMMMAAMAXXXMAXAM +MSMMXSASXASAMXSAAXAMAXXSAAAXXAAMMXMSAMXAMAASAMMMMMSMSAAAAAMMMASAMXMXMAMAXXMSAMSMMMMMMMMXMASAXSSXXAAMAMAMMMMAAMAMXAMAMXMSXSMSAAASMMSSMMMMXMAS +XAASAMASMASMSAASMMSSXMASMSSXMMSMSSMASAMXSSMMAMMXSXAAMMXMMXMXSXSASASMSAMSMMMMASAAMMXAMXMXSSMSSXMASXSSMAXXMASMMMMMSMSXSAXMXXASMSMSAAAAMAASXMAM +SSSMSMAMXAMXXXMASAMMMMMXAXAMSAMXAAAAMSAMXAASXSAAAXMXMASXXAXAMMSXMXMAMXSXASAMSMMAMXSSMAMAXMAXMASASMAAMXMMSMSXMAAMXXSAMXXSAMXMXAMSMMMSMSXXAXAS +XXMAMMSSMMXMMSXMMMMAAAMMXMMMMASMMSMSSXMASMMMAXMXMMSXSXAMMSMASAMXSAMXMXMXXMASXAXMMMAASAMASMSMSXMASMMXSASAAXMASMSXSAMXSAMMMMASXMXXXSAXXXMSSMAA +SAMXMMAMASXSAAMXAAXMMMSSXXMXSSMAXXAXXXAXMAAMMMMAXAMAMXMAMAAAMASXSASXMMMSMSMMMSMMAAMASXSAXAMMXXMXMXAAMXSSSMSAMXAASASAMASXXMAMXSXMMXAXXXXAMMSM +MAMASMMSAMMMSSSSSSSSSMAMMMMAXASXMMMMMSMSMSSSMAMMMSMAMAMMSMSXSASMSMMAAAAAAXASAMASMSXMXMAMMSMMMMSXSMMXSAMAMXMASMMMMAMASAMASAMXAMAAXMXMSSMMSAMX +SAMASAXMXSMAAMMXAAAASMAMAAMXSAMXAAMAAAXMAAAAMXSAAXSASMSAAMAAMXMASASMXMASXSMMASMMXMAMSAMXXMAMSASAMXAAMMMSMMSXMASAMXMXMASAAAAMASXSXAAAAAAAMASA +SXSXSXMASMMMXSAMMMMMMSASXSXMAXMXSXSMSSSMMMSMMMSMXMAMXXMMSSMXMXMSMXAAXMAMAXXSMMMMXSSMMAXXSSXMASMXMASASXXMAXSAMXMASMXXSXMMSSMSXAMMASMSSMMMSSMA diff --git a/src/bin/04.rs b/src/bin/04.rs new file mode 100644 index 0000000..d08f289 --- /dev/null +++ b/src/bin/04.rs @@ -0,0 +1,77 @@ +use itertools::Itertools; + +fn count_xmas(i: impl Iterator>) -> usize { + i.flat_map(|i| { + i.tuple_windows().filter(|(a, b, c, d)| { + (*a == b'X' && *b == b'M' && *c == b'A' && *d == b'S') + || (*a == b'S' && *b == b'A' && *c == b'M' && *d == b'X') + }) + }) + .count() +} + +fn main() { + let text = std::fs::read_to_string("input/04-1.in").unwrap(); + + let data = text.lines().map(|l| l.as_bytes()).collect::>(); + + let width = data[0].len(); + let height = data.len(); + + let horizontal = + count_xmas((0..height).map(|y| (0..width).map(move |x| (x, y)).map(|(x, y)| data[y][x]))); + let vertical = + count_xmas((0..width).map(|x| (0..height).map(move |y| (x, y)).map(|(x, y)| data[y][x]))); + + let mut diagonal1 = count_xmas((0..width).map(|x| { + (0..height) + .map(move |y| (x + y, y)) + .filter_map(|(x, y)| data.get(y).and_then(|s| s.get(x)).copied()) + })); + diagonal1 += count_xmas((1..height).map(|y| { + (0..width) + .map(move |x| (x, y + x)) + .filter_map(|(x, y)| data.get(y).and_then(|s| s.get(x)).copied()) + })); + + let mut diagonal2 = count_xmas((0..width).map(|x| { + (0..height) + .filter(move |&y| x >= y) + .map(move |y| (x - y, y)) + .filter_map(|(x, y)| data.get(y).and_then(|s| s.get(x)).copied()) + })); + diagonal2 += count_xmas((1..height).map(|y| { + (0..width) + .map(move |x| (width - 1 - x, y + x)) + .filter_map(|(x, y)| data.get(y).and_then(|s| s.get(x)).copied()) + })); + + println!("{}", horizontal + vertical + diagonal1 + diagonal2); + + let mut count = 0; + for x in 0..(width - 2) { + for y in 0..(height - 2) { + if (data[y + 1][x + 1] == b'A') + && ((data[y][x] == b'M' + && data[y][x + 2] == b'M' + && data[y + 2][x] == b'S' + && data[y + 2][x + 2] == b'S') + || (data[y][x] == b'M' + && data[y][x + 2] == b'S' + && data[y + 2][x] == b'M' + && data[y + 2][x + 2] == b'S') + || (data[y][x] == b'S' + && data[y][x + 2] == b'M' + && data[y + 2][x] == b'S' + && data[y + 2][x + 2] == b'M') + || (data[y][x] == b'S' + && data[y][x + 2] == b'S' + && data[y + 2][x] == b'M' + && data[y + 2][x + 2] == b'M')) + { + count += 1; + } + } + } + println!("{}", count); +}