diff --git a/day4/c/day4 b/day4/c/day4 new file mode 100755 index 0000000..e0385b7 Binary files /dev/null and b/day4/c/day4 differ diff --git a/day4/c/day4.c b/day4/c/day4.c new file mode 100644 index 0000000..d80f47c --- /dev/null +++ b/day4/c/day4.c @@ -0,0 +1,94 @@ +#include +#include +#include + +#define MAX_DIMENSION 512 + +// Row, Column +const int directions[][2] = { + {0,1}, // Right + {0,-1}, // Left + {1,0}, // Down + {-1,0}, // Up + {1,1}, // Right-Down + {1,-1}, // Left-Down + {-1,-1}, // Left-Up + {-1,1}, // Right-Up +}; + +const char sequence[] = {'X', 'M', 'A', 'S'}; + +#define directions_len sizeof(directions) / sizeof(directions[0]) +#define sequence_len sizeof(sequence) / sizeof(sequence[0]) + +int main() { + char *p, c; + + int rows = 0, columns = 0; + char **characters = calloc(MAX_DIMENSION, sizeof(characters[0])); + characters[rows] = calloc(MAX_DIMENSION, sizeof(characters[0][0])); + p = characters[rows]; + + while ((c = getchar()) != EOF) { + *p++ = c; + if (c != '\n') { + if (rows == 0) { + columns++; + } + continue; + } + + rows++; + characters[rows] = calloc(MAX_DIMENSION, sizeof(characters[0][0])); + p = characters[rows]; + } + + int count = 0; + int count2 = 0; +#pragma omp parallel for + for (int i = 0; i < rows; i++) { + for (int j = 0; j < columns; j++) { + for (int k = 0; k < directions_len; k++) { + int found = 1; + for (int l = 0; l < sequence_len; l++) { + int row = i + l * directions[k][0]; + int column = j + l * directions[k][1]; + if (row < 0 || column < 0 || row > rows - 1 || column > columns - 1) { + found = 0; + break; + } + + if (sequence[l] != characters[row][column]) { + found = 0; + break; + } + } + if (found) +#pragma omp critical + { + count++; + } + } + + // Part2 + if (characters[i][j] == 'A' && i > 0 && i < rows - 1 && j > 0 && j < columns - 1) { + if ( + ((characters[i-1][j-1] == 'M' && characters[i+1][j+1] == 'S') || (characters[i-1][j-1] == 'S' && characters[i+1][j+1] == 'M')) && + ((characters[i+1][j-1] == 'M' && characters[i-1][j+1] == 'S') || (characters[i+1][j-1] == 'S' && characters[i-1][j+1] == 'M')) + ) +#pragma omp critical + { + count2++; + } + } + } + } + + for (int i = 0; i < rows; i++) { + free(characters[i]); + } + free(characters); + + printf("%i\n", count); + printf("%i\n", count2); +} diff --git a/day4/input.txt b/day4/input.txt new file mode 100644 index 0000000..920e990 --- /dev/null +++ b/day4/input.txt @@ -0,0 +1,140 @@ +AAMXMASASMXSAMXXSAMSAMXXSXMMSMMSXSASXSXSSSXSAMXXXSXMASXMAMMASAMXAXAXMXMSSMMSXSASXSAMXXMASMXSMMMMMXXMAXXSXXXAXMSAMXSMXMSXSAMXMXMSXMMXSMXMXSMS +AXMASXMAASAMMMSMSAMSAMXMAXMAAAMXMASAAMMMAAAMMXMASMAMAMASMSAASXMAXMMXASAMXAAAMSAMMMAMMMXMASASAXXASMMMMSAMMMXMASXMASMSMMMAMMMMMAXXAMXAXMAMSAAA +XMSMMAMXMMSMAAAAMAMSAMXAMAMSSSMXAMMMSMAMMMMMSASXAXAMASXMAAMXXMSMXSAMXSMMSMMSMMAMASAMMAAXSMMSAMSMMAAAMMAMAASMMMXMMXMASAMAMSMSSSSSSMMXSXMXAMXM +SAMXSAMSXMASMSSMSMMMMMMAMMMMAMASMXSAAMSMMAMXSASMSSXSASMMSMMMSMAAAXAAAXAAMAMXASMMMSASXSMSMMXMXMAXMSMSSSSMSMXAASMMAASAMXSASAAXAAMXAASMMASAMXAX +ASAASXMMAXAXMAXXAXAXASAMXAAXMMMMMAMXSXMASXSMMMMAAMXMASAAMXSAAMMAMSSMSMMMSSMSMMXMXSXMAXXAAXMMSSMSXMAMAAAAXMSSMXASXXMMSMSMSMSMMMMSSMMASAMAXSSS +MMMMSAXSAMMXSASMMSMSAXMASMSMXAXAMXMXXASAMXAMXXXMAXAMXSMMMXMXSMXAXMAAXXSAAXMAMXXMMSAMXMSSXMAAMAAAMMAMMMMMMMAMAMXMXAXXAASAMXAAXXXXMAMMMMSXMAAX +XMAMXMXMASXAMMSAXAAMAMSASMXXSXSXSAMXMAMSMSAMXSMSASXSAMXSMASAXASMMSMMMAMMSSSMSMSMASXMAMMAMSMMSMMMMSASXXAAAMAXXMXASMMMMSMAMSMSMMMXMMMSXMSMSMAM +SSMSAXSMASMMMASMMMMMXMMASAMASAAMSASAMXMAMMAXXAAAAMASXSASMXMASAXXAAAAMAMAAAMXAASMAMASMSMAMXAAMXSXASASASXSSSSMSXMASXAAXAXSMSMAAAMMASASAAXAXXAX +AAAMXMXMAXAXMXXXXXXXXXMMMXMAMXMXMASXMXSASMSMXMSMSMXMAMASAMMMMXMMSSSMSXSXMMSXMSSXMSMMMAMMSMMMSAMMMMAMAMAAAAXAXMXAXMSMSAMXAMMSSMAAXMASXMMSMSAS +MMMMSSXMASMXMASMMMXSXMMMAXMSMSXAMMMXMASASMMMAAAMXMXMXMXMMMXAMASXMAMAXMMMXMAASAXXXAXASASMSXSAMMSAXMAMAMMMMAMMMAMMMXAXMMMMAMAAAMXSXMXMAMAXXSSM +XMAAMAAMAMMAXAAAAXAMMAAMAMMMAXMXSAAAMAMMMAAXXMMMAMAXMASMMSMASAMMMMMMMAAAMMSSMASMSMSXSAMAMSMASXSMSSSSSMSAMXMXASAMXMSMMSASASMMXXMMMXAXAMMSMMAS +MSMSSSSMMSXMMMSSXMMSASXSSMSMMMMMMMSMMASASMMSSMXSASXXSASAAXSXMMXMAAMXSSSXSAXXMAMXAAAXMAMMMASMMMXAXAMAAASXSMXASXXAAAAAXSXSASAMSAAAAMMSXXXAAXAM +XAAAAAXXAAMSXMAMXXMAMMAAAAAAAAAAXAXAXXXXMAAAAAASAMAAMASMMXAMXSASMMSAAAAAMXMXMXSSMSMXMAMAMAMMAMMMMAMXMMMMMAMXXMSSMSSSMSMMAMAAASXMSXMAASMSSMXS +SMSMMMMSMXMXAMASMMSSMMMMMMMXMSSSMSSMMSSSSMMMMMMSAMMMMAMAXSAMXSASAAMMMMMMMMMXMAAAAAXSSMXSMSSSMMAAMAMXXAAAMXXAMXAAMMAAXXAMXMMMMMXMAASMMMAAXXXX +SAMXMAMSMSMXAMAMAAXASAAXXXSAAAAAAAXMAXAAMXXXXAXMASXAMASXMMASXMAMMMMSASXMAAXAMXXMSMSAAXAMXMAAASXMSMSASMSMSAMSSMSSMMSMMSSMAXXAXXAMSXMAAMMMMMSM +SAMXSASXASAASMSMMMMMSXXSAASMMMSMMMSMSMMMMXMMSMSXAXXXSAMXASAMAXSXXXASMSASXSSSXSXXAXMMMMMSAMMMMSAAXAAXAAMAMMSAAAAXAXAXAXMMSMSAXSMMMMSSMSXSXAAA +MAMXSSSMXMAMMAAXSXMXXXXMXMMASAXXSXAAXMMMXMXXAMXMMSSMMMMSXMASMMMMMMAMASXMXAAAASXXXXXAMAMMAMXSASMMMXMSMMMAMSMXSMMSSMMMSSSXMASXMXMAAMAAAXAXMASM +SSMMMAXAMXMMMMMMMAXAXSSMMXSAMXMMSSMMMAAXAXXSSSSXSAMXSAAMMXAMMXMAMMSMAMXSSMMMMMAXSMSSSSXSASXMASAMSAMXAASMSSXMMAXXMAAAMAMAMXMMMASXSSSMXMXMAMXM +MASXMMMXAAMAXMASMMMXSAAAAXMAMXMAMAXXSXMXMXMXMAMSMASAMMSMAMSMSAMMSAAMAMAXAAXXXMSMAAAAAAASAMXMXMAMSXSSXMASAXAAXMXSSSMSMASXMAXAMXSAMAMXSMMSXMAX +SAMXMXMXSXSAMAAAAAAXAMMMMXAXMAMSSSSMXAMASAMAMAMAXSMXSAXMAXMASXSAMXSMMMSSMSXSMMASMXMMMMMMAMMSASAMXAAMMSMMMSMMXMAMAXMXXMMMXMMSMMMAMXMASXAAAMXM +MASASASMMASMSMMXSMMXMXMMMMMMMXSXAAXMAXSASASASXSMMMAXMAMSSSMAMAMMSAMAXAXXXXAAASASXSXAAXXMAAMSXSASMSMMMMMAMMAMXMASMSMSMSMSASMXAASAMAXMXSXSAMXA +MXSASAMAXAXXAXMXMAMXMAXSAAXAXMMMMMMMXXMASXAASAAXAMXMXAXXAXMAMAMXMAMSMMXSAMMMMMMSASXSXSXMASXMASXMXAMXAAMAXSAMXSASXAAAAAXXAMASMMMASMSXAMMAMSSS +XXMMMMSSMMSSMXXAXMAXXAXXXMXMSAMMMXMSXAMAXXMSMMMMXXMASMXXMASMSXSASXAMAMAMASMSMAXMXMXMXMAXAMAMAMXMASXSSSMSXSXSXSXSXMSMSMMMAMAMAASMAMMMASAMXAAM +XMASAMXMAXAAAAMSMSMSMSXSASAXSAMAXSAMSXMASMXAASXMXSXXAXSXXXMASASASAMSAMXSAMXASMSMXMASXMXSASXMMXMXAMXMAAAMASMSXXAMMXAXXAXSMMMSXMMSXAMMMSXSMMXM +XSAMXSASMMMSMMMXAAAXAAAXASMXXSMAMMAMXXXXXAMMXMASAMXSXMASXXXXSXMXMAXSAMAMASXMMMAMAMAAAAASAMXXSASXSSSMMMMMASAMMMMMMXAMXMMXAAASASMMSXASASASASAS +MMASXMASXAXAXXAMSMSMSMAMXMXXMXMMSSSMSSSMXMAXASMMXXMXAMMMMMSASXSASAMXAMSXMMAAASASXMASMMMMAXAXXASXAAXXXMXMAMMMAXMAMMSMXMAMMMXXAMAAASMMASASAMAA +AXAMAMAMMSXMSMSMAXXAXXMAXMMMXXAMAMAMAAAXSXXSAMAMSMSAMMXSAAMMMAXASAXXSAXAXSSMMSMSASXXMASXSMMSMSMMMMMMAXAMAXMXSXMAMMXAAMMMSMSMASXMMAXMMMAMMMSM +SMSSMMASXMAXXAAXMSMXMAMSMXAASMSMASMMMSMMXAAXASMMAAAAMSXMMMXAMAMXMXSAMASAMXXAAXASAMXMSASMXAAAXAAXMAAXXSXSASMMMASMSSMMMSXAAAMSAMASXMASMMSMSAMX +XMAAASXSASAMMSMXSAXAXXMAXSMSMAASAMAAAAXMMSMSAMASMXMSMXAMASXMMASAAXMXMMMMMMSMMSXMMMAAMASXSSSMSSSMMMSMXXAXAAAASAMXAAXSAMXXMMMMXSAMXXAMAMMAMASA +MMMSMMXMMMMMXXAXSAMMMSSMXXXXMSMMSSSMSSSMAAXMASMMXMSAMSXMAXAXSAXMSMMXSAAAMMAAAXAAXSSSMAMXAMXMAXAASAXAXMSMSSSMXAMMMMMMASMSXSASMMASMMMXAMMAMMMM +SAAXAMAMXAMXXMSMMAMXMAASAMXSAMXSAXMAXXMMSSMSAMXMAXMAMSAMSSMMMMMMAAXASMSMSMSSMSSMMXXAMASXMXAXMMSMMASAMAAAMMXMSMMAXXXSAMXAXSAMAXMMXAASXSSSSSXS +MMXSAMAXSASAMXXASAMXMSSMMAAMAMXMASMMMAMXAAAMMSSXMSSMMSAMAAXAASASMSMMSAXXAMMAMMAASXSXMXMASAMXMAMAMMMXASMMMXSMASMMSAMMMXMMMMMMSXMMMMMSXAAAAAAX +XXASAMAMXXMASASMSASXMXMASMSXMASXMAXASAMMMSMSXXMAMMAAAMAMSSMMMSAXAAAXMAMMMXXAMSXMMAMSMASMMMXSMASAMXAXMXXSAMASASMAXXMASAMXAAXAMMMMASXMMXMMMMSS +SMMSXMMMSMSXMASAXMMXMASMMAAXXAXAXMAMMASMAMMMXASXMSSMMSAMXAASMMMMSSMMMAMSXSSMMSMMMXMAMAMAMXXMXXMAMMSXMAXMAMAMXSXAXXSAMASXSSMMSMAAMMAAXMXAXXAX +SAXXMAMAAASMMAMMSXMASASAMMMMMSSSXMMSSXSMMSAAMXAMXAMAMSMSSXMXAAXXAAASXSXSAMXMAMAXAXSAMSSSMSMAMMSSMXXAMXMXMMXXAMXMAMMMSXMMXAMAAXXSXSSMMASXSMMM +SXMASAMSSMMSMXSMAASASMSAMMXSXMAMAAAXMXSAMSMMSAMAMMSSMXAAXMASMMMMXSMMXMAMXMAMAMXMXAMXSMAXAXAAMMAMXASXMAAASMXSASAMMAAXAAMXSAMSMSXMMMASAMXAAMXS +MAMXMAMAAAASXXMMSMMAMAMAMXMMAMAMXMMXXAMAMXSAMXMXSAAASMMMXSAMXAASMMMXSMMMAMMXSSMMXMASAMAMSMXSSMXSMMSASMSMSAASASXSXSMMXAAAMAMXXSASASAMSSMMMMAX +SAMXSSMSSMMSMXXAMMMMSMSSMMAXXMSSXSMXMASAMXMSMSAMMMSSXXMAMMASMXXXAMXAMAASXMSAAAAXASMSAMXSAAAXAMAXMXXAMXAXMMMMXMMAMAAXSMMXSMMXAMAMAMASXSAAAMXS +SASAAAAAAMXSASMMSAAAAXXMASMXMXXMASAASXMASXMAMAAAXXMAMXMASXXMASMSMMMSMSMSMAMMXMMSMSAXXMXMMMMMAMXSMSMSMSXMXXXMASAMXSAMXAMMSAMMSMSMMMXMAMSMSSMS +SAMXSMMSSMAMXSAASMMSMXXMMMSAMSAMMMSMSASXMMSASMMMMMMMSXSMSAMXAAAAASAXAMMXMAMMXSAMXMAMXSAMXAMSXMAAAXAAXAMXMXAMMASXAMAMXXMAXAMAMXMAMMMMXMAXXXAM +MXMXXXMXMMXSAMMMSAMAMSMMSASXMASMAMAXSAMAAAMXSXAAXAMXMASXSXMAMMMSXMAMXMAXXXSAMXASMSXMXAMMSAXXMMSSSMSMSMXSAMXMXMMMXSAMXSSSSSMXXAXMMAASMXXSMMSM +SMMMXMMAAMMMMXXXXAMAXSAXMASXMAMSXSXXMMMMMMXSXMSMSXXAMXMASASXXMAXAMAMMMMSMAMXMSMMAMMMXMMAMSAAXAAMAMXAXAMXSMAMAXXAAXMMXMAMXAASMSSMSXXSAMXAAMAM +AAAAAXSSMSAAMASXMSMSSMSMMSMXMAMMMXMMAMSXAXMXAMXAAMXMMAMMMAMXASAMXXMSAAAAMAMMMSSMAMAXASMXXMSMMSXSAMMMMSMAMXSSSMMMSMMSXMAMMMMMXAAMMXASMASXMSAS +SSMXMXAXAXXMSAMAAMAMAMXMXXAMMMMSMMASXMASMSSMAMMMMSAMSSSXMAMXMMXMMMMMXMSXMASXAMAXXMMMAXAMXMAMXMASXSASAMMXMAXAMAMAAAAAXSASXXMSMSMMMMXSXMAAASAM +MAAASMMMSMSXMASMMMXMAMXMAMXMASAAAAXAMXMMXAASXMSMAXMAAMAASMSASMSAXSAXAMXMXMSMMSAMMASMSMAMSSSMXMAMXSAMASASMSMAMXXSXXMXMMAMXMAXAAAAXMASMSMMXMMS +MMMMXAMAMXMASAMXMASMXMXMASMMAMSXMXSXSAXMMSXMXAAMASXMMSSMMASASAAMMSASXMMSAAXXXMASXAXAAMAMXAAMAMASMMXMSMAMAXMAMXXMMSSMMSSMMMASMSSMSSXMASXMXXXA +SASMSSMASAXMMSAMXMSXSAMSASAMAXAMSMSASAMXAMAMMMMMXAXMAAXAMXMAMAMXAMMMXAASMSMMMSAMMMMMMSAMMMMMAMAMAMXMAMXMAMSSSMSAAAAXAAAAXMASAAXAXXAMSMAMSMXM +SASXAASMMMXXAXMAAXMAMMAMAMXMSMSMSAMXMAMMXSAMSSMSAMXMMMSXMMAXXAXMSXSAMMMMAXXAAMMXMAXAASXXAMAXMMSXSXAXASMMXMMASASAMSSMMXSMMXAMAMMMMXMMXSMXAAAX +MXMMSMMMAMMMSMMSMSMXMAXMSMSMXAAAMMMMSAMXXMAMXAMXMASXAAXAXAMMXAMXXXMASMSMXMMMXSMASASMMMASXSSSMAMAXXASAMXAMXXAMMMAMAXAMAMMMMMSXSAAAASAMAXSMSMS +XSXAAMMMAAAAAAXMAXMMASMAAAAAMSMMMXSASASMMMSSMMMSMAMSMSSSMSAMSMSMSXSAMXAMMXMAXXXAMXAMXMAMXAAXMAMMMMMAMXAMXMMSMXSAMXSXMAMAAAMAASMXSAXAXSMSAAAX +MAMSXSASXSMSSSMMAMAXAAMXMXMMMAAXMASMSAMAAAAAAAAXXAXXSAAAAXAAAAAAAMMAMSXSMASMSMSMMSSSSMMMXMMMMXSAMMXAXMAMAMMMAAAXSMXMMMSSMSMMMMAXMXSMMMAMSMMM +AMXXAMXSXAXAMMMSSMMMMSMXMXMASMSSMASAMMSSMMSSMMXSSMSXMMSMMXMSMSMMMMSMMSXMXMMAAAAAMAAAXAMMXXSXMAMASMMMMXAMMSASMMMXSAMXAAXXAAXXMMMMMASAAMAMAMXA +SXMMMSMSMSMXSAAAAAXXMAXAAASASAAAMAMAXAAAXMAXAXMMAAXMMAXMAMXMAAMXSAMAAXAMASMXMXSSMMSMSXMASMMMMASMMXAAASMSAMXSMSXMMMMSMSSMSMSMMAAAMAMMMMASAMMS +AMXAAAXXAXAAAMMSXMMXSASMSMSAMMSSMMSMMMXXMMASMMMSAMSAMMMMSAMMXMSASAMMMSASASMMSAMXAXXMAXXXAAAMMMSXASMSXMSAMXXMXSAMXXXXAAMAAMXASMXSMMSAXSASASAX +MASMSSSMSMSMXMAXXSAXMASXAASXXXAXXXAMAMXSXMAMXAXAAMXMMXASASMAMSMMMAMXMXMMASAASAMXSMXAASMMSMXMAAMMMMXXAMXMASMSASAMSSMMMMMXMSSMMSMAAMAMXMASXMXS +XMXMAMAMMAMXXXAMXMASMMSAMXMMXMASXSXSMSXAAMSSSSSSSSSXMSMSAXMMSAAXSMMMMASMSMMMSAMAMMXSAMXAAAXSMMSAXSMSXXAMXMASASMMMMAXMASAMAAXAAMSMMXXAMAMAXAX +SAAMMSAMMXMMSAMXSMASAMXXXXXASMMSXMASASMSMMAAAXMXAAMXMAAMXMAMSXSMSAAASASXAAMAXAMAXAMXAMMMMXMAMXMASXAXMSMXXMXMXMXAASMMSASASXMMMSXMSAMXMMSSSMSA +XSXMAXASMAXAXAMXMMMSAMASMMASAAASAMMMAMAAMXMXMAMMMMMMSMSAASXMSXMASMMMMAXMSSMXSXMSSSXSAMXMASMSMSSSSMMMXAAMSMMSSMSXMXAMMMXXMAXAAMAMXMASXMAAAAAM +MAXMSSMMXMSSMMMXXAXMMMASASMXSMMSAMAMAMSMSAXSXMXSAMXAXMXMMXASXMMAMSSSMSMAXXMMSXAXAMASXMMMMSAAAAXAXAAASMSMAAASAMXMSSSMXASXMSMSXMAMMXXSAMMSMMMX +AMXXAAXMAMAAAXAXSMSAAMXMAMXAMXMSAMXMSMMASMSSMMMSAMXSMSMMMSMMAXMSMAXAAAMSMSAAXMMMAMAMAAAXAMXMMMSMSSMMSAAMMMMMMMSXAAAMMMSAAXAMXXXMXMASAMAXAXXM +SXMMSSMSMMSXMMSMMXSXMXMMAMMSSSXXAXAXXASAXMAMAAAXXAXMXSAAAAASMMXXAMSMMMXAASMSSXSSMMASMMXMMSMXXXAXAAAAMXMSXSSSMASMMSMMAXMMMMAMXMSSSMXSAMXSMMMA +XAMXMAMAXAXAMAMAMAMXXAAMAMXMAMAXAMSXSAMXSMMSMMMSASMSASXMSSMMMXSMSMAXMXSMMMAAAXMASMXSAMXSXMMMSSMSSSMMMXXAAAAMMASXMAXSMXMXMSAMASAAXAASMMAMASAS +SAXSAMXXMMMMMAMMMXSAMXSMAMMMAMXSAMXMMXMMXAASMMMMAMAMAXXXAXMASMXAAMXMXAAAXXXMMMSAMXAXAXASASXAMAMAMXMMSSSMMMMMMMSMXMXSMSMAMSXSXMMSMMMSAMXSAXSM +SAMXXSMMXAASMMSXSAMXXAAXXMAXXSAAXSAMXMASXMMSAXXMAMXMSMSMMXSAMXMSMSSMMMSAMXMMXMMAMMXMAMASAMMSSMMMSMXXAAXXAAAMXMSMMSAMXAXAXSMMAAXMAMAXMAXMXMAM +XXAXAAAAMXXSAXSAMASAMSSMMSXSAAMMMSXXSAXXSAAMXMMXXSXAAAAAAAMASXXMMAAAAAMAMMAXASMSMSMXMAXMMMAXXXXXXXMMMSMXSSMSAMXAAMASXMSSMMASMMSSSMASXSMASMMM +MASMSMMMSMAMXMMASXMAMAAAXAMXMMSXAXXMASAAXMMMXXSAAAMSMMMMMXMAMXMAMMSAMXXAMSSSXSAXASAAMSMSASMMSMMMXMASAAAXMXMAMXMMMSXMMAAMSSXMMAXAMXAMXAMAMAMX +AMXAXXMAXMAMAXXAMXMXASXMMMSSXXXMMSMXAMMXMMMSMAAMSMMXMMSMMMMSSMSAMMMMMSMAMXAAMMAMAMXMXAAXASAASAAAASMMSSXMMAXAMXMSAMXMMMMSAXAXSXMXMASAMMMASAMS +XXMXMAMXXSMSMSMMSMAAXASXSAAXSASMMAXMASXASAAAMXMAMXAMXAAAAAMAAXSASXSMAAXAMMSMAMAMMMASMMXMAMMSMSMSXSAMXXAASMMMSAAMASASMMMMMSMMMAMMMMMAMXSASMSA +SSMSMSMMMMAMAAXSMMSMSASMXMASMXMASAMSAMXAMMSMMXXASAMMMXMMMSMMSMSXMMMMSSSMSAMXSSXSMMMSAAMSAMXAAAMMASMMAXSMMAAASMSMSSXSAASAXAAAXAMAAASAMXMASXMM +XMAAMAMAAMAMSMSAXAAAMXMAMXMXMXSAMXMMSSMMSXMASMMXSASXXSXSAAASMMXXAAAAAAMXMMSMAMMMXAAMMXMSASMMSMXSAMXMAMMXMSXMXSAXAXAXMMSMSSSSSSSSMMSXMAAASMSX +MMSMSASMSXXXAMXMMMSXMAMSMASAMMSASXAAAXAAAASAMASMMAMAAAAXSSXMAMMMSSMSMMMXMASXXMASMMSSXMXSAMAMXXAMASXMXMMAXXMASMXXMMASMMMMAAMAAXMASMXMXXSAXAAX +AAMAMXSXMXSSXXAXMXAASMXMMXXASASAMMMMMSMMMMMAXXMAMXMMMMSMMMMMAMAXXMAMAMXMMMSMMXMXMAXXAXAXMSAMXMXSAMAXAMXMSAXMMMSAXMAMAASMMSMMSMMSMSASXMAXMXMX +MMSSMASAMAMAMSXSAMMMMSASMSSMMMSXMAXXXMAMSASAMSSMMAMXAXMAXAAMSXSMSXMXAXAXSXMASASMMSMSMMXMASMSAMASASXMASAMSAMXAAMMXMASXMMAAXAAXAXMAMMMAAAMSMSM +SXAAMAMAMAMAMASMASMAASXMAMMXMXMXMAXMXMAMAMMAMXAASAMSMSSSMMSAMXMMSASMSMSSXASAMAMAAXMXAXXAMSXSASMSAMXMASAXSMXSMSXSASXSAASMMSMMSMMMSMAXSMMSXAXA +AMSSMSSMXSSXSSMSAMMMMMAMMMSASAAXSAMMMMASMMSXMSSMMXASAMAXXAMXSMMASAMAMAXMMMMMSSSMMSASMMMSAMASAMMMAMXMASMMXAASAMASAMASMMMMXXAXMAAAMMXMAAXSMMMS +MAMAMXAAAMXMXAAMXXXMMMXMXXSASXSXMASAAMXXXMMSAAAXAMXMAMMMMXSMSAMAMXMAMSMSXXAMAMXMAXMAAAAAAMXMMMXSXSMMASMMMMMMAMMMSMMMXSASXSSSMMMMXAXXMMMSAMXX +XXSAMSMMXSAAXMMMSMMSAMAXXMMMMMMAXASMSSMSSMAMMSSMAAXSXMXMXMAASMMASASXMAAAXSXMASMSSMSSSMXMXMXMAMMMMMAMASAXXAMSSMMAXXAMMMAXAMAAAXMAMSMSAAXSAMAS +SMSAMXMAXMAMXXSAAAASASXMASAAAAXXMASXAAAAXMASXXXAMSMMXSAXAAXXSASASMXMSMSMMMMSXMXAAAAXAXXSSSMSASAXASXMXSXSSMXAXAMXSXMSAMSMSMSSMMMASAAMSMMMMMAS +MASXMMMSSMXSAAMXSMMMAMXASMSSSSMSMXXXMMMMXSAMXSSSMMMMASASXMSASAMXMXAAAAXXAAAAMXMMMMMSXMAXAAXSASXSXSXXXMXMASMASXMXMXXMXMXAXAAAMXSXSMSMMMSMMMXM +SMSXXSAAXMAMMSMMXAMMAMMMXAAMAAAAMSMSXASAMMMSAMXMAAAMMMAMAAMMMAMAMSSSMMMSSSSMMXMAAAAMASMMSMMMAMASMMMMAMAMMMXXAMXAMASXSSMMMMSSMASAXXXAXAAMSMSX +MAMAMMMMSMMSMMAXSAMSSMSAMMMSXMSMXAAMXXMXMAAMASAMMSMSAMXMXMMAMAMXXAAAXSAMXMAAXAXSMMASMMSAAXAMMMMMAASMMXXXSAMXXSSXSAXMAAAXAXAAMXSMMMMSMSMSAAXM +MSMSMASXMAMXASXMMSMSAMMMSAAXXXAMMMXMMMSMMSXSAMASXMASMSMMMMSXSMMSXMSMMMMSSXSMMMMMASXMAAMSMMSXMASXSMSAXMSMMMXMXAAAMMSSSMMXMSXMAMMASXAXXMSSMMMA +AXAXAASMSAMXMMSMAMXSSMAXSMSSSSXSAMAASAMMAXAMXSAMAMAMAAXXAAAAAAAAAMMMXXMAXXAXASAMXSAMMMMASMXMSASXAASAMXXAAAASMMAMMSAMXXXXXAMXMASAMMSSXMAMAASM +SMXMMMSXAXXXAAXMASXMAMSXXAMAMAASAMSAMASMMXAMASXMAMSMSMSSMSXMSMMSXMASXSMASMMMMMMMAMAMSMSASXXAMMSXSMSASAMSMSXXAXMASMMSSMMXAASXXMMMSAAMMMXMMMSA +MAMXAMXMMASXMXSMSSMSAMXAMSMSMMMMXMXASAMASMMMAMASASXAAAXXAMMAXXAXAMXMMAMASAXAXAMMSSMMMXMXMXSSMXXAMXSXMAMMAXASMMMSXMAMAAMSSMMXAXAAMMXMASMMXAMX +SMAXXSAMXMSAMASMAXAMASMAMXAMXAXMAXXAMAMAMXAMSSMMSMMXMMMSXXASMMSSXMAMSXMAMMMSSMSAMAXMSAMASASAMXMXMAXASMMSAXXAASXMASMSXMMAMSSSMMSXSAMSMSAASMMM +SXSMAXMMAMXAMAXMXMMSAMXMSMSMSSMSAMMSMMSAMXMXMAMMAXAMMSMAXSMMAAAMASMMMMMMSXAXAAMASMMXSASXMXSXMXAAMXMXMSAMXMMSMMASAMAMMMMMSAXAAAXAXMMAXMMMMAAX +SAMMSXXXASXSMSSSMMXMXSXMAAAAMAXMASXXAMXAMAMASMMSMSMASAMXMMASMMXSAMMAMXMXAMXXMMSMMAXASAMXMAMXXASXSSXSAMXSAAXAXMAMXMMMAMSXMMSSMMMMMMSMSSXXSSMS +SAXAXAMSMMAXAMAXAMAMXMASMSMSMXMSSMXMMMSXXXSASXAAMAMXMXXSASAMAMXMASMXMXMAAAMMSASXSSMMMXMAMMSSMAMXAASMXSXSXSMXXMXSAMXSXSMAAXXAMXAXAXAXSMAXMAAA +MAMAMSMAAMAMAMAMMMAMASXMAXXXMMMXAAXXSAMXSXMXSMSSSMMSMSMMAMAMAMASAMMMMAMMXSAAMAMXAAAMAMSAMSAMXAMXSMSSMSAMAMASMMMMASAXMAXXMSXMASASMSMMSAMMSMMM +SXSXMAXMMMXSAMASXXXXAMXMAMMMSAMSMMMMMASXAAMASAAMAMMSAAXMSMMSASMMMSMASAMXAMMMMAMSSMMMAXMAMMAXSXSXXXMAMXAMXMAAAAASMMASXSSMMXMMXAAXAAXASAMXXASX +AMMAXASMSXMMAMAXAASMSMSMMXSASXMXMMSXSAMXMMXAMMMXSMAMXMAMAAXAAXXAMAXMXAXAAMXXXAXMAXMMXMSAXSXMMMMMMMSMMMMMXMMSSMXAMXXXXAAXXAXXAMSMMMSXSXMASMMM +SMMXMXXMAASMSMSSMXMAMAXXMAMMMMXASASXMAMMXMMMXMSAXMSSMXMSSSMMMMSAMXSXSAMSXMXMSSXSMMMSAXSMMSMAMASAAMAXMAXAMXAAXMASXMSMMSMMMMSMMSMXAAMMMMMXXMAS +MAASMMSMSMMAMAMXXASMMMMXMASXSXSAMASMSSMAAMASAAMASXAXMAMMAAAXXAXXASAMMAMMASXMAMAAXAAMMMMXAXAXSASXSMMSMSMAMMMXSMMXAAAXAAMAAAAXXAMXMSXMAAXASMXX +MMMSAAXAMMMAMAMMMMASMMSSSMSXAXMSMXMMAMMSASASMSMMMMMSXSSMMSMMMXSMMMASMXSMMMAMASMMMMMSXSSMSXSAMXSAMAXSAMSAMXAXSAMSMMMMSXSSMMAXMAMXXMAMSMSASMMS +XSXSMMMXMXMAMAMAAXMAXAMXAAMMMAAAXMAMAMAXMAMMXAMMMSXAMMAMAAAASMXAXSSMMASAMSXMASAAXMXSAMXAAAMSMMMAMMAMAMSXMMSXSAMMASXAMAXASXMXSAXSSSSMAAMMMMAA +MSAXMAAASXSXSMSSSSXSAMSXMMMAXSMMMSASXSSSSSSSXXXAAMMSXSAMXSAMXMASAMXAMASXMXMMASAMXMAMXMASMMMAXXMAMXMSAMXSMXXASXMXAMXSMXMAMXAAMMSXAAXMMMMSAMSS +AMXMMMMMMAMXAAMAAMAMMASXSASXMXAXXSASAAXAAAXMASMMMSAMMMAMAAXMASAXASMXMAMAMXAMXSXMAMASAMAXXMXASXXAXXASASAAMAMMMMSMMMXXXMMXMMMMSMXMMMMMXSXMAXXX +XMMSXSXSMMMSMMMMXMAMXMMASASMMSXMAMMMMMMMMMMMMMAMMMMSASXMASMSMSMSMMMAMMSMMXMSASAMASMSAMASASXASMSSXMMSMMMMMAXAAASASAXMMMXASASAMMXMXMAMASASMMMS +XSAMXMAXAAAAAMXSMMAMAXMAMSMAXMAMXSSMMXSAMXAXASXMXMASAMXMSMMXAXMAMAMXXAAXSMMMASAMASXSXMASAMMAMAAAASXSAAXXSXSMXMXAMMMSAAMSSXMASMSMASAMAMMMAXAM +XMASMMAMMMSSSMXMASXSSSMSSMSMAMAMXAAAAASASMSSMSAMAMMMAXXMAAMMAMSASXMXXXSXMAXMXMAMASXMASMMXMSSMMMSMMAMMXSAXXAXSXMMMXAXSXSXMASXMAAXAXMMAMXMMMSS +XSAMASXSXAXXMXMXAXAAAXXMSAASMSXXXMSMMXXXMAAMXSASXSMSMMSSSSMMMMMASMSMSXXASXMMMSMMXMASAMXAAXAAXMAXAMXMAXMAMXXMAMMSAMXMMXAXMASAMXMMSSSMMMSAXMXX +MMASXMAXMMMXMAAMXSMMMMSMMMMSMAMSMXAMXMSMMMMMAMMMMXAAXXXAMAMXAAMMXAAAXASMMAAAAAXXASAMAAMXMMSAMXXSXMMMMSMXMSSMXSASASXAAXMMMAMXXSAXAAAAAAMAMXXX +XSMMMMSMMAAAMMSAXAXAXAXAAXXXMAAAAXMSAMAAAXXMAXMAMMSSSSMXMASMSSSMMSMMMMMXMMXMMXSAMMASMMXSXMASMSXMAAMAAAXXMXAAAMXSAMMMAMXSAMXAXXAMXSSMMMSASMSM +MSAMXAAASMSSSMXAMMSMMXSMMXSASXSSSMASASMSMSSMAXSASAAAMAMXMASXAMXMAMAXAXAAMSSSXMMAXAASASASXSAMMSASXMSMSSMSMSMMXXAMXMASXMAXMSMXSSXXAMAXAASAMAAA +AMAXMAMMMMAAXAXXAXAMMMXAAAMMMAAAAMXMAMMMAMXMAMXAMMSMSAMXXAMMXMXMAMXSMSMXSAAXMASXMSXSAMASAMAXAMAMAAXAXMAAMXXXSAMXXAAMAMMXXMAMMAMXMMMMAMMMMSMX +MSMMXSSSMMXSMMMMSSXSXMMMMXSMMSMSMMAMAMXMAMXMASMAMMMXSASXMASAASXSMMXSAAXSMMSMXAAXAMAMXMAMMMSMMMAMMMMSMMSMSXMASXMMMMMXSASMMMSMSASASAXSSXMAMASA +MMASAMXMASXMAXAAMAMMASXMMXAMXXAAXSAMXMASAMXSAXXAMXAXXMAXSSSMMSAAASASMMMXASXAMMSMAMXMSXMXSAMAXSASXSMMAMXXMAMXXXXAAAAXXAAAAAAXSASASMMAAMXXSASX +MSAMXMASXMASAMMSSMASAXMASMMMMMSMMMASAMXSAMAXXMMMMMXMAXMAMXMAXMXMMMASXAXSXMXXAMAAXSSSMASMMMSAMSASAAAMMMSMMSXMASMSSXSMMXMSMSSXMAMAMMSMMSSMMXMX +AAXMMMMSASAAASAAAXAMMMMAMXMAXMAMMXXMAMASAMXXSMSASXMXXMSMMSSMMMMXXMMMMXXSAMXMMSASAMXASAMAAXMMMMAMMMSXMASAAAMMMAMAMXMXSAXAXAXXMAMXSAMXXAAASMMX +MSMMXSASAMMSMMMSSMMSXXMXSASMMSASAAMMXMXSAMXAMASXSAMSSMSAAAAAAMAMSMSASMMSAMXSXAMXMXSMMMSSXMASXSMSXAMAMASMMXXAMXMXMAMASASXSMMXXXXAMASAMXSSMAAX +AAAXASAMXMXAXAXXXASAMSMMSASAASMMMXSAXSMSXMMXXAMMSAMXAASMMSSSMMXAAAMASXAXMMAXMAMAMMSXMMMMXASXMAASMSXXMMXXMASMSMMMSMMMSAMMAMASXMSMSXMASXMAMSMS +SSSMXSASMSSSSMMSAXMAMXAAMXMMMSXMAAMMMXAXAXMMMMSAMAMXMMMMXXAAMXMSMSMAMMMSMMMSXSMASAMAXMAMXMAAXMMMMAMSXSSSMXSAAXMASAAASAMXAMXXAAAASASXSMXSXMAS +MMAMXSAMAAAAAAAAMMSMMSMMSASXAXMMMMSMAXSMMAXAAXMXSSMSXSASXSMMMMMAAXMSAXMAMASXAMSAMASXMMMSSMSMMMXXMAMXAXAAXAMXASXSSSMXMAMSXSXSMMMMSAMAMAAMAMAM +SXSMMMMMMMMMMMMSMAXAMXAASXSMSSXAASAMAMXAXSSXSASMXMAAAMAMAAAAAXMXSXXAMMSSSMSMMMMXMAMMSAMAXMAXAMXMSMSMMMSMMMSAMXMAMAMASXMMMMMAXAAMMMMAMSMXAMXS +AAMXXAASAMXAXAAXMSSMMSMMXMMXMAXSMSASMSSXMXAXMASMMMSMMMAMXMMMXMMSAMXMAXAMAMXAXAMMXASXSXMXSXSSSSMXAAAAMXMXXAAXXAMMMMSAXXAAAXMMSSMSASMSXMMSMMAA +MSMASMMSXMSMSMSSMAXMAXMXMASAXMAMXSAMXAMMMMMMMAMAXMXMXSSSXSAMSSMAAMMXXMXSAMXSMAASXXMAXAMAMMAMXAXXSSSSMAMXMASMMMMSAAMXSSSMXMAAAAXSASXMAXXAXMXM +XAXAAAAXAMAMAMXAXAMMSMAASXMXSMXXMXXSMMMMAAAMMMSMMXAMMMAAXMAXAAXXMMXSMMXSXSAASXMAMMMXMASAMASASMMXMAMXXAXAXMAXAXASMSSMMXAAAMMMMSMMMMASAMSMSSSS +SMSMSMMMXSASMSSSMXSAAASMSAMXMASMMMMXAXMMSSMMAMAMMSMXAAMMMSSMSSMSXSXMAXAXXSAMSSSMSMAASXMASAXMMASXMMASXMXSSMXSSMXSAAMAASMMMMMAAXAAASAMAXXAMAAA +SXXAMXSXAXAMXMAXXMMMSMXXSAMSAMXAAAXMSMMMAXMSMSASXMMSSSXXXAAMXAAXXSXXSMMSAMAXXAMAAMSMSAXXMAXASMMXSAAXXAXXAMAAMXMMXMAMMXAMAMSAMXSSMSXMMMMSMMMM +MXSXMAMMSSMXMXXMMMAAMAXAMAMXAMSMSXXAAAXMAMXAXXXXAAAAXXXMMMMSSMMMMMSAXAMAMSMMMMMSMXMXXMASMMSAMMXXXMAMMSMSAMMSMMMAMXXMSSSMAXAAXMAXAXMAAAXXAMXX +MAMMMXSAASAASMSAAMASXMMSMSMSMMSXAAMSMSMMAMSSSMASXMMSSMSMMSAXMASXMAMXXMMMXAAAAXMXXAXAMXXXAXMMMXMMMMSMAAAMSMXMASMAMSMXAAXMMMMAMXXMXMASMSSSSMSM +MXSASXMMSXSXSAASXMAXAMXAAAAXMAMMMMMXAXXXAXXAAMAMXAXAAAXAAMASMXMXMASMSSMXSSSMSSMAMSSMSMSMMMMASAAMSAAMSMSMAXMMAMXAMXMMMSMSMAXSXMASASXXMAXAAAAA +SSMXSAAXAMMMMXMMMMMSAASMSMSMMMXSXXSMMMSSMXMXMMSSSXMXMXMMMSSMMAMXSASAAAXXMAXXXAMAMXAMAXAAAMMAMASXMSXXAAXXMSASMSSMSAMXMAMAMSMXAXASASXMMSMMMSMS +MAMASXMMSAAAMAXAXAXSMMXMAMAAMMASMMMASAMASXAASMMMMAASMSAAMXAASMSMSMSMSMMSMMMMSMMMXXAMMSSXMSMXSMMAMXSSMSMMXXAAAAMMSMMASASASAXSXMMMAMXMAMAAAAXA +SMMASASMASMSXMSMMMXXSXXMXSMSMMASAXSAMXSAAMSMMAAAXMXAAXXMSSSMMXSASASXXAMXAXXAAXAAMSAMXAAASAXMAXSAMSXMMAAMSMSMMMSAMASASASXSMXSAMXMXMXMAXSMSMSX +AXMXMAXAMXXMXAAAMSMMAMSMMSAXXMASXMMXSMMMMXMASXMSXXMMMMSSXMMAXXMAMAMAMASMMMMSMSMXMAMXMMMMSASMMMMXMMAXXMMMAAAXAXMASMMMMAMXXMASAMASAMAMSXMXXASM +MMSSMMMSXSASMSMSMAAMMAAAAMAMXSXMXAMAXMASXMMMMXAAASAMXAXAAXSSMXMAMAMAMAMAAAXAAAASMMMXXXXXMXMMXAAAMMMMMSASMSMSMSSMMXXXMAMSSMMSXMASASMSMASAMASM +XAAAAXMAAMAMAXMAMXMMXSSSMMSMAXASMSMSMSAMAASXSMXMASASMMSSSMAXASMMSMSMSAMSMMMXXMMMAAMXSAMSSMMSMSMXSAMAAMXMXAXAMMAAXSMMXSSXAXXXAMMSAMXAMXMAMASM +MMMXMMMMXMMMSMSMSSMSXMXAAXXMAXXAAAAAMMMSMMMAXXXAASAMAMXAMMXMMMMAAXAMMXMMAAASXSASMMMSMAMAAMXSAXAASAMMXMAASMSSSSMMMSAAAXMXMSMMAMXMMMSXMMXXMAMX +MSSXMAAXAAXXMXMXAAXSASMSASMSASMMSMSMSXAAAAMMMMSMMMMSSMMAMMMSXAXSMXMSASMSXMMSAMMXAAXXMAMSSMXMAMAMMXMAXXMMAMAAMAASASMMMSAMXSAXSXMASAMXMAXSMSMS +AAAAMSSXMSSMSAMXSMMSXMAXAAAAAAXXAXXAXMSSSMMXAAAXXAAMAMMSSXAASXMASXXMXSXMASXMAMXXXMMSSMXXAAAMXMAXSSMMMASXSMMSMSMMASAAXAAMASMMAASAMXXSXXXAAAMA +MMSSMAMMXMAXSXSAMAAMMMSMMMSMSMSSXXMXMXAXXXXSMXSMMMSSMMAMAASMAMSAMXXMASASASASXMMSAAXXAMMMMMMMAMMSMXASXMSAMSAAXAXMXMMSSSMMXSXXSAMMSAXSASAMSMSM +XXAXMAMMASMMXMMAMMXSAAAAXAMXXAAAMSMSAMXSMSMSAAXMXAMAMMMMSAMXMMXAMXMXASAMASXMXAASXMMSMMSAAAMXSXSAMMAMAXMAMMMMSXXXMMSAMXAXAXXXXXMAMMSMAMMXMAMX +MMMSMMMSASXAAASMMAXSMMSSMMSMMXMMMAAAMAMXAXAMMMMAMSMMMXSAMAXXXXMSAMXSXMXMAXMMMMMSASAAXASXXMSAMMSASMSSMMMSMSSMMMMAAXMASXMMXSMMMXMASXXMAMXMMAMM +AAMXMAMMAMXXMMAAXAAXAAXXAMXAAXMSSMMMASAMXMSMSASMMXAAAASXSSMSMSAMASASAMXMSSMXAAAMMMAMMASAXSMXSASXMMAAAXMAAAAAAXSASMSMMMMSAXAAAXSXMMMSXXXAMXMA +SXSASXMXASXSMMSMMXXSMMMSSMMSMMSAMXXXAMAMSAMASAMXAMSMMMSAXXAAASASAMASXMAAMAXASMSXXXMXSXMMMAASMMMSAMXSMMSMSMSMMMSAXAAAMXAMMMSSSMMAMMMAMMMSXASM +XASASAXSASASXAAAXMXMASXAXXAAASMMXSAMXSAMMSSMMSMMMMXMSAMXMMSMXMMMXMXMASMSMMMAXAMMSXMASXMAXMMMAXAXXSAMXAXAMXXAMXMAMSMSMMXSXAXMAMSAMAMASAAXSMMX +MAMAMAMMAMAMMSMSAMMSAMMXMMSSSMAAXMSAASASAASMAAXASAMXMASASAXSAASAXMASAMSAASMXMAMAMXMASASMSXMSAMXSAMMSMASXMASXMAMMMXMXAXAMMSXSAMXASXSASMSMSXAM +MSMSMAMMAMXMAMMXMAMXSSXAXXXXXXMMSAMXMSSMMSSMSSSXSXAXSMMMAXMASXMMXSAMXSMSSXAMSXMASAMXSAMXSAMXMAAAXSXXXMAMXMASXXSMXMASAMXXSAMXXSSMMXMXSMMAMXXS diff --git a/day4/rust/Cargo.lock b/day4/rust/Cargo.lock new file mode 100644 index 0000000..b21cc6a --- /dev/null +++ b/day4/rust/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "rust" +version = "0.1.0" diff --git a/day4/rust/Cargo.toml b/day4/rust/Cargo.toml new file mode 100644 index 0000000..7d75412 --- /dev/null +++ b/day4/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "rust" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/day4/rust/src/main.rs b/day4/rust/src/main.rs new file mode 100644 index 0000000..58b29f3 --- /dev/null +++ b/day4/rust/src/main.rs @@ -0,0 +1,111 @@ +struct Direction { + x: isize, + y: isize, +} + +struct Map { + map: Vec>, + rows: usize, + columns: usize, +} + +impl Map { + fn get(&self, x: isize, y: isize) -> Option { + if x < 0 || y < 0 || x > (self.rows as isize) - 1 || y > (self.columns as isize) - 1 { + return None; + } + + Some(self.map[x as usize][y as usize]) + } +} + +fn main() { + let stdin = std::io::stdin(); + let mut map = Vec::new(); + + for line in stdin.lines() { + let line = line.unwrap(); + + let levels: Vec<_> = line.chars().collect(); + + map.push(levels); + } + + let rows = map.len(); + let columns = map[0].len(); + + let map = Map { map, rows, columns }; + + let search_sequence: Vec<_> = "XMAS".chars().collect(); + + let directions = vec![ + Direction { x: 0, y: 1 }, + Direction { x: 0, y: -1 }, + Direction { x: 1, y: 0 }, + Direction { x: -1, y: 0 }, + Direction { x: 1, y: 1 }, + Direction { x: 1, y: -1 }, + Direction { x: -1, y: 1 }, + Direction { x: -1, y: -1 }, + ]; + + let mut count = 0; + let mut count2 = 0; + + for x in 0..map.rows { + for y in 0..map.columns { + for dir in &directions { + let mut found = true; + for (idx, &s) in search_sequence.iter().enumerate() { + let row = x as isize + idx as isize * dir.x; + let column = y as isize + idx as isize * dir.y; + match map.get(row, column) { + None => { + found = false; + break; + } + Some(value) => { + if value != s { + found = false; + break; + } + } + } + } + + if found { + count += 1; + } + } + + // Part 2 + if let Some('A') = map.get(x as isize, y as isize) { + let row = x as isize; + let column = y as isize; + match ( + map.get(row - 1, column - 1), + map.get(row + 1, column + 1), + map.get(row + 1, column - 1), + map.get(row - 1, column + 1), + ) { + (Some('M'), Some('S'), Some('M'), Some('S')) => { + count2 += 1; + } + (Some('S'), Some('M'), Some('M'), Some('S')) => { + count2 += 1; + } + (Some('M'), Some('S'), Some('S'), Some('M')) => { + count2 += 1; + } + (Some('S'), Some('M'), Some('S'), Some('M')) => { + count2 += 1; + } + _ => (), + } + } + } + } + + println!("{}", count); + println!("{}", count2); +} diff --git a/day4/sample.txt b/day4/sample.txt new file mode 100644 index 0000000..1f4eda2 --- /dev/null +++ b/day4/sample.txt @@ -0,0 +1,10 @@ +MMMSXXMASM +MSAMXMSMSA +AMXSXMAAMM +MSAMASMSMX +XMASAMXAMM +XXAMMXXAMA +SMSMSASXSS +SAXAMASAAA +MAMMMXMMMM +MXMXAXMASX