diff --git a/Cargo.lock b/Cargo.lock index 91064c2..5428e34 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9,6 +9,7 @@ dependencies = [ "day01", "day02", "day03", + "day04", ] [[package]] @@ -22,3 +23,7 @@ version = "0.1.0" [[package]] name = "day03" version = "0.1.0" + +[[package]] +name = "day04" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 7abcf16..cf4b2f1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,4 +9,5 @@ opt-level = 2 [dependencies] day01 = {path = "src/day01"} day02 = {path = "src/day02"} -day03 = {path = "src/day03"} \ No newline at end of file +day03 = {path = "src/day03"} +day04 = {path = "src/day04"} diff --git a/src/day04/Cargo.lock b/src/day04/Cargo.lock new file mode 100644 index 0000000..b8f9a18 --- /dev/null +++ b/src/day04/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "day04" +version = "0.1.0" diff --git a/src/day04/Cargo.toml b/src/day04/Cargo.toml new file mode 100644 index 0000000..5c2674d --- /dev/null +++ b/src/day04/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day04" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/src/day04/input04.txt b/src/day04/input04.txt new file mode 100644 index 0000000..d8ec064 --- /dev/null +++ b/src/day04/input04.txt @@ -0,0 +1,140 @@ +XAXAMXMXXSAMSMSMMMXMAXSAMXSMMSSSMXSSMSMMMXXMSMXAMXAXASAMXMASAXMAMMXSAMXMXMMMSXMMMSAMXSAMXSXMSMSSXAXXMASAMAMSASASXSSSXSXSXMAXSAMXMSXXXXAXMXSS +MSAXMASMAMXMAAAASAMXMAMXMAXAMXMASAAAMAMXXMMMMXMSMXMMMXMMAMXMMMMAXSAMXSMSASMAMAMAXMASXXXMASAAXAAMMMMMXAMXMAXMASXSXMASAMAMMMXMAMXAMXSASMMXSAMX +AXAXMMXMASASMSSSMASAMASXMMSSMXSAMMSMSASMMMAAAXSAMAMASMMSSSXAASMMMXMAMAASAXMASXMASAMAXXXMASMMMMMXAASXMSAMSSSMAMAXXMXMXMAMASMSSSSMSASMSASAMAXS +SMSMSSXSAXXXXMXAXAMAMAXAAXAXXXXAXMAAMXMAAASMSXSASAMXSAMAMXMMASASAMSSSMXMAMMMSMXXXMSMMMMMMSXXXAAMMASAAXMMAAXMAMMMSMMMXXXXXXAAAAAAMXSXSAMASMSM +MAAAXMXMMMSXMSSMMXSAMSSSMMMSMAMMMSMMMSSSMMXAXMSXSAMSMXMMSSXMAMMXMXAAMXMAMSAAXMASXAAXAAAAMXMASMSSMAMMMMAMMSMSAXAAAAAMXSMMSMMMMMMMMXXAMSMXAXAX +SSMSMMAXMASAMMAXAXMAMAAAXAXAMAASAMXSAMMAMMMMMMMAMAMAASMMAMXMAXXMXMMSMAMAAMMSXSAMMSMSSMSMSMSMXAAXMXMAMXAMXMAMMSMSXSMSASAAXAASAXAASAMXMMMMXSMS +XAXXASXSMMMAMSXMMMSXSMSMSXSXSMXMASXMMSMMAAAAAAMAMXSMMAXMASMSMSMAXAXXXMXMSXAMMMASAMAXMAMXSAAMMMMMSASXXSASASXSMSMXMAMMASMMMSASASMSMAMAMXXAXMXM +SMMSMMMAMAXMMMMMSAMAAXMASAMXMXMMAMXMSAMXSSSMSSSSSMMXMSMSASAAAAMSAMXMAXXSXMXMAMXMASAMXAXAMSMXASXXXAXAAXMMMMMAASAMXXSMMMASAMAMXMMMMAMAXSMSXSAS +MXAXAASAMXMSAMAAMASAMAMAMAMAXAXMXSSMSASXMAMAAXAXXAAXSAAMASXMSSMXAXASAMXMXXMSSXMMMMMMXSMMMXSMSAMXSSMMMSXMAAMMMMXMXSXAASMMMSAMXAXMSSSMXXAXAXXM +MMSSSMMXSAMSASMXSMXXXMMXSMMMSMSXSAMAXMAMMAMMMMMMSSMXMMSMAMAMXMASXMMMAXSAMAMAMASAXAAMMXMSAMXXMAAMAMAXXAASXXSSMAMMSMSSMMMXAMXMXXAAAAAXAMMMMMSM +XAAAMMSASMMSXMAAXMAAXXMASAAAMXAXMXMXMMMSMMMAAAAXXMASXMXMASAMXMMMAXXMAMXAMMMASAMASXMSMAMMASXMSSXMASXMMMXMSAAAXMAMXAXXSSSMMSMMMMXMMSMMSSMAMAXM +MMSSMAMASAAMMSMMAMMMMXMXMSMSSMSMMMMSSMAAAASMSSSMAMAAASAMXSXSXXXMSXSMSMXXMAMMSMXMAMAAXXSSMMAAXAXMAXMXXXMASMSMMMSSMSMAAMAMXAAAAMASAMAMAXXAMMSM +XAAAMXSAMMMSAXAMMMSASASAAAMAXAAAAASAAMSSSMSAMAMXAMMSMMAXASXMMSSMMAMAXXMSSMSXMXMXAMXMMMMMAMMSMMSMXXMXXMMAMXMMSMAAMMMXMSSMMXSSMSASASMMMSSXSXAM +MMSSMMMMXSAMMSMMSMXASAXMXMSSMMMSSSMSSMAAXXMMMAMSXSAAAXMMMSASAAAAMSMAMAXMAXSAMXSSXSAMAAAMAMSAMXAASMMSAAMSMXXAAMXMMSMXMAMAMXAAXMASXMXSXAXSMMMS +MAMXAMSAAMASAXMASAMXMMMSXMXMAXAXMAXAMMSSMXXASAXXMMMSSMXAXXAMMSSMXMASXSSSMMSAMAXAASXSSSSSMSSXSSMSMAASXMMXAAMSMSAXSXASMMSAMXMSMMAXASAXMMSAXMSS +MASXMMMMMSAMXMMXSXMXAXAMAMXSSMXSSSMMSAMAMMSAXXXAMAMXMASMSMSMMAAXXMXMAXAMXASMMSMMMMMXAAXXMAMMMXXMMMMMAXAMMMMMAMASXMMMXXSASXXAAMSMMMSAMXSXXSAX +XAXAMXSXAMMSSMSMSMXSMMXSAMXAAAMXAAAAMAXSAASXMSSSMSMAXXMAAAAXMSSMMMAMXMAMSAMXAXASXAAMMMMXMAXASMMSAAMSMMXSMAAXSXSXXAMSXMMXXMSMSMXAXXXXXAMXSMMS +MMSMMSAMXXSAMXSASAMXXAAXMSMMXMAMSMMMMXMXMMMAXAAXAAMMSAMSMXMMMAMAAMASAASMAAMMMSAMSMMAMXSMSXSSXMASMMMAMXMXMMMSAMXAMSAXAXSASXSAXASMMMMMMAMXXAXM +XAAAXXASMMMXSXMAMSAXMMXSAXXMXSXMAXXAXSSXSASXMMXMMMMXAMMXMXSXMAMMXXMSXSAASAMXAMAMAXMMSAAXAASMSMXSXMXXSAAMSAXAAASAMMXSAMXXSAMAMAMXAAXAXAXMXAMX +MXMSSSMMAAAMMAMXMMSXAAAMXMAXAAASXSMASMAMMASAAAASMMSAMMSSMAXASMSXSAMMXMAXMAMMXSAMAMSAMMMMMSMAXMAMXXXXSMSAMASXMMMAXXAMMSMXXXMXMXMXSSMMSMSAASXX +MXMMMAAMSMSXSAMAMAMMMMSMASAMSSMMAXASMMSMMMMMMSMSAASMXAXAMSSXMMAAXAMMAXXSSXMSMSXSXXMASMXSXMMSMSMMMSAXMAXAAAMXMXMAMXMAMAMMAMXXMMSAMAAMAMXMMAAM +AASASXMMAAXAXXSXXASMMAXXAMAMXAXMXMXMAAAXXAAXMAMXMMMXMASXSMMMSMMSSMMSSSMAMAMXAMAMXMSAMAAMAXAMAAMAAAMMMSSMMXXXMSMMXSXSMMAMSASMSAMXMSMSASAMXSMA +SMSASMMSMSMMMMSMSMSAMXMMXMMXSXMXMSASMMSSSSSMSASMMAXAAXAMMAAAMXAXAMXAMAMXMXMMMMAMAXMAMMXMAMMMSMSMMXXAAMAMXSSXAAAXXMMXAXAXMASXMXSAMAMMAMMSAXXS +MXMMMAXAMXAXXAMXAASMMXSSMMSAMMSXAMAXMXXAAAMASXMASMSASXAXSXMSMMMSXMMSSSMXSAXXMSXMXXMAMMXXXXMAXXXAMASMXSAMAMXMSXSMAXASMMXSMXMASXSASAMMSMMMASXM +XAMASXMXXSSMMXASMMMXSAAAAAMAMAXMSMAMXMMMMMMAMMSXMXAAXMMMSAMAASXMXSXAAAAASMMSMSAMSXSASASMSAMASXSXMXMAXSMMAXXAMAXMMMMSXSAMXSSSMAXMMASAAASMAMAM +SXSAMSMMXMMASXAXXXAAMMMMMMSMMAMMAMAMAASAMXMSSMMMMMMSMMSASAMMXSAMXAMMXMMMXXXXAMAMAASAMAAAXXMASAMASXMSMSASMSSMMAMAMMXSMMASAMXAMXMASAMMSMMMSMMM +MXMMMAXMAXMAMMSMMMMMXSXSXMAAMXXSASASXMMSSXXAXMAAASAMAAAXXXMXASAMAMAMSSXMSXMMMMMMXMMXMMMSMXMXMASAMASAAMASAAXXMASAMMAMASXMMSSMMAAMMASAMXSXMASM +XXASMMSXMXMMSAMASXXAASXMASMSMAAMAMXMXAXAXMMMSSXMXMASMMSXXAMMMSAMAXSAAAXMAMSAMAAMXXXXXAAMMSMXMAMASMMMSMMMMAMXSXMASMASMMMAMXMXSXSXXAMAXAMSSSMA +MMXXAMMMMAXMMASAMXSMMSASAMAAMXMMSMMMMSMXMAAAAMASASAMXMAXSASXXMASMSMMMMMMSXMAMXSSSSSSSMXXAAAAMASXAMAAAAXMMSMMAASAMMAMXMSSMAMAXAMXMSMSMSMAMAMM +XAMSSMAASMSSMAMXMAMAMSMMMXSXMXXAXASAAMXSSSMSMSASAXAXXMAMXAMMMXAMMXXAXSSXMMSXMAXAAAAAAAAMSMSMSAMXXXMMSAMXAXASXXMSSXMMXXAAAMMSMSSXXAAAAAMAXAMS +XMXAAMXMAAAXXXAMSXSAMXMASAMAXAMXSAMMSMAXAXAMAXMMXMSMMMSSMAMASMSSMMXSAMXAXXAAMXSMMMMMMMSXXAXMAMXMMMMAMMMMMSAMAXMXMASXMMSSMXAASMAASMSMSMXXSMMA +MSMSSMMAMMMMSMMMAAXAMXSMSASAMXSAMMMMAMMMMMMMMSMAAMASXAAXMASXSXXAASXMAMSSMMXSMAAXMSAMXXXAMXMASXASASMASXSAMMMMXXMASAMXMAXAMMMSAMXMXAAMAMMMAMMM +AAAXMASXXMMAAAAMMSMASAMXMAMAMAAXMAAMMSAAMAXAAAMXMXAMMMSXMMSMMMSMMMAXSMMAXMAMMMMMAMXMMSMSMSAMXSMSASMMMXSASXSMMASXSAAAMXXAMAXXMAXXXSMSMXAMXSAX +SMSMXMMMAMMSSSMMAAXAMXSASXMXAMMSSSSSXMMMSMSMXXXAMMSMSMMAXAMAAAMASMMMXASAMSASAMXAMAAXAAAMXMAAAMXMXMASAMSAMXMAXXAMSXMMSSSSMMSSXAXSXMXSASXSASMS +AAAAASAMAMXXAAXSSMSXSAXAXXAXSAAAMAMAMXAMAAMAXSAXMAXAXASAMSSSMXSAMAMAMMMMXMASMMSSMSMSSMSMASMMSSXMAXXMAXMASXMAMMAMXMSAAMMAAXAXXMASXSAMMAAMXSXM +MSMSMSASMSSSSMMAAXMASMMXMXXAMMMMSAMASMMSMSMAMMASAMMAMAMMMAAXMMMASXMASXASAMXMAASAMAMAXAAMMMAAMXMSSSMSSMSMMXMASXMMAAMMMSSMSMSSXSASAMAMXSXMASAS +XXAMXMAMAAAAASAAAMMAMXAMSMSMSXMAXAXAXAXMXXMASAAMAMAXMAAMMMSMSXSAMAXMAXXMASMSMMXAMXMASMSMXSMMMAMAAAAXAAAXMASASAASMMMXSAMXMAMAAMASMSMMAXAMXSAM +XMASAMXMMMMMMASXXXXAXMMMAAAMSAMSXMMSSMMSAMXSMMSSXMXXMXSMMMMASAMXSXMSMSXSAMASMSMSMSMMSAXMMASAAXMMSMMMMSMSAMMAXXMMAAAMMMXAMAMMMMAMMAMXSSMMAMXM +SAMMMXMMAMXSMMXMMMXSSSSSMSMSSMMMAMAAAAAXMXMMAAAMMAMXSAXAAAMMMAMMMMMAAAAMXMASXSAMXAMSMMMMMASXSXMXXAAAMAMMMXSSSMSMSMMSAAMXSMMXXMXSSMXMXAAMMSMS +SASMSMSSSSMXAXXAMSMAAAAAMXMAMXASAMXXSMMSMAASMMSMMMSXMASXSMSSMSMXAAXMMMSMXMASAMXMMAMAAXXAMMMMXAXMAMXXMAMAMMXAAAXAAAXSMSXXAXXMMSXAXAASXSMMXSAA +SAMMAAXAMAASMMXSAAXMMMMMSAMASMMSXMMXXXMAXAMMXXMAXMSAMXMAXAAAAAXMSXSXSAAXSSMMMMAXAXXXSMSSSMAMSSMMAASMSXSASXMXMMMSMSMXMAMSAMXMASMMMSMMAAXMXMSM +MMMMMSMXMMXAAMAMSMSXAXXXXASAXAXMASMAMSAMXMSASXSAMMXXMAMXMSMMMMMXXAMAMXSSMAMAAXXSSSSMAAXMAXMMAAAMMSAAXAXMSAMXSAAXAXXXMAMMXSMMMSASAMMMSMMSAMXX +XAAAMXMASXSSXMAXMXSXSSMSSXMXMSASMXMAXXXXAASAMXMXXSAMSXSXMXXMAXMASAMXMAMAXAMXMSAAAAASXSXSAMMMSSMMXXMMMXMSMMSASMSSSMMMMXSXASMAMSAMMMAAAAASXXXA +SMSXSAMASXMAMSMXMAMAMXAAAXMAXMAMXMSMSMSMSMMAMXMAMXAXAAAMSAMXSMMXSAMXMXSAMXSAAMMMMSMMSAAMMSAAMAMXSAMXSMMAAMMAMAAMAMXAXSXMAMMAMMAMMXMMMMMSMSMS +AAAASAMASMMAAAXMMSMMMSMMSMSSSXMSXMASAAXAAXSXMAMAMSMMMXMAAMMSMAXASAMXMXSAMAMMXMASXMXXMMMMMSMMXAMXSAMASASXSMMMMSMSASXMSXSASMSMSSMMAAXSAMSMAAAM +MMMMMXMMSASMXSXSAAAXAAAXXAXAMAMSASMSMSMSMMMASXSMXMAAXXSXMAXAMXMASXSAMMMAMSSXSAMXAMSMMMXXASMXSAMXSXSASMMAMXSXXMASASXMXMASXAAXXAAMSXMAMSAMMMSM +MXSAMXXXSAMAAMAMSSSMXMXMMAMAMSMSAMXXXXAXMAMMSAMXAMSMSAMAXSSMSASAMXSAMSSXMXAXMASMAMMAMXMMASAAMAMXMAMMSMMSMAASXMAMSMAXSAMXMSMSMSXMASAMXAMXXSAX +MASAMMXXMMMMMMAMAXXXMXMSMMSAAMMMSMXSMMSXSASXMMMSAXAXXXSAMMAXSASASASAMMAMSXMMSSMMAXSMMAXMAMMMXAMAMAMAMAMAMXSAMMSMXMSMSAXXAASMAMMMAMXXXMXMSMAM +MASAAMAMXMAAAMXMXSMAAMAMAASMSXXXXMAXXAAMSASMXSASMSXXAMXMXMMMMAMAMASMMMAMAAXAXAAMMXAXSAXMASMSSMSASASMSASASXXMAAMXSAMASAMXSSSMAMAMSXSXSXASAMAM +MASXSAMXASXXMXAXXMAAMSAXMMMMAASAMMXXMMXXMMMXXMAXMAMXSMMSAMAAMXMASMMAXXAMMMMSSMMMSXSAMXSXAMAAAMSXSASXSMSXSMMXMMSAMAMAMXMXXAXXAXSXMASAAXMMAMSS +MASAMXXMASMSMSMSMMXMMSASMMXMSXMAXASMMSXASMAMXMSMMMSAMAASASXSSXMXMASXMSXSXMAMMMAMXAAXSAMMMMMMMMSXMMSASASMMXAXXMMASAMXAMMMMMMMSXXAMAMASMSSSMAM +AASAMSMSASXAAAXAXSASXMAMAASMMASXMXSAASMMMSAAAXAAMAMAMSASMMMXXMXMSAMXAAMAAMMSMSMMMMMSMMXAAAAXMASXSAMXMAMAAASMSAMXMXSMASAXAXAXMASMMXSMAAXAMMAM +MXMAMAMMASMMSMSMMSASXMAMSMMASAMMMASMMMASASXXXMSMMASMMAAXASXXAMAAMMSAMSMMSSXMAAAXSXMAAASXSSSSMASAMXSXMAMSAMMAMAMSMXXMASMSXMSSMAMXSXMMMMMMMSAS +MSMMMASMMMMXAAMXAMMMXSXMAAMAMAMAMAXAASAMASAMSXMMSXMASMSMMMMMMSASMMSAMXAAAMAMSMSMMASMMMXAAAAXMXMXSXMXMSXMASMSMAMAAMXMAMMXXAMXMSMSXSAXMAAAMSAS +AAAAXXXAMAMSMSMMMSMAMXXSSSMASAMSMMSSMSXSMMAMXAXXXXSAMAAAXAAXMAMMAASMMMMMSSMMAAAASAMXAMMMMMMMSXMAMAMXSAAXMAMXSXSMMAMAMXSASXSMSASXASXMSMSMMMAM +SSSMSSSMMAMAXXXAXAMASMMMAXMASAXMAXAAMMAMASXMMMMXAXMXMXMSSSXSAXSSMMSAAAMXMXXSSMMXMXMXASMSXXSAMXMAMAMXXSSMXXMXMXSMSMSSMAMASAAXSMMMXMXMAAXMXMSM +AXAXAMAMSMSAMXSSSMSAMAMMSMMXSMMMXMAMAMASXMAXXXAMSMSXSAMXAXASAMXXAAXMMMSAMSMMAMSXMMMSAAAXMAMASMSASXSSMMXMXASMMASMSAAXMAMAMMMMSASAMXMMMSMAXAMM +MMMMMSMMAAAXSXMAAMMXSMMXMASAMMXXAMSSXSASXMAXMMXMMAMAAMSMMMMMXMMSMMXSAXXAMAAMAMSAMAAMXMSMSASXMAMAMAAMASAMSXMAMXSAXMMMSASMSSMAMAMAMSSMXMXMMMMM +XASAMAMMMSMXMAMMMMAXMMSASMMASASAMAMMXSXMAMXXSASMMAMXMMXAASXMMSAXXMAMAXSAMSSMSMSAMMSXXMAASAMAMXMAMMMSSMAMMXSSMMMXMXXXMAMAAAAAMXMMMAAMASAXMMAX +SMSASASAXMASXXMASMMSMASASXSXMASMMAASAMASMMMAMASMMMXXXXMMMXAAXMASAMASMMAXMMMAXAXXMXMASMMXMSSSMASXSXAXXMMSAMXXMASXMSMMMSMMMMMXSXAAMSXMAMAMMSMS +MMSMMASAMAMSAMXMXAAAMAMXMXSSMAMXSSSMASXSAAXXMXMXMSSSMXSASXSMMXAMASASAMXMSXSMMXMAMXMAMAMXMAMAAASXSMMSXSSMMAMSMXAMXAAAAAXXMXMAMXSMMMXMAXSXMAAM +SASXMXMMMSSSXSMXMMMMMMSMXAMAMSMXMXAMMMAXXMMAMMSAMAAAXMXAMAXXXMMXXMASMMAMXAXMAMMAMAMAXAMMMMMSMMSASAAXXXAAXSSMSMSASXSMSMSMSAMXSAMMASMSMSAASMMM +MASMSSMASXAMAAMSXMAXAAAAMMSAMXMAMSAMXMMSSMMAXAMAMMSMMSMSMSMXSAMASMMMASXSMMMMAXSASXSSXMMXAAAAAXXAXAMSMSSMMXMAAXAASAMAXASXSASXMASMMSAAXMXMMAMX +MAMXMASMMAAMMMASASXSMSXSXXSXSXSAXSASXAXXAASMMMMSMMMMASAXAXAASAMASAMXAMAAXXAXAMMAMXAMASMSSSSSSMMSMAMAAMAXMAMMMSMMMAMAMAMXSAMXMAMAXMMMMSSXSAMX +MASXSAMXMSMSXXMSAMAAXMAMXMMAMXSMMSAMMMMMMMMMASMXMAMXAXMMMMMMMAMAMAMMSMSMMSMSMXMAMXMMXMAMAMAMAAAMXXSMSSXMSASMMXMMXXMMMMMMMMMXSASMMXAXAAMAMMXX +MAMXMASXMXAXXMXMAMSMMMXMASMMMAMSAMXMXXAXXAXSAMXSMSXMSMXAXAXSSMMMMSMMAAXAAAMAASMMMAXMAMXMMMMSSSMMMXSXAXAASASAXASMMMSXMXMAAASAXASMAMXMMSMSMSMX +SASXMASMMAMMMMMSXMAMXMAMXXAAMAXAMXMMMSMSXMXMMSAMXXAMXAXSXSXMAXXMAMASMSSMSXSMSMAASXSAXSXMAXXAXAAXMASMMSMMMXMMSXSASAMXMASMSMMAMSMMXSXAMMAMAAXS +SASMMASASASAAAAAASMSSMMSSSSMMSSMMXSAAAXMAMXMAMASAXSMMMMXAMXSAMXMMXXMMAMXMMAMAMSMMAXMAMXSMSMMSMMMMASAMAXXSMSXAMMMMXSXSXSXXXMXMMASAAXMMMAMSXXA +MXMASMXXSASXSMMSMXAAAAAAXMAMXMAXAAXMSMSMMMAMXXAMMXAAMXAMAAXMASAAASMSMXSASMMMSMMXMMMXMMASXMAAMASAMASMSASMAAMXMASXSAMXSXMAMSAMXMAMMSMXAMXXMMMM +MASAMAXMMMMXMXXMMMMMSMMSSXSAMMAMXSMXMXXASXSMSMMMMASMMMXSMMSMAMXMMSAAMAMASXXAAXXAXXAXXMAMAXSASXMAMASXMASAMXMXXMAMSAMAMAMAMSASMMAMXAMSSSMXAAAX +MAMAMXMMAXSAMMXMXAMAMAAAAAMASMMMAMXMASMAAAAASXSAXXAAXXAXMMAMMSXSAMXMMAMMMAMSSSSMSMSAMMMSXMXAXMMMMMSMSMSAXXMMMXMXMAMASAMXXSAMXSMSSMMXMAMSSMSS +MASAMXASAMSAMAAMSMSASMMMXMMAMAAMAXASAXMAMXMMMASASMSMMMMSSSSSMXAMSSXXSXMAXXMAXMXXAXXAXAASAMXSXMAXMAMXSASAMXMASMSMSAMXSXXSAMAMAXSAMXMAXAMAXAAX +SASASAAXAMSAMSSMAXMASXSSMMMXSSMXAMMMXSASXSXMMAMMMMAMXMXAAXMAMMMMASAMXMSSSXMXSMSMMMSAMMMXAMAMMSXSAMXAMMMMSMSAMSAXMMXMMXMMMXSMXSMXXAMXMSMMMMMM +MASASMSSSMMAAAAXXSMAMXMASXAAXAMMSSMASMAMSAAXMSSXMSSSSXMMSMMAMAMMXSXSAXXMAXXXMAAAXASASXMMAMXSAXAMAMMMSASXAXMASMXMAMMSSXXAXAXMXMASXSASMXAXMAXS +MMMAXXAAAXXMMMMMMXMMXXSSMMMMSAMAXAXXMMAMSSSMXMAXAAAAXXMAAMSSSMSSXMASASXSASXAMSMSMXSAMAMSSSMSXMMMAMXASXSMMSSMMXMASMAMAMSMMMXSAMMMAMXSASXMMSAA +SXMXMMMMMMXSSSSXSMMMMMXXAXXASAMMSXMASXMMMAMASASMMMMMMXMASMXMAAAXAMXMAXAXAMMXMAAAMAMAMXMAAAASMXMASXSMMAMAAAAAAXAAMMSMAMAASMAMMSMMXMAXMASAAMXX +MAMMMXSXXASXAAXAMSAAASASXMMASAMAMAMMSAMSMAMMSAMXMSAMXAMAXMAAMMMSXMAMSMMMSMXSMXMMMMMAMSMMSMMMXAMXMAMXMASMMSSMMASXXAXMASXSMMMSXMASMMXMXAXMXSSS +SAMASAMXXMSMMMMMMAMMMMASXXXMSMMAMXMXSAMXMAMAMAMAXXAXSXMMXSAMXSXSMSSSXSXAMAMASXMMXMMMXSXXMAMXSMSMMMMSMMMAXXMXSMMMMSAMXSMAXXSAMMASAMXMMMXSMSAA +MASXSASMSXMAAAXSMSXSXMXMMMMASASASXMMSXMASXMXSMMSSMSMSMASAMASXMAMMAMMAMMSSMXAAXAAAMXXAMXMSMSASMSASMAAMSSSMSMASAMXXXXMAMMAMXXMSMMSMMMXAASMXMMM +SMMMSXMAASXSMSXMAMAASMAMAXMMSXMMXAAAXAMXASAMXAAMAMAAMMAMASAMAMMMMASMAMMMAMMXSSMMMSAASXMMAAMASASAMMMSSMAAAXMASAMMMMMMASMSSMMXSAASXAMSSMXMASXX +AAAAMAMAMMXMXXAMAMSAASXSSMSXMXSMSSMMSMXXMASMSMMXAMMSMMSSMMASXMSASMMXASASAMMMMAXAXMAMMAMMMSMMMMMMMMAMXXSMSMMMSMXAAAAMMSAAAMSASMMMSAXMMXAXAMXM +MSMSSMMAXXXMAMAMXMAXAXXMAXSAMXXAAXXMAMXMXMXXAXMSSXXXXAMAASXMAAMASAMSXSAMMASASMMSSSMSMXMAAMAMMXMXSSSMSMXMAXXAXASXSSSSMMMSMSMXSXXAMXMAMSSMMSAM +XXXAAXXMSSMMASAMMSMSMMSMSMSAMAMSMMMSASAMXSMSMSMAMMMSMSSMMMSMMSMXMAMMASXMSAMMMAXAXXMAMAXMXMAMXSXAAXAAXAASAMXMMAMMMMXAXMAMMAXMMMSMMAMXMAMAASAS +AMMSMMXMAAAMXXXXAMXAAXMAXAXAMXXAASASASMXAMXAXXMASAMXAMMXSXXXAAMXSAMMAMAXMAXSXSMAXXSSSMSMSMAMAXMMSSMMMMXXMASXMAMASAMXXMAMSAMMAXAAMMXXMASMMSAM +MXAMXMAMAXMMSMSMSSSSMMMSMSSSSSSSSMASAMAMSXMXAMSAXASMXMAAMAMMSMSASASMSSXMMSMAAMXSAMXAAAAAAMAMAXXAMMXASMMSMMXMMASXSXMASMAXMAXSASXSMSXXMAXXAMAM +XMASASXSSSXXAAXAXAMXAXMXAMXXAAMXMMAMAMXMXASXSMASMSMXMMMMMASAMSMMSAMMAMMXAXMMMMAXXAMXMMMMMSAXXASXMXMAMXAAAMMMSAXAMMXMMMSXSAMXAXXMASAXMMSMMSMM +MSMSAMAXMAXSMMMMMAMMMSXMSMMMMMMAXMXSMMSSMAMAXAAMXAXAXSSSSXSASMMMMXMMSSSMAXXAMSMSMSSMSXXXASMXSXMAXSAMMMSSSMAXMSMAXSAMAAXXMASMMSAMXMAXSXAAMAAA +XAAMXMXMMSMXASAMXMMMAMXMAAAXXASXXAMXAAAAMXMAMMSXSMMMSMAASASXMAXSAASAMAXMMMXXXAAAAXSAMASMASAASASXMMXSSMAAAMSMAXXXMMAMMXXASXMASMXMMAXSMMMSSSSS +SMSMMSAXAAXMAXASXXAMASASMXMASMMXMXMSMMSSMXSXSMXASAMSAMXMMMMAMAAMXMMAMMMSSXMMSMSMXSMSMAMMMMMMMAMSAAAXMMMSMMMMXMASMSSMAMMMMMMMMXXMAMMAAAXXAMAA +SSMAXMMMSSSXMSAMXSXXAMAXAAXXMAAMSAMXAXAAXXMAXMMMMAXSXSXXXXMXMMXMAXMMMMAXXAAAXXXAXSAAMASASMMSMSMXMMXMAAXAAAXSSMAAAAAMXMAMSASXMMSSMMSSSMSMMMSM +SAMSMXAAMXAAMMMMAXXASMSMSMMMSMMMMASXMMMMAAMSMSAXXAMMXMXMMMXAXXASXSMSAMMSXSMSXMMXMMAMSXSASXAXMXMAMAAMMMSSMMXAAMMSMSMMXXXMAXSAAAAAAMAMAMSAXAAM +SXMXMXMSSSMXMAXMXMMMAAAAAAAAAAMAMSMXSAXXMMMXASASMSAXAXAMAASMMSASAAAXXMXAAXMXASMXMXSMMXMXXMMSSMSMMMSXSAMXSSMSXMAXXAXXMAMXMXMMMMSXMMAXAMMSMXSA +SXMASMXMAAXMMMSMAMXXMMMSXXMXSXMMXMAAMSMXXAAMXMAMMXMSMSMXSMSXAMAMMMMMSMMMSMASAMAASMMAXXSMMAMAMXAAMSMMAAMAAMAMXMXSXMXAMMMMXMXMXXXXXSXSASMXMAAX +SASAXMXMSMMXAAAXXAMMXMXMMSSXXMXSAMMMSMXXSMMSAMXMAMAAMAXXMAXMXMSMSXAXAAXAAMXMXMSMSASXMXAAXMXXMMMSMAAXSAMXSMXMAMAMASXSMASAAAASMSMSAAASAMXASAMX +XMMMSMXMXXASMSSSMSSMAXAAAAAAMAAXAMXMAMXXXAAXAMXSAMSMSXSMMAMXXXXAXSSXSSMMSMSMSMMASXMASXSXMXSAAAAAXXMMMAAAXXMSXMSSMMAASASXMSXXAAAMAMMMMMSASXMM +XSAMAMMMAMAMXXXAMAAXSSSMMSMSMMMSSMMMSSMSSMMSSMAMXXAAXXMXAASMMSMMMAMXXMXMAAAXAAMAMASASXXAAAMMSMSSSSMXSSMXSMXMXXAAXXSMMMSXMMAMSMSMAMSXMASAMXMS +ASASXMAMASAXMMMAMSSMMAXMAXMMXSXXAAXAAAXMASAAAMMSMSMSMXSASXSAAAXMXXSMSAASMSMSSSMXSXMASASMMMMAAMXMMAXAAAXAXAAMXMSSMMMAXAXMAXAAXAMXSMMAMAXMMXXS +MXAMXSSSXXAXXAAXAAMAMXMSAMASASXSSMMSMSMXMMMSAMXMAAAAASXAXASMSMXSAMXAMSMSAMXAMXMASASXMMMMXSMXMSSXSMMXSMMMSSMSAAXXAXSAMXSXSSSSMXMAMXSXMXSASMAX +MMSMMMAMAMSMSAMSMSXMSMXMASMMASXXAMAMXMMMXXXAMXSMSMSMSAMMMAMMMMXXAXMMMAXMASMMMASXMMXAAXASAXMSSMXAAXSMMXSAAAASMSMSXXMASAMMMAMXAAMASMSXMXSAAAAM +MXAAASAMAMAAXAMSXXAMMASXXMXMAMXXAMAMASASAXMASXSAMAAXXMAXSXSMAMASMMMXSSXMAMXXXMXXMASMMSASMMMXAAMSMMMAXAMMSSMSAAXAMSSMMASMMSMSSMSAXXMASAMSMSXA +ASXMMXXMXMMXMMMXASAMXAMAMMAMAXXSMMMSAMAXMMSSMMMAMSMSSXSASAAMMSAMXAAMMMMMSXXMXSSSSMASAMMMAASXMMMXXMSMMSMMMAXMMMMSSMASMMMAAMAAMAAXXXMXMXMXXMXS +XSASXMSMSXSASASMMMMXMASXASMSMSAAAAAMXMMMMAMAASXSMXXAXAXAMSMMMAMXSMSXSSXMMAXSAMAMASAXXSASXMSASXSAMMAMMMAMXXXXAXAXAMAMXMAMXMXMMXMXMSAMXSMMAMAM +SMMMAAAAAAMASAMMAMXAMMMXMXAAAMXMMXXMAAMXMAXSMMXMASMSMMMAMMXMSAMASAAAMAAXXMXAAMMSAMXSSXMMAMSXMAMAXXASASAMXSSSSMMSMMMSSXMXAAXXMAMAXMAMSMMMAMAS +MASXMMMMMSMMMAMSSSSSSMMSMMSMSSMSSMASXMMMSMMASMMSMMMMAXXXXXAAMAMASXMASMXMSXSSSMXMXMAXXAMSXMXXMXMAMMMMMSAMASAMXAAAMAMAMAMAMXMMSASXMSXMAAXSSSSS +SAMMMSXSAXAAMSMMMAMXAAAAMMMAAMMAMXAXAXMMAMSAMXAAMAMMMMMMSMMXSAMXSXMXSXMXAAMAMXXAAMMSSXMAXMXMSXMAMAAAXMAMXSMSSSXXMAMMSMMASAAMSASAMAMSMSMAMSAX +MASAASMMASMMXMAMXXMSXMSMSAMMMSMASMSSSMXMAMMMMMMMSASAXAAAXAAMSXMAMAMAMXAMMSMAMMSSXSXAAASXMSAAAXSASXSMSSSMXXXXAXASXSSXAASASXSMMXXAMAMAAXMASMMM +MMMMMXAMMMMMXXSMMMMXXMAXMXSMMMXMSXAAAMMXMAMASAMXSASASXMSSMMXMAMAMAMAMMMSAMMAMMXAMAMMSMAAASMSMXMASAAAAAAAAMMMAMXMAMMMSMMASAMXXSMMSXSASXXXXAAX +SAAMASMMMASXSXXASASMSMSSMAMAAXASMMMSMMSAMASASASXMAMXMAAAXAXXXSSMSMSASXAMASMSSXMAMMAMXXMMMMXXMASAMMMMMSMMMASAAMMMMMXAMXMAXAXMAXAAAXXAXMSMSSMS +XMXXAAAAMXMAXAMASASAMXMAMMSSMSMSAAMAMASASAMXSMMMMMMXMMMMSMMMMMAAAASXXMAXXMAXMASAMXMMMMXAMXAASAMXMMXAAMMSSXMXSMXASMMXMAMMSMMAMSMMSSMXMAAAXAAX +XSSMSSXMMAMMMSMAMAMMSXSAMMAMMMXSXMXASASAMXSXXMAMXAXAMXMAAMXAXSMMMXMMSMSSMMMMXMMMXSAMXAMXMXSASXMAMXMMMSAMXAMXMXSMSAMSSSMAAAAMMAAAMXMAMXMXMMMX +SAAAXMASXMASAXMXMMAMMASMMMASXMAMAMSXMAMXMMMMXMASMMSASAMSXSSSXSMMXSAASAAXMAMMXSAXASMXMSMAMMMASASMXSSMMMAMXAMXMASAXAMAAAMXXXMSSSSMMASASASXMXMA +AXMMMMMMASMMAXAMXAAAMXMSAMMSAMXSAMSXMXSSMSAAXSASAAMMMMMMAMMMAXAXAXXMMMMSXMMSAMXMXMSAAAXAMAMXMAMXASXSASAMSMMXMASMSMMMSMSSMAMAAMAAMAMAMASXMAMS +MSMASAXMAMXMMMSSMSXXMXAMXMSSMMMMXSMASAMAASMXMMASMMMSAMASASXSMSSMASXMMAAAASXMASXXAXSXSASXSXSXMSMMMMAAMSAMAXXAMXMXAXXMAXAAMSMMSSSMMSMMMSMMSASA +XAMASMSMASAAAAAMAMMSSMMMSMMMAMAAXXMAMXSMMMAMSMMMXMASASASMSAAXAAMAMXASMMXMMAMMXAMSXMAMMAMXMSXMAMAAMXMXSXMSMMASAXSSSSSSMSSMAAXXAXXAMASXAAASXSM +AMMXSASMAMMXMMSSXSAAAAXAAAASASMSMMMMSMMXMMXMAAMAMMASAMMSAMXMMSSMASMMMMSMMSSMXMXMMAMXMAMAAAXAXAXSSSXMAXSMAASMMMMAAAAAXXAAXSXMMAMMMSAMXMMMSASX +MXSAMXMAMSSXXAXMAMMSSMMMSXMSASAAMAASAMXASAXSXXMAMXAMXMAMAMAXAAMXXSXMAAMAAAAXXMAMXMXSXMXSMSMMSMMAAXXAMXMSMAMMASMMMMMMMSSMMMSAMXMSAMXXXAAMMAMA +SAMXSMMSMAXAMXSMSMMAMAMAMXMMMMXMSSXSASXAXMMMSXSASMMSAMMSMMMASMASMSAXMSSMMSSMMMAXASAMAXMXMXAXMXAMMMMSAMXAXAMMAMXAXMXAXAAMMSAMXSXXAMMSMXXXMXMS +MASAXMAAMXSXSAXAMAXMSAMXMASAXAXMAXASAMMSMAMAAXMMMMAMXXXAAASAMXAXASXMSAMXMAXAASASASASAMSAMXSMXMASXXAMASXMMSAMXSXMXSSMXSXMXMASMMMSMMAAMMSSMASA +MXMMXMSSSXAXMMXXSXMASASMMAMXMMSMASMMMMAASAMMSSSMSMSXMMSXSMSAXXAMXMSXMASASAMXMSASASAMAXSASAMAAXMXMXMSMMAAAAASAMXSAMMSAMAMXSAMXAAAAMSXSAAAAXXM +SSMSAAAAAXMXAXMMAMXMSMMMSSMMXMAMXMAAMMSMSXSXAAAAAXMAMASXMASASASMSMSMSAMAXASMASAMAMMMMMSAMASXXXMAMAXAXSMMMSXMMSAMASAMXSASAMASMMSXSMAMMXSXMMSX +XAASMMMMMSXSAAXXAXSMSMSAAASAMXSSMXSMMAMXMXSMMSMMMXSAMASASAMAMAAASASAMMSXSAMMAMAMXMAAXXXASAMASXSASXSMXMASXMASAMXSAMMSMSXMASMMAAMXMMAXXXXMSMXM +MMMMSXAXASASMSXSXMMASASMSSMXMMAMAMAAMASASAXAMAAXAXXAMXSAMAMXMMMXMAMXMXAMMXMMSSMMSMSMSMSAMAXXSMSAMAAXXMAMASASASAMXSASAMMSMMMMMMSAXSMMSAMAMMAA +MXMASXSMMSAXAAAMMSMAMXMAMAMAAMAXSASXMAMXMASMSSSMMSMSMMMMMXMSXMASMXMAAMSSSMXAAAAAAXAASASMMSMAMAMAMSMMSMSSMSAXAMXMMMMSSMAAAXAXXMMMMMAAMMMAMXSS +XAMASMXAAMMMSMXMASMSSSMMMAXSASXSMMMMMMSSMMMAAAXXMAMXASAXMASAMMAMAAXASAMAXAMMSSMSSMMAMAMMAXMXMSMMMXAXASXAAMXMMMSMMAASAMSSSMXMASAAAMMMSXSAMXMM +MSMAXASXMSAMXMMMMSAMXMASXMXMAXXAAXXAMAAMAAXMAMXMASXSAMMSMMAMAMASMSSMMXXAMSXXAMMXXAMXMSAMSSSMMXSMAMSMMASMMMASAAAMSSXSAMXAAXXSASXSMXAXMAMAXSAM +MXAXSAXXMAMMASASXMAMSSSMSXXMAMMMMMXXMMSSSMSXXAMXAMAMAMAAXMAXMMAXXXAAASMMMXMMMSMAMXSXXMASAAAMXAMMAMAAXMXMASAXMSMXAMMSAMMXMAXAMXMMASXSMXMAMMAS +ASAMMMMXSAMSASASXXAMXXAAXXXMASMASMSMSMMMMASMMSSMSSXSXMSSSSMSAMSSSSSMMAAAXXAAXAMMMAMXXSMMAXMMMSSSXMXSXXAMMSAXMXXMAMASAMMMMSSMMSXSMSAMMXMMXSAM +MMMSXMMXAAXMXMXMAXSSMMMMSSXSAXXXMAAAAMAMMAMAAAAXAMMAMXAAAAASAAAAAXXAXSSMSMSMSXSXMSSMASMMSMXXAMAXMSMMMSMSXMMMAAMSSMASAMXSAAAAAAMXAMXMASAAAMAM +XAASAMSSMSMSASMMSMMAMXAAAAMXMASXMMMSMSASMMSMMSSMMSMSASMMMMMXXMMMMMSMMMAXXMAMAAXAAAAXAMXAAAXMMMAMMAAAAXAMMAMMMMMAAMXMASXMMSSMMSAMSMAXXAXMSSSX +SMMMAMAXAXASAMXAXXSAMSMMMSMASAXMAXXXASXSAMMMAAMAXAAAMXXAXAMSMMXSSMSXAXMMSXMSXXXMMSMMXSMSSSXXMASMSASMSSXMMAXMAXMXSMSSMMAXXAMXXMXAMMSSSXMMAMAM +MSSXAMMMXMXMSMMAMMMAMXMASAXXMMXXSMMXXMMSXMAMMSSMMMSMSSSMMMMAAMASAASMSSSXMAXSXSSXAXXXAXAAMXMSSSXMXAXMAMMMSSSSMXSAMXAAASAMMASXXMMSXAAAAMAMSSMA +SAMXSMXSMSXAMXSAXAMMMASXMAXMMMSAMAMXASAMASXMXXMASAXXXAAXSMSSSMXSMMMXMAMASXMSAXXMMSAMAXMMMAMASAMXMMMMAXAAAMAAMAMMSSSSMMMSMSMMSMAMSMMSMASMAAXS +MMSMXMXAAMMXMASMSSSMXAMAMXMXAAXMSAMMMMASAMMSMMMMMSSMMMMMAAXMAMXXXAMXMXSXMSAMMMXMAXMASXMASASMXMSMXSAMMSMXMSSXMASAXAAXAXMAMAAXXMAXAXAAXXAMSSMA +XXAMMSMMSMSMMXMMAAAXMASXMMAMMSSXMMSXAMXMAMMAMXAXXAMMAASXMSMSMMSMSXSASAMXAAMAMSSMASXSMASASXSXMXAAXMAXMAMAMXXXSASMMMMMMMSSSSSMAXMSAMSMSAAXAMXA +MSMSAAMXMAAAMASMMXAMXXMASAMAXAAAMASXSMAMAMSASXMMSMMSMMMAXXAXMASXMASASMSMMMSMXAAMASMMSMMASAMAAMMAMSMMSASXAAMMMASXXMASXAAXAAMMASMMMMXAXMSAMXMM +MAAMMXSAMSSXSASXSXSSXAMASXMSMSSSMASAXXSMAMSMMMSAAXAASMSSMMSXMASAMAMAMAXAAAAMMMSMAXXAXXMAMASAMAXXMAXAMAXMMXSAMSMXMXASMMSXMAXSAMXASMSSMXMAMAAM +MMXMXSSXMAMXMASMSAAXXMMASXMAAMAAMMMMMAXMSXMASAMXSMMSSXAXSXAXMXMAMXXXSSMSMSMSAMXMSXMMSMMXSAMMSSXMSMSSMSMXXAAASMMXMXAXXXXXMXXMASMMSAAAAXSXSSSM +MSASXAMXMASXSXSAMMMMSXMASASMSMSMMSAMMSMAMMMAMASMXMMMMMMMMMMMMSSXMMMXMAMXMAXMASMAXXASAMAMMMMMAMXAAAAMAMXSMSSMMXXAXMMSMXMMSAXSAMAMMMMMSMMAAAXX +ASASMXMASMMASAMAMXXASAMASMMAAAAAMMAMAAMXMAMXSAMAAXMAAAAAAAXAAASAAAXASAMAMAXXAAMAMSSXMAXSAAMMASMSMMMMXMAXMXAAXSSMSAASMSXAAAXMASMMAAAAAAMSMMMA +XMXMASMXSXMSMXSSMAMXSXMXSXMSMSMSXSSMSXSASXSAMXXSASXSSSSSSSSMSSSSMMSASMSXSMXMASMAMSASXAXSMSSSSMMAXSMXSMXSMSSMMAXASMXMASMXMSMSAMMSXSMSSSMXXXSX \ No newline at end of file diff --git a/src/day04/src/lib.rs b/src/day04/src/lib.rs new file mode 100644 index 0000000..3e75b55 --- /dev/null +++ b/src/day04/src/lib.rs @@ -0,0 +1,2 @@ +pub mod part04a; +pub mod part04b; \ No newline at end of file diff --git a/src/day04/src/part04a.rs b/src/day04/src/part04a.rs new file mode 100644 index 0000000..36309d1 --- /dev/null +++ b/src/day04/src/part04a.rs @@ -0,0 +1,52 @@ +use std::fs::File; +use std::io::Read; + +pub fn day04a() -> u64 { + // read file (that for sure exists) into two lists + let mut file: File = File::open("src/day04/input04.txt").unwrap(); + let mut file_content: String = String::new(); + file.read_to_string(&mut file_content).expect("Can't read file"); + + // create n*n matrix from input + let mut matrix: [[char; 140]; 140] = [[' '; 140]; 140]; + file_content.split("\n").enumerate().for_each(|(line_nr, line)| { + line.chars().enumerate().for_each(|(col_nr, ch)| { + matrix[line_nr][col_nr] = ch; + }); + }); + + // examine every element in matrix + let mut count: u64 = 0; + for row in 0..140isize { + for col in 0..140isize { + // skip if it's not X + if !matrix[row as usize][col as usize].eq(&'X') { continue } + // if enough space search in X+ + if col + 3 < 140 { count += search_xmas(&matrix, row, col, 0,1) } + // if enough space search in X- + if col > 2 { count += search_xmas(&matrix, row, col, 0, -1) } + // if enough space search in Y+ + if row + 3 < 140 { count += search_xmas(&matrix, row, col, 1, 0) } + // if enough space search in Y- + if row > 2 { count += search_xmas(&matrix, row, col, -1, 0) } + // if enough space search in X+Y+ + if col + 3 < 140 && row + 3 < 140 { count += search_xmas(&matrix, row, col, 1, 1) } + // if enough space search in X+Y- + if col + 3 < 140 && row > 2 { count += search_xmas(&matrix, row, col, -1, 1) } + // if enough space search in X-Y+ + if col > 2 && row + 3 < 140 { count += search_xmas(&matrix, row, col, 1, -1) } + // if enough space search in X-Y- + if col > 2 && row > 2 { count += search_xmas(&matrix, row, col, -1, -1) } + + } + } + + count +} + +fn search_xmas(matrix: &[[char; 140]; 140], row: isize, col: isize, x: isize, y: isize) -> u64 { + if !matrix[(row+ x) as usize][(col +y) as usize].eq(&'M') { return 0 } + if !matrix[(row+2*x) as usize][(col+2*y) as usize].eq(&'A') { return 0 } + if !matrix[(row+3*x) as usize][(col+3*y) as usize].eq(&'S') { return 0 } + 1 +} \ No newline at end of file diff --git a/src/day04/src/part04b.rs b/src/day04/src/part04b.rs new file mode 100644 index 0000000..5985410 --- /dev/null +++ b/src/day04/src/part04b.rs @@ -0,0 +1,60 @@ +use std::fs::File; +use std::io::Read; + +pub fn day04b() -> u64 { + // read file (that for sure exists) into two lists + let mut file: File = File::open("src/day04/input04.txt").unwrap(); + let mut file_content: String = String::new(); + file.read_to_string(&mut file_content).expect("Can't read file"); + + // create n*n matrix from input + let mut matrix: [[char; 140]; 140] = [[' '; 140]; 140]; + file_content.split("\n").enumerate().for_each(|(line_nr, line)| { + line.chars().enumerate().for_each(|(col_nr, ch)| { + matrix[line_nr][col_nr] = ch; + }); + }); + + // examine every element in matrix + let mut count: u64 = 0; + for row in 1..139 { + for col in 1..139 { + // skip if it's not A + if !matrix[row][col].eq(&'A') { continue } + // if enough space search in X+ + count += is_x_mas(&matrix, row, col); + } + } + + count +} + +fn is_x_mas(matrix: &[[char; 140]; 140], row: usize, col: usize) -> u64 { + if !validate_tl_br(matrix, row, col) { return 0 } + if !validate_tr_bl(matrix, row, col) { return 0 } + 1 +} + +fn validate_tl_br(matrix: &[[char; 140]; 140], row: usize, col: usize) -> bool { + match matrix[row-1][col-1] { + ch if ch.eq(&'M') => { + matrix[row+1][col+1].eq(&'S') + } + ch if ch.eq(&'S') => { + matrix[row+1][col+1].eq(&'M') + } + _ => false + } +} + +fn validate_tr_bl(matrix: &[[char; 140]; 140], row: usize, col: usize) -> bool { + match matrix[row-1][col+1] { + ch if ch.eq(&'M') => { + matrix[row+1][col-1].eq(&'S') + } + ch if ch.eq(&'S') => { + matrix[row+1][col-1].eq(&'M') + } + _ => false + } +} \ No newline at end of file diff --git a/src/day04/story04a.txt b/src/day04/story04a.txt new file mode 100644 index 0000000..71ea26a --- /dev/null +++ b/src/day04/story04a.txt @@ -0,0 +1,39 @@ +"Looks like the Chief's not here. Next!" One of The Historians pulls out a device and pushes the only button on it. After a brief flash, you recognize the interior of the Ceres monitoring station! + +As the search for the Chief continues, a small Elf who lives on the station tugs on your shirt; she'd like to know if you could help her with her word search (your puzzle input). She only has to find one word: XMAS. + +This word search allows words to be horizontal, vertical, diagonal, written backwards, or even overlapping other words. It's a little unusual, though, as you don't merely need to find one instance of XMAS - you need to find all of them. Here are a few ways XMAS might appear, where irrelevant characters have been replaced with .: + +..X... +.SAMX. +.A..A. +XMAS.S +.X.... + +The actual word search will be full of letters instead. For example: + +MMMSXXMASM +MSAMXMSMSA +AMXSXMAAMM +MSAMASMSMX +XMASAMXAMM +XXAMMXXAMA +SMSMSASXSS +SAXAMASAAA +MAMMMXMMMM +MXMXAXMASX + +In this word search, XMAS occurs a total of 18 times; here's the same word search again, but where letters not involved in any XMAS have been replaced with .: + +....XXMAS. +.SAMXMS... +...S..A... +..A.A.MS.X +XMASAMX.MM +X.....XA.A +S.S.S.S.SS +.A.A.A.A.A +..M.M.M.MM +.X.X.XMASX + +Take a look at the little Elf's word search. How many times does XMAS appear? \ No newline at end of file diff --git a/src/day04/story04b.txt b/src/day04/story04b.txt new file mode 100644 index 0000000..e4855a2 --- /dev/null +++ b/src/day04/story04b.txt @@ -0,0 +1,26 @@ +The Elf looks quizzically at you. Did you misunderstand the assignment? + +Looking for the instructions, you flip over the word search to find that this isn't actually an XMAS puzzle; it's an X-MAS puzzle in which you're supposed to find two MAS in the shape of an X. One way to achieve that is like this: + +M.S +.A. +M.S + +Irrelevant characters have again been replaced with . in the above diagram. Within the X, each MAS can be written forwards or backwards. + +Here's the same example from before, but this time all of the X-MASes have been kept instead: + +.M.S...... +..A..MSMS. +.M.S.MAA.. +..A.ASMSM. +.M.S.M.... +.......... +S.S.S.S.S. +.A.A.A.A.. +M.M.M.M.M. +.......... + +In this example, an X-MAS appears 9 times. + +Flip the word search from the instructions back over to the word search side and try again. How many times does an X-MAS appear? \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 5d04f0c..e7b6d18 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,8 @@ use day02::part02a::day02a; use day02::part02b::day02b; use day03::part03a::day03a; use day03::part03b::day03b; +use day04::part04a::day04a; +use day04::part04b::day04b; fn main() { let exercises: Vec<(&str, fn () -> u64)> = vec![ @@ -14,6 +16,8 @@ fn main() { ("day02:B", day02b), ("day03:A", day03a), ("day03:B", day03b), + ("day04:A", day04a), + ("day04:B", day04b), ]; let start: Instant = Instant::now();