Compare commits

..

15 Commits

Author SHA1 Message Date
dan612
4ad017f909 Start of day 3. 2025-12-13 10:59:52 -05:00
dan612
3f2ac3a266 Day 2 solution. 2025-12-12 17:40:04 -05:00
dan612
2b2bc8f134 Day 1 solution and individual routes to show code. 2025-12-08 20:05:35 -05:00
dan612
91d5eb7f0a Adding styles for a webpage. 2025-12-07 23:16:51 -05:00
dan
1a822fe8c5 Merge pull request '2025 Start' (#2) from 2025 into main
Reviewed-on: https://127.0.0.1:3000/dan/advent-of-code/pulls/2
2025-12-08 02:38:08 +00:00
dan612
c6531471f5 More udpates to gitignore and vendor. 2025-12-07 21:36:56 -05:00
dan612
d9f318c45a Remove vendor. 2025-12-07 21:35:23 -05:00
dan612
ba2fe0ea9c More updates. 2025-12-07 21:33:11 -05:00
dan612
8d7fb0f479 Start of 2025 solution. 2025-12-07 21:30:03 -05:00
dan
bd948c30f6 Merge pull request 'day_4' (#1) from day_4 into main
lgtm
2025-04-15 16:24:01 +00:00
calcu1on
7438c97219 things. 2025-04-15 12:23:23 -04:00
calcu1on
d6d310fcc8 Adding gitignore updates, changing around day4 to add directional based handling. 2025-04-15 12:23:23 -04:00
calcu1on
a98a34a23c Adding initial processing of file into a searchable map. 2025-04-15 12:23:23 -04:00
calcu1on
b6144e58eb Adding day 4 test file. 2025-04-15 12:23:23 -04:00
calcu1on
12149f9cf6 Adding source files. 2025-04-15 12:23:23 -04:00
28 changed files with 5602 additions and 3 deletions

3
.gitignore vendored
View File

@@ -1,3 +1,6 @@
/target
2016/twenty16/target
2024/rust/target
2023/rust/target
*/target
2025/vendor

140
2024/rust/inputs/day4.txt Normal file
View File

@@ -0,0 +1,140 @@
MSSMSAMXSAMASMSMSAMMMMMMMXSXSMMSAMXSSSMXMSMMSMXMXSXMMSAMXMSSSSSSMSASMSSMSAMXMSMXSXSMMMXSSMAMXXMXSXMAMSAMXXMXAXXSASAMXMMAMMSSXSXMMXSMMXSXXMXX
AAMAMXAMMAMSAAAAMAMAAAAMMAMMSAAXAAMAAAMAXAMAAAAAASAMXSXMASMAXMAAMMASMAAAMAMAMAAMSAXAAXMXAXMASXSAMASAMXSSMMSSSMASAAAXMASMMAAMMMAMSMSASMSXAMAM
MMSSXSSSSSMAMSMSMMMXXSSSMXSAMMMMAXMMAMSXSSSXMSMMXSAMXMAMXXMMMMSMMXAXMXMSMASASMSMXASMMXMSAMMAMXMASAMXSMXMXAAAAXMXASMMMMSAMMXXAMAMAASAMAXSAMXA
XXAXAXAAAMXMXXAXAMSSMMXAMAMASASAMXMXAXAAAAAMXAMSASXMASMMMMAMAXAXMMMSSXMXMXSXSAMXXAMMAXMAMMSSSXSAMMXXAMXAASMXMMXMMMMASXSAMXSSSSSSMXMAMSMSMAMX
XXMMMMMMMMMXMMMMSMAAAASAMXSXMAXMAXMSSSMMMMMMSASMMXAXASAAXXSSSXSASXMAXAMMSMMAMAMASXMXSXXAXAXAAXMASXSSSSMSMXSSXAAXAASAMXSXMMAAAAMAXSXXXAAXAAXA
SMXSXXXAAAAAXSMAMMSXMMSAMXAMMMMXAAMAMAXMXMAMSXMAMSSMASXMSMXAXAMSMAMASXMAXAXMMAMXMXASAMSSMMMMMMXXMAAAAMAXXAMXXSMSSMMXSXMAXAMMMMMMMMAXSSXMSASM
SASMMAASXSSMAAMXMAXSXMSAMAXMASXMSSMASXMAMSMXSASXMAMMAXAXSXMAMSMASXMXMMMMSXMMSSSSSSMMAXAXAASMASXSMMMMMMMMMSSMMAXAXXSMAAXAMSMMXMXXAMXMAMMMAAAX
XXAAMXMMAMMMSXMXMASAMXSASMMSASXMAXMAMMASAMMASAMXMAXMMSMXMASXMASMMXMMMMAAXMMXAXMAAAMMXMAXMMAXAMXMAXXASAMXAMAMSAMXSXAXSSMXMXASXMMSMMXMASAMMMMX
MSSXMSXMASXMMASXMMXASASXMAXMXMAMXSMXMSAMASXXMMMXMSXSMXXASAMSSXMMSAMAAMMSMMXMASMMXMMMAMXMSAMMMSMMASMMSAXAXSAMMASAMMMMXXAMSMMMAAAAAMXMASASXXXX
XAAXSXXSAMAXXAMXASXMMAXXMSMMMSMMAXMAMMAMAMXAAMMSAXAMMMSMXMSMXAMASMSSSSSXMMAMSMXMSXMSAMXAMMXMXAMXAAAASMMMMSAMXAMMSAXSAMXMAAASMMMSSMAMASMMMXMM
MAXMSAMMMSMMMSMSAMAMMMMXMASAAAXXSAMXMMSMSSSSSMMSAMXMAAAAXSAMSMMASAAAXMAXMAMMMMAMAXMMSMMAASAMMXMMSSMMMXAAAMXSAMXXSXSAMXSSSSMSMSAAXMXMAXMAXASX
AMSAMXMAMAMAXAAMXSXMAAXMMASMSSSMMXSXXSXAAAXXAAAXASASMMSSMMAMXXMASMMSMMAMSAMAAXSSMMSAAXMMMMASAMXAAAAMXSSXXXAXAMMMMMMAAAXMAMAMAMMSSMSSXMSMSASM
MSAMSMSMSASXSMXMASAMSMSAMMSAAAAAAASMMXAMMSMSSMMMXMAXAXXMAMSMMSMMXAMXMAMXSASMSSMAXAMMSSMAXSAMXAMMSSMMMXMASMMMAXSAAAMAMSMSSMSMAMMAAAAAAMAAMAMX
XAAXXASAMMSAAMXMASAMASMXMAMMMSMMMXSASASMSXAAMAMXSMAMSAMXSAAAXAXXXXMSSSSMSAMMMAMAMXSAAAXXMMAMXSSMMAMMAMXAMAMMSXSSSSSMAMAXMAMXMXSMMMMSSMMSMAMM
MMAMMMMAMAMXSMMMXSAMXSMXMAXMAMXXMXSAMAXXXMMMMSMAXAXAMASAXMSMMSSMSSXAAAXXMAMXSAMXAXMMXSMSMXSMMXAXSAMMSAMSSMSAXAMAMAAAAMSMMSMMSASXXMAMAMXAMAXM
XMMMAAAAMASXXAXSMMASAMXXSMMMAXMXSMMAMXMAASXMAXMMMMMASXMASAXXMASMAMMMSMMMSAMMXMSSSXXSSXMXMAXAXSMMSXMXMAXMAXMASMMAMSMMMSMASAMAMASXAMXSAMXAMXSM
XMASMMSSSXSAMXMXAAXMXSAXAMASMXSASASAMMMSMXAMAXAXAXXASASAMXMMMMSMAMAXAXAXSASMAAXAXAXSAXSAMXSMMMSMXMSSMSSSSMMAMASXXMXMMAXMMASAMSMMXSMSASMXSMAX
SSMSAMXAMXMXMASMMMMMXSXSMSASAAMASAMXMXAMXSMMASXMMSMASAMXAMXSAXXMASXSSMMXMMAXXMMAMXMMAMSMSXAAAAAXAAMAAAAXMAMXSAMXMXAXMMXSSMMMMMXMASXMAXAAAAXS
XAXMAMMASAAMSMXAAMAXMXMAMMXMMSMMMAMMSMASAXAAXXMAAAMMMAMXXMSMXSAMXMAAXAXAMMSXSAMSMXXXMMSAMXMXMSSSXSMMMMSMSSMMMMSASXMMASMMAXXAAMAMASAMXMMXSSMA
MSMMAMXAMXMXAMSMMMMSMSSMXSSMXMASXXMAXMAMASAMSMSMMMXAMSMAMSAMMSXSMSMMMSMAXAXAXMXAXMXMXAXAAXXXMXMXAMMSSMAASMMAAASMSAXSAAASXMSMXXAMAXMAXAMAMXAM
AAXXSAMXSASXXMAMMSXAMAAXMAAXMXAAMMMSSMXSASAXAXAMXMMMMAMSXSASAXASAAXXAXSSMAMAMXSSSMAXMSSSMMMMSAMMSMAAASMSMSMMMXSMSAMXMSMMMMAXMSMMMMXSSSMASMSM
SASXMASASASAXXASAMSSMSSMMXSMMMSMMAAMAMAMASMSSXMSSMASXMSXAMXMMMSMSMSMMMAXMXMAMXXXAMAMMMAAMSMAMAMAXMMSMMXMXAXSSMSAMMMMMMMAMSAXXASAMXMMAASAXAAS
MASXMASAMXMAMSAMXMAXMAMXSAMMSAXASMXSAMXMXMAAAASAMAAXAMMMXMMMXMMAAXXAMAMXMASASXMSMMSSMAXMMMMXSSMSSXXXAXMMXXXMAXMMMSSXAXSAMMXXSASMSAMMSMMXXSAS
MAMXMXXAXXMAMAXAMMXSSSSMMASAMSSMMAASXSXMXMMMSMMASMMSSMAASXSMAXMSMSMMMAXAMASMSAMXAAAAXXMMXSMAAAAAAXMSXMASMSAXSMMMMAXXXMSAXSAMMXMASMSMMXSSXMAS
MMMMSMSSMMXMSMMMMMMMMAMASAMAMAXXMMMMASMXAXMXMAMXMAMXXSMXMAASASMMAMAASXXSAMXASXMMMMSSMSAMAAMMSMMMSMMAMASXAXXAMXXAMXSXSAMAMMAXSAMXMXXMMAMXXMXM
XXMAAAAASXXMAXAAAAAAMAMAMXSXMSSSXSXMSMMSSMSAMXMMMSASAMXMMMMMXAAMMMMMSAAMXSMMMMSXAXMXAXAMSSXMXXXMAXXAXSXXMASMXMXASAMXSAMSXSMMXXSAAXSAMASXXMAS
XSXSMMMSXXASMSXSMSSXSAMAXMXMMMAAXSAMAAAAXMMAMSMMAXAAXMAXSSSSSSXXXAXAMXMMSXMXAAMXMMMMSMAXXXMXMMMSMXSMSXXASAMMAMASMXMAMMMMAAXXMASASMSMSASMASAM
MAMMAMSXMSAMXXAXAAAAAXMSMMAXSMMMMSAMSMMSSSMAAAMSMMXMXMXSAAAMAMXSSMSMSMASMAMSMMSASAMXAMXMMMMAAAAAMXXSAXSMMMMSAMMAAXSMMAAMMMAXMXMXMASXMAXXAMAS
AMASAMMMMSAMASAMMMMMMMXMASXMXXAAAMAMXAMAAASMSXMXXXAMMASMMSSMMMSXSAAAMXXAXAMAMXSASAXSAXXMAASXSMSSMAMAMMXXAMAMMSXMXMSASXMXSMMXXASMSMMAMXMMMSSM
XXMAXSAAASAMXAAMXXMAAXASAMASXMMMSSSMSMMMSMXMXMMMXXXXAMXXAXAXXMXAMSMSMMSMSXXASMMMMXMMAMXSSXSXXMAXMAXMXAMXMMAMMAMXMASAMXSAAASMSASMSAMXMXMAMXXX
SSSMASXSMSMMSMASXXXXAXXMASAMAXXAMXMXXXSXXXMMMAAXMAMASMMMMSMMMMMAMAXAXAXXAMXMXXAAMASXXSAMXASASASMSMSXXSMASMMMMAMMAMMMMAMMSMAAMASASAMASAMMXMXM
SAAAASAMAXXAMXAXMASMAMAMAMMSAMASMMSSMAMASMMASXMXAAAXXAAAXAAASMMMSXSSMSSMMMASMSMMSASAMMASMMMAMXMAXMAXMXMAXAAXXAMXXMAXMAMMMXMXMAMMMASXMAMSASMA
MSMMMSAMAMMSSMMSAMAAXAAMMSAMAMXMAXAAMMMXMAXAMAAXSXSAMSSMMMMMXAAASMXAAAXAXMXSAAAXMASAXSXMAMMMMSMXMXMAXAMSSMMXSAMSASXMASAMXASXMASMSAMMMAMSAMAS
AASAAMMMXMAMAMAAMSXSMSMSMMASXMSSXMSMSASASXMSSMMMMAAAXAXXSSSSSSMMSASMMMSXMASMMMMMMXSXMAXMAMXMXMAMMMSSMXXAAXAXMAMXAMASAMXAXSMXSAXXAAASXSAMXMSM
SMSMMSASXMASXMMMXXAMAAXMXSAMXMAAXXMASMSAMMSMAAMAXMSAMXSXSAAAMXAAXMASAAAAXXMASMMSMAXAAMSSMAMMAAXMAMXXXMASXMSSMSMXXSAMAMXSXMAXMASAMXXAAMMXAMAM
AXXAMMAAMSXMAXXXSSSSSXXMAMXAAXSMMXMASMMXMMAMSMMSMXMAAXAMMMMMMMXMXXAXMSMMMSAMXAASMSMSSXAAMSASXSSSSSMAXMAXAAXXAXAXXMMXXMAMMMSMMASXAMMMSMMSMSAS
MMMSMMAMXMASXMSXAAAAXXMMSSMMAMXXMXMMMMAAXXAXAAXAAAMAMMXSAMXMASMSSMSMMMASAXXAMAMSAAAXMMSXMMMAMXXAASMMSXAXMSMMXMXMXMAMSMXSAXMAXAXXSXAAXAXSXSXS
XSAMAXXXAMAMAAAMMMMMMASAMAXSSXSAMXXMAMSSMMXSAMXMXSAMXMASASXXMASAXAAXASAMSMSXMSXMMMSMSAXASMSMMMMMMMXASMXSAXMSASMSAAAAXAMMMSSMMXSMMXMSSMMMMMMS
XMAXAMXSXMXSMSMMAAAAXMMAXAMAMXMAMAASXMXAXAMMMXAXAMXSMMASAMMXXMMSMSMSXMAMXXSAAMAMSXAAMASMMAAXMXAXAXMAXAMMAMSAMXASMSMSMXXAAMAAMSAMXXSAMXAAAAAX
MMSMASXMMMAMXMASXMSSMXSSMSXMAMSAMXXAASMMMXSAASMMXXMAXMASXAMSXSAXMMASAMXMMASXMXAMXSMSMAMMMSMSSSMXMSASMSMMAMXMXMXMXXXMASMASXSMMASAMMMAMSSSSSSM
MAXSAXAXAMAMASMMSAXXAMAMAMMXSMSASXMXAMAAAASXMASMXSAMXMAXXAAXXMASASASMMMAMMMMMSSXMASAMXSXAAXAAAXSXXAXAXMSMSMXMSAXSXAMMASXMAMXSMMMSASAMXMAAAAA
MAMMXSMMSSSSMSAAXMAMMMAMAMXAMXSAMMSASMSMMMSMMASXAXSXSMSXSMSMMMAXAMAMAASAMXMAAAXSAMMXSAMXMXMMSMMAAMSMAMAAMSAMAMMSMMMXMAMMMSMMXAAAXMSAMAMMMMMS
MMSMAMMAMMMAMXMMMXAMXSASAXMASXMXMAAAXAXASXSXMASMMMMMXXAXXAXMAXXMMMMMSMSASASMSSSSXXMAMASAMSSMAAXMXAAMXXSMMXSMXMXAAXMAMASAAAXASMMMXXXMXSMXAAXX
MSAXAMAMMAXAMMMMMSASASASASMMMXSXMSMSMMSXMASAMASASAMASMMAMAMSSSMMXAAMAMXASASMAMMMSMMASXMXSAAXMXMXMSASMMMSAAXMSMSSSMXASMMMSSXMASAMMMXMAXXSXSSM
MSASXSMSSSSMSAAMASXMASAXXAAXASAMMAXXAASXSMSAMASXMAXAXAXMASXMAAXMAMMSXXMAMMMMASASMMSASAAXMMSMMSXXXMXAAAAAMMMAAAXAAASXXMXMAMAXAMXSAAMMASASMMAX
MMAMXMAXAXMASXSMASAMMMAMMXAMXAMXSAMMXMMASASAMXSASXMSMSMXAAAMMMMMXSXMMSMMMXSSMSXSAAMAMMMMMAXAAAASXMXSSMSXMSXMMXMAMXMMXSAXMSMMMSASASMXXMAMXSAM
MMAMXMXMSMMAMXXMMSXSAMXXAXMAMXXAMMSMMAMAMMSAMXSAMXAAAMXMMSXMMSAXAMAAAXAASAAAMMMSMMSMSMXAMSSMMMSMASAMXMXXAMXMSXSAMXMAASXMMAMMMSMXMAXMXXAXMMSS
ASMMXMMMMSMXXSXMASMMXMXMMXMAMSMMSAAMSSMAXXXXMAMAMMMMSMASAMAXAXMMMSSMSSSMSMSAMAAMAMAAAAMSMMAMXXAMXMMMAMAMSAMASAMXSAMMXSAMMASAAMXMXMAXMSMSAAAS
XMXSAAXXAXXAMMAMASASAMXMAASAMXMSAMXMAASXSSMAMASMMMAMMMMMASMMMSMMMAXMAMAAXMMASMSSMMMMMSMXASXMMMSSMXXMAMXMXAAAMAMAXXMAMSAXSASMMXAXXSAAXAMXMMSS
MAAMMMMMMSMXXMAMXMAMSAAMMMXASAMSAMXMMMXMAXSXSAMXAMAMMAXMMMAMAAMAMMMMASMMMXSAMAMAXXXXXMASAMXAXAXAMSXSASMSSXMASMMSXMMAMMAMMAMASASMXMSXMASXXMAM
MMMXMAAAMXMAASMMSMXMXSSSSMSXMAXSAMSSSMMXMMSXMASXMSXSMMMSMMAMSSSSXSASXSMMSAMAMMSAMSAASMMMSSXMMXSAMMASASMAMASMMMAAASMSMMXMMMMMMAMAXMXXSAMAMMMS
XXMASMSXSAMMXAXAAMXSXAXAAMSASXMSAMAAXAASXAMXMAMAAAXSMXAAASXMMMAAAXAXXMAXMAMAMXMMXXXMSAXMASAMXMSAMMAMMMMASAMAAMMMSMAXXXMAAXMXMXMXXXAAMSMMAAMA
XMMMXAAAMMMXMXMSXSAAMXMMMMSAMXXSAMMSMMSAMMSMMASMMMXMAMSSMAMSSMMMSMSMSSSMSAMASXAMSSMXSMMMAXMSMASAMMXSAASXMMSMMMMXMMXMSMASMXSAMMSMMMSSMMSASMSA
MAAMMSMMMMASMAAMAMMSMSMSXXMAMMMMSMAMASAMXMAXSASMXSMMMMAAMMAAAASAMXAAXAAAMXXAMMXMAAAAMMMMMSAAXMXMXMAXMMSMSMSAMXSMMMAMAXMXAAMASAAAAMAXAAXMXMAM
SSXMAAXSXXAASMSMAMSAXXAAXXXXAXXAAMASXMMXSMSXMASMASMMXMAMMXMSSMMASXMSMSSMSMSSSSMXMMXMSAAAMAMASMMMAMMXSAMXAAMXMMXASMMSSSMMMMSSMXSSSMASMMMXMXAM
MASMXSMSAMMXXMMMSMSMAMAMSSMSMSMSMSXSMXSAMAXXMSMMAXASMMMMSMMXAASMMMXXAMAAAAAAAAASXSAMXMXMXAMXAAASMSASMAMSMSMAXSMMMAXAMAAXXXXXAAMAMMAMAMMSSMSA
MAMMAMMMAXSASMSAXAXXXSAMXAAAAAAMASXMAAAAMAMAXXAMMSSMMAAAAAMSMMXMAMAMXMMSMSMMMMXXAXMSSSSMXSXSXSMSASXSMSMXSAMXSXAMSMMMXSAMXSMMMMMMMMMSMMAAMAAM
MASMMSASMMAAAXMASASMXSASMMSMSMSMAMAMSMXSMMXXMSSMMXMASMMSMMXAMSMSSMMSAMXMAMXMXSSMMXSAMXAAAMMMAXAMAMASAMSMXMMMMXMMAXXAXXSMMAMXMASASAMAXMMSSSMX
MASAAMXMMAMAMXMXMAMXXSMMMXMAMMAMASAMXXAMMMSAMAXXMMXAMMAMAMMAMSAAXASXMXMMXMXMAMXAMXMASXMMAXAMAMMMXMAMAXMMASAAXAMMMMMSSMAMSASMSASMSAXAXXAMMXXS
MAMXMXSAMSXSXXXAMXMXXMMXXXMAMSXSASMMMMXSAASAMAMMMMSMMMAMMMSAMMMMSMMSSXSAAMAMASMSMXSAMXXMASMMSSXMSMSSMMXSASMMMASMAMAMAMMMSASAMAMXXXMSMMXSAMMM
MMSMXXSASAAXMMSMSMMMSAASXXMXMAXMMXXAAMMMMMMXMASAAAAAAMASMAMAMXMASAMAMMMSMSASAXMAXMMASXXMAXXAXMASAAAMAAMMASAMSAMXAMASMMXXMAMMMSMSXMXMAMXXMAAX
SAAXMASXMMMMMAAAAASASXMSMXSAMSSSMAXSXMASXMSSSMSMSSSXMSASMSMSMXSXSMMASAAAXMAMXMMXMXSAMXMMSMMMMXMAMXMSMMAMXMAMMASXXSAXMMXSMMMXAMAMMXAXAXMASMSX
MSSXSMMASAAAMSSSMSMASMMXXASXSAAAMMXMMSMSAAAAAASAMXMMAMXXMXAXXAMMSASXSMMSMMAMMMSAMAMMSMMAMAAXAMMXXMAXAXSAMMAMMXMXMMMMSXAXAMXMASAMAMSSSMMMMMMM
XAXXSASAMSSMXAMXMAMXMAAAMXSSMMSMXSAMXMASMMMMMMMXMASMSMSMAMAMMASASXMAXAAAASAMAMMAMSXMAAMASXMMSSXSASXMAXXAXSMSMAMXMASAMMSSMMXSASAMMSAAMXMAAAAA
MSMMSAMXXAMXMMSAMXSXSMMXSAMASXXXAMASMMXMSASMSMSXMAMXXAAMXMAMXXMXSXMASMMSMMAMMMXAXXMSSSMAMAAXAAXSAMXXSAMMMSAAXXSASAMAMXMAAAAMMMMMXSMMMASMSMSS
AAAMXXSSMASAMXMMSMMXMSMAMASAMMXMMSXMASAAXXSAMASAMMSSMSMSXMXMSMMMXXMXXMXXMSXMASXMMXAXAMMSSSMMMSMMAMXMMXMAAMSAMXMASXSSMASXMMSSSSXXAMXXSXXXAAAX
SXSMSXMASAMMAXMMAAMAMAMASAMMAMMXXSASXSMSMMMMMAMAAAAMAAXXXXASAAXMAXXMASXSXMAMASASMMMMAMAAMXMXXAXSAMMXMAAMXXMXXXXAMXAASMSMXSAAAAAASAMMSXMSMMMS
MSMXMASXMXXXMSAXSXSASASXMXSSMXAMMSASAXMAMMAAMAMXMMMSSMSSMSXSXSAMSXMAMXMMASAMXSAASAXSAMXSXSXSSMXSASXMMMSMMXXMAMXMMAXAMXXMSMMXMMMMMASASAXMASMS
SAXMXAMXMSXSASMAMASXSASAMXMAXMXXAMMMMMSAXMXMSMSSMSXAXXAMAAAMAXAMMAMSMSASAMAMXMMMASASASXMAMMMASAXMSASAAXMMSSMSMSMASMMMSAXMASXSXMXSAMASAMMMSAM
MMMSMAXSAMAMAMXAMAMMMMMMXSSSMSMMMMAAAAMASMXXAAAAAAMMSMSXSMSMSMSXMAMMAMXMXSAMAMAXMMXMMMMMAMASAMMMMSAMMMMAAMXAAAAXAMAAAXXXSMMAMAMAMAMXMXMAMSAX
XXASXSMSAMXMMMSSMAMAAAAXMMAAAAAMSMSXSSMXMAASMSMMMMSAMAXAXAAAMAMMSXSMAMAXMSASMSSSXSAXAAXXAMXMMMMAMMXMAMSMMSMMMSMSXSSMMXSMASMASAMASXMAMAXAMSSM
MMMSAMAMAMXMXAAAMXSSXSMMXMMMSMXMMAXXMXMAMXMMAMXMXAXAMSMSMAMXMAMAXMXMAMMSASAMXAAXAXAMSXSSSSXSAASXXMXSXMAAMXMAXMAMXAMAMAAXXMSAXMSXMXSAMAXSMMXM
ASMSMMSSSMASMMSXSXAAAMMSMMSAXMMMMAMAMAXXMMXXXSAMMXSXMXAMXXMASXSMMAMMMAAMXSAXMASMSMSMXAAAAXAMMXXMASAMXXXSMASMSMMMAMSAMSXMSMMMSMXASMSAMSMMAMSS
SMAMXSXAMMASAXAASMMMXMAAAMMAMXAXMASXMMXSMMSSMMAMMMMAMMSMMMSXSXMASMSAMMXSAMXSXAAXMAMAMMMMMMMMMSMSAMASAMSXMXXMAAAXMXMMMMAMXAASAXXAXAMMMMASXMAS
MMAAXAMMMXMSMMMSMAMSMMSMSSMAMSSMMXXMASAAAAAASMXMAAAAXAAXAXAMXXMAAASMSSMMASMMMMSMMMMAMAXAMXMAXAMMASXMASMAXMXSSMMMXSMXASAMMSMSASMAMXMXAXMMSMXS
XSXSMMMAAAXMMSSMMSMAXXAXXAMXXAXAXMAMAMSSMMMAMXMSSXXSMSMSSXMMMXMMMMMAAXASASAXAXAXAMMXSMXMSSSSSMXMAMXXSAMMMMAMAAXXAXAMXMAMXXAMAMXXSAMMMSAAMMAM
MAMXAXSMSXSAAXAXAMSMMMMSAMXSMASMMSAMSXMXXXMSMXMMASXXMXXAMSMAMASMXMMMMXMMASMMSSMSASXXMAXMAMMXAXMXSSMMXXXMAMASXMMMSSSMSSSMAMAMAXMAXAMASAMXMMXS
XMASMMMAAAMMMSAMMXSXMXAAMXAAMXMMASAXMAMMMXMMASAMAMMAAMMASASXSASMAAXASMSMXMXAAAXMAMMAMXSMASMMSMSAMAASXSXSAMXMXAAXMAAAMAMMMSSMMXAMXSMXXXAAXXAA
MMMXMSMMMSMAXXAXMAMAMMMSSMSMSMSMAMXMSSMMMAAMAMMMMSSMMXSMSXSXMAMXASXXMAMXMXMMMXXMAMSXMAXXAMXAAAMMSMMMAMASMSSMSMMSMMMMMMMAAXAAMXSMAXXSMASMSMSS
MASAMSAMXAMSMSAMMMSAMASAXAAXMAXMSSMMAMAASMMMSMXAAXXXMXAASAMXMAMASMMSMAMSAMMSMSAXSAMXMXSMMMXSMSMXSAMMXMAMXAAXMXMXXMAAXXMMXSXMMSMMMSAAMAXAAAAX
SAXAXSMMSAMXAMAXMASASXSXMMMSMSMXMAXSAMMMXAAAMASMSMSAMSSMMMXXMMMMXAASMMMXSXAAASMMMAMXSAMXMAMXXXAASAMAAMXSMSMMMSMAMMSMSMMSASXMXSAAXMXMSMMXMMMM
MMXSMMXMAMMMSMSMMASXMXMASMMMAAAAXXMMASMXSXMMSAXXAASXXAAAASMSXSAXSMMSASXMMMXMMMAMSSMMXXMASMXSAMXXSAMMMSAMMXAXAAMASAMAXAXMASASMSSMSAAMAXSSSMSX
XAAXAMASXMAAAXMAMASAAXMAMAASMSSSSXXSAMXMXAXMMMMSSMMXMSSMMSAAASMXMMSXMMAAXAMMSASXAAAMAMXMAXAXMMSAMMSAAXMSASAMSMSMSAXSSSSMAMAXAXXXSMMSAASAAAMX
MMMSASASAMMSSXSAMXSMXSMSMSMXAXAAXXMMMSXMSSMAAAMXMAMAMMMXMMMMMMXSXXAMSXSMMMMXMAMMXXMMAMAMAMAMXXMASASMSMSMMMXAXMAXMXMXXAAMAXMMSMMMMAXMMMMSMMMA
MSASMMMXMXAAMXSAXXXXAMAMAXAMSMMMMSASASAMAXMSMSXAXASXSMSXMASMXMAMXMSASAXAAMMAMAMXSSXSASASMXASMMSMMASAXXSAXXSSSSSSSXSXMXMAMAMXXAAAMXSMMXXMSMXS
SMMMMMMMSMMSXMSXMSAMMSAMSMXMXAAAASAMASMMMSAMXMXSMMSMAXSASASASMAXXXMAMAMMMASMSXAAASASXXMAXMMMMASAMXMMMASMMXXAMAMXAAAMAAXAMSAMMXSSSMXMAXSAMXAX
SAMSMSAAXAAMAMXAXSAMXMXSXASXXMMXXMAMAMAAASXSASAMAMXMAMSAMXSAXSXMSAMAMAMASXSAMXMXMMMMMMMMSMSAMMSAMMASMXMAXXXMMMMMMMMASASXMXAMXAMAMAXXAMMXMMSS
SAMAASMMSMASAMSSMMXSMMMAMMMMXSSSXSAMXSMMMSASXMASMSSXMAMAMAMXMMMMMXSASXMAXXXAMXMMXAAAAXAMMAMXSAXASXAXMASXMMMXXASMAMXMMMMAMMAMMXMAMSMMMSMAXAMA
SAMMXMAMXMAMAMAXAMAXAXMAAAAXSAAMASXSMMMMAMMMMMMMXAXAXMAMMXSSMSAAAXSASXMSSSSMMXMAXXXSSSMSMMMSMMSAMMXXMMMMAAMMSMMSAXSMSASAMSSMMAMAMAXAAAMAMSSM
XAMSASAMXMASASMSXMASXMXMXSXSMMAMAMXXAAAMAMSASAAAXMSMMSSMXXMAAMSMSXMAMXAXAMXMAMXSSSMAXAAAMXXXAMMAMMMMXAAMMSAAASMMMSXASASAXXMAXSSMSXSMSSMMXMAX
SSMSASMMMXMAAXXSAMXSAAMSMXXXAASMSSXSXMSSSXSASMMXAXAMXAAMXAMMMMMXXXMAMMAMXMMMAMXAAAAMMMSMSSMMXMSAAASXSSMSAMMSMSMMMAMMMAMXMXXSMAAAAXMAXMAXXSAM
XAAMAMMSSMSMXMAMSAMXMSAAASMSXMXAXXXSAMXAXMMXMAXSMXSSMSSMMASXAXXAMMSMXMAMMAASASXMSMMXAXAAXMASAMXSMAAAAAAMMMMXASMSMMAXMAMASXAMMXMMMMXMSSMMXMAS
SMMMMMXXAAXXAMMSASAMXMXMSMAAMMMMMSAMXSMMMXMMMMMASMMXXMAMXAMXMMMXMAAMASASMSMMASMXMAXSSSSXMSAMASXXSSMMMMMMMAAMXMAAAXSXSSSMSMXSAMXMAAAXMAMSMMAM
SAMXMSXSMMMSXXSAMXXXXMXXXAXXAXAMAMMSMAMXSAASAMXAMMSMXSASXXMASAAXMSMXAMAMAMXMMMMAMSMAMMXAXMMSAMXAMMAXXXSSSMSMSMSMSXXMMASXXAMXMXMSMSXXSAMASXAS
SAMSSSMXXAXAXMXMASXMSMASMMMSSSMSXMAAMXXAMMSMAXMASXAAAMASMXAXXXSXMASMXSAMAMXMAAMAMMAXSASXMAXMMSMXMSMXSAAAMMMMMAXAXMSASAMXMMMMAAXXAMXXMASASXMM
SMMXAMMMMMXSXSAXXXAAAXMXAAXAAMXAMMSMSMMXSXMXAMXSMMMSMMXMAAMMSAXXSAMXAAXSXSSSSSSXSAXXMASXXXMAXMASAAMAMMMMMASAMSMAMASXMASMMMAASXSSSXSMSXMASAMX
SMMSXMASASMMASMSMSMSMSMSSMMMMMMSSMAAAAMAMAMMMSXAAXXMAMMMXXAAMXAAMASMMMMSMMAAMAAMXMAMMMMAMSSSMSAMAAMASAAXSAXAMAMXMXMAMSMMAAMMXXAMXAMXAXXASMMA
XAASASXMMMAMXMAAXAAXXAXAMXXMASXMAXXSSSMASAMAAMMMMMXSAMMMAMMXSMMMSXMAMAAXAXMMMMMMSSMSAMMAMMAXAMXSXXSASXSMMMSSMMMMMMMMXXASMXSAXMMMMSMMMMSAMAAA
SMMSAMAMSMXMAMXMXMAMXMASMSMSAMASMMMMMMMMXXSMXSAMMSAXASAXSMXAAXXXXAMAMMSSSMAASAAXMAXMAMSSXMAMSMMXMASAXXMASAAXAXMAAAXXMSAMAXMASAXMXMASAAMAMSMS
AAAMAMSMSAASXSAAMXSXXMAMAMMMMSMSASASASMXSASXAMAASMSSMMMXMAASMMSSMMMSXMMAMASMSSSSMMMSSMMXAMAMAAXXMXMXMXXAMMXXXMSSSSSXMMMMAMXSXXXMAXMMMXXAMAAX
SMMSAMAAXSMMASMSMAXASXAMAMXAXAASASASASAAMAMMSSMMMAXXAASXMMMXAMMMASAXAMMXMAMXXXXMMXAAMAXMMSASXSMMMAMXSSMSMSASAXAAXXXMSAMSMSMMAMMMSMAMAMSSSMSM
AAXSXSMMMAMXMXAMMXMASXXSSXXASMMMAMMMMMMMMAMAXXMAMSMXMASXAXSSXMASAMAXAMSAMXSXMXMSXMXSSSMSAAMSAMAMSMSAXAAAAASAAMMMMMXAMAXAAAAMSMAAAXAMMMAMAXAA
MSMMXMXXMXMAMMMMMAMMMMMAMAAXMMXMXMXAXXXMSMMMSAMXSAAXMSXXXMMAMSASAMASXMSASAAMMAMASMMMAMXMMSSMAMSMAAMXMMMMSMAMAXAAAAASXMMMSMXMXSMSSMXSSMXXMMMS
XXASASXMXAMMXAAMMASAAMMAMXMAAXXSAMSASMSAMAXMMAMXSASMXMAMXXMSMMAXXMASMASAMMSMXAXXSMAMAMMSMMAXXMMMXSASXSAMMMMXMSSSMSMMXASXXMSMXMMAXMMXMXMASXXM
MSAXAXAXMSMAXSSMSASMSXSSSMMSMMMSAMXMXMXASMMSMMSMSMMMXMXMAMMAAMAMXAMXMAMAMXAMSXSAMASMSMMAMMAMXXXMXAAMMSASAAXAMAMXMMMSSXMASAAMAAMMSMSASASAMAAM
MMMMSMMMAMMSMAAAMXSXMXXMAXAXAAASMMAXMSSXMXAMSAAASAAAAXMSAMSAMMAXXAMXMMSSMMMXAMMAMAMMAAXAXSMSXSMSXMAMASXMXSSXASXSXSAAAAMAMMMSSSMXAXMAMAMMMSAM
MSMAMAASMSAMMMMXMASXMAMXMMMSSMXSASXMAMMMAMSMXSMMMSMSMSAXSMXAXSASXMSAAAAAMMXMASAMXASXMSMAXSAXAXAAMXXMAXXMAMMMMMAAAMMMSMMXSSXXAAMMXXMSMSMSXMAS
AAMMSMXSXMAMXMASMMXXAAXSXMXAAMASXMAASAAAMAMXMASAXXMAAMMMMXMMMMASAAXXMMSSMMXSMMMMSMXXAMXSAMXMSMSMSSSMSXMMAXAAXMMMMMXXMAXAMMXMSMMMSMXMAMAAASMM
SMXXAAAMAXAMXXAXAAXMMXSXAMMSSMASMAAMASXSXXAMSASXSXMMMMASXAMAAMMMMXMXXMAMAXAXXAAXAMMMSMAMXAAXAAAAXXAMMASXSSSSSXXAXXMMSSMSXSXMASAAXMAMAMXMAMXA
AAASMSXMAMSAMXXMAMXAXMMMMMXAXMMXAXMXXMMMMXAXMASAAMXMMMASXXMASXSXXMAMAMAXMMMSSSSSMSAAMXAMSSXMMSMSMSMMSXMAMXMAXMSXSXMAXMXMAMXSASMSAMMSMMAXMMSX
MAMXAXMASXXASASXSMSSXMAAXAMXXSAMSXMAMMAAMMSMMXMXMASMSMASASXAMASMASASXSMSAAXXAAXXAMMMMMAMAMXAMAMAAAMASASXSAMAMMMAMAMMXSAMXMMMASXXAMAAAXMSAAMA
SSSMSMSAMAXAMASXXAAAAMSSMMSMXMMSMAXSMSMMSAAXXXAMXMXAAMXMAMMXMAMSXMAXMAAXMMSMMSMSSMSASMXMASMXMASMSMMASASAMAMMMAMXMAXSMXAXXMAXAMASXMSMXMAMMMSX
AAAAXAMXSMMSMMMMMMMSXMMMMMAAAMXAMMMXAAAXMMSMMMSMXMMSMSASAXXXMXMXXMSSMMMXSXAMAAAMAASASXAMSMMMSXMXAXMMSAMMMAMXSXSSXSAAASXMSMXMASMXMAMASMSMXMAA
MSMMMMMXMAMMAAXAAMXXAXAAASMXMSSMMSASXSSMMSAAMAAAASAXXXXMXSASXSMXXAAAXXMASXMMXSSSMMMXMASXAAAXAMSMMMSAMMMXSASMSMAXAMSMMMSXAAASAMXMMAMMSAAXSMSM
XMXXMAMXXXSXSMSSXMASMXMSMSXXSXXAAAMAAAMAXSXSMSMMXMASMSXXAAAXMASAMMSSMMMMMXXMAXXAXSXAASXSMSMSAMXAAAMASASMSASAXMAMXMASAAXSMSMMAMXASXSAMXMMMAAX
MSMSSSMMSMAAXXMASMAMAAXMMMXXXAMMMMMMMMMMMSXMMXXMAMSMAAXSMMSMMSAMXAAMMMASXSMSXXAXAMSXSAAMXAAXXMSMMMSSMMXAMMMMMMXXAMAXMMXXXMASXMSMXMMMSMXSMSMS
AAAXAXXAAMMMXAMAMMAMMMSAAAXSMMMSAXXAMAXSAMAXMAXXAMXMMMMXAAXXSAMXXMMSMSMSASASAASMSASMMMSMSMXMAASXSMMMAXMSMMAMXMMXSMXXAXSASAMXAAXSASMXAAAMAMAS
XMSMXMMSXSXMXMMMMSMSXXXMMSXMAMAMXSXMSASMAMXMMAMSSSXSAXSMMMSMMAMASMXSAAMMMMXMSMXAMAMAXAMAMXASAMXAMASXXMAXMXMSSSMAAAASMMMASXSSMMMSXMXMMMMAAMMM
SSMAAAXMXSAMXSAMASAMMSMMXXASAMXSASAXMMSXSMMAMAXXAMASMMMAAAAASXMAXXAMSMSSSXSAMXMAMASXMASAMSMSAAXMSAMXAXSXSAMXAAMAMMMAAMMAMMXAMMAMAMAXXASXMSSS
XMASXSMMXSAMMSASAMAAAMAMAMMXAXAMAMSSSSXAMAMSMMSMAMAMMASXMXSMMAMXSMXMAMAAAMXMMXMXSAMMMMSAMXAMMMMXMASXMAMAMXSMMMMXXASMMMMMSAMXMMASASASMXXAMXAS
MMAMMMASASAMAXAMASMMXSAMXSMSSMSMSMAMXAMXMAMXAAXXAMASMASAAAMMSXMAXXMMSSMMMAXSAMXAMASASAXXMMMMAAXMSMMMMMSAMXXMASXMSXSAMXMMMXMAMXASASASXMXSMMMM
AMASASXMASAMMSSSMMMMMSXSMMAAXMAAAMAMMSMMSSSSMMMSMSASMASMMMSASXSMSMXAXXXXXSMAXXMMXMMAMASXMAXMSXSXMASXSASASXASMSAMAMSAMXSAMMSASMMMMMXMMSAMXSAM
MMASASXMAMXMMAMXMAASMMXMAMMSSXMMMSASXAAXAAXXAAAXXMXSMAXAMXMAMAXAAAMSSMSAMXAXMSXSAMMSMXAAMSSMASAAMXAAMASAMMMMMSXMAASAMAMASMMMXMXAAMXXAMASXSAS
MSMMMMXMXMAXMAXXSSMSAMXMAMXAXXXAAMAMXSMMMSXSSMSAXMXXMXMSMXMSMXMMMSMMAMSAXXMXASASASAXMMSMMAAAMAMMSAMXMXMMMSAAMXASMMSAMAMXXXAMMMSSMSMSAMAMXSAM
MAAAAMAXMMAMSSMAMAMSAMASMSMSSMSMMSASAAAXAXMMXAMXMASMXXXMASAAAASMAMMSSMMMSMMSAMAMSMXSSXXAMSMMXMAAXAXXXXAAAXSMMXXXMAMMMSAAMSMXAAMAXXAMXMMXMMMM
SSSMSXSSXMXMAAAMXSASMMMSAAMMAMXAXSXMXSMMMMAASXMAMXMXXMASAMAMSMMASXMAMAASAAASAMXMAXXAXASMMXAAXXMSSMSSMSSMSMMMSSSSMMSXAAMXMAAMXSMMMMXMAMMAMAMX
XAAAAAXAMMXMXSMAMXAXXXAMMMMSAMMXMSMMAXXASXMMSASXMSMASMAMAMXXXAMAMAMXSSMSMSMSAMXSSMMAMMMAASXMMXAMAXAAXAXAMXXSAAMMAAAMXSMSMMXXAAXMAAMSXSAMSASM
XSAMMXMASXMAXXXMAMMMMMMMAMMSASXMAMAMASMMMAXXMAMMAAMXSMXMAMSSSMMXSXMAXMASMMMSAMXAAASMMXSMMXXAMXMSXMSXMMSMASXMMSMSMMSSXAASMAAMXMMSMSXXAMAXSAMA
MXMASXMMMASMMMSXSAASMXSSXMMSAXMAXSAMXSAASXMSMMMMSMSAXMSMMMAAAMSMMAAMXMASXAASMMMMMMAAAXMASXMAMXXMMMMMMXAMXASXAAAAAXAXMMAMMMSMSAXSAMMMMMSMSMSM
MAMAXMAMXXMASMSAMSSSXAMASAAMMMMSMSXSMSMMMMAAAASMAAMMSAAAAMMMMMAASASMSMASXMXMSAAXXMMXMMSAMMSAMXXSASAAMAXSAMXMSSSSSMMSMMMSASAAXMMMXMXXMAMXXAAX
XXSMMSMMSASXXAMAMXMMMMSAXMXMXASAXXMAMXAXSXSSSMMSXXSXSXSMMSXASMSMMAMAMMAMXMAMSSSSXXXXSAMAMXSASMXXXSMSSMXMAXXMMMXXMASXXAASMSMAMSASAMMMMSSSMSMS
XMAMAAAASXSMSSMMMSAAAMMMMXAMMXMMSSSMMMMMMAMAAAMMSXSAMAXAMXXXSAMAMMMAMMMMXMAMMAMAXXASMXSSMASMMMMMXMAXAXAXAMXMAMSXSSMSSMXSXMASMSASMSAAMXAAAAMX
XMAASMMMSAMAAXAXASMSMXAAAMAXMAMSXMAXMAMAMAMSMMAAMXMMMAMXMAMMMAMAXSSXSASASMSSMAMAMMMMAAAXMXMXSAASASXXASXSMMXSASMAMXAMXMAMASMMAMAMASMSSMMMSXSX
XMAMMAMSMAMMMSMMXXAXXSMSXSAASAMXASMMSMSASAXXAXMAMAMAMXSSMASXMMMXMMAASASAMAAAMAMAMXXXMMSMSMMAMSMSASAMXMMAAXASXMMAMMMMAMASMMXMMMAMXMAMXMSXAMSX
XXXXXMMASAMXXSXXXMSMMMAAAMXMXAMSMMXMAASXSMSMMMSAMMSASAAXSAXMXXSXSMAMMXMAMXMASXSAMXXAXMXAAAMXXMXMMMMMMASXMSMSSXSASAASMSASAXXMXSMSSMXMASAMXSMA
XXAMXXSXSMMXXMAMXMAAXMXMMAMMSAMAAAXSMXSAXAMXSASASAAMSMSXMXMMSAXASMXSMXSXMMSAMXSMSMSXMSSSSSMXMASXSAMXSMMAAMXMAMSAXAMMAMASMMMSAXSAAMSSMMMAMAMX
SSMMXXAMMMXMXMAMMMSSMASMXSAXMASMMMMXXAMXMSAXMASAMXSMXAMXXMSAAMMMMXMAMAMASMMSMMSAAASAMAAXMAXXSXSASMSMMAMMAMSSMMMMSXSMSMAMAAMMASMSMSAMMAXAXAMX
MAMSMMMMASAMASASXAAAMASMAMMSAMXAASMMMMSAMXAXMAMXMAXXMSMMSAMXSMSASXSAMXSAMAAXMAMSMMSAMXSMMXMMAMMAMXAMSSMMSMAAAXMASAAAXMSMSSSMXMAXMMASMSSMSSSM
MMMAAAXSASASASMSXMSSMASMXMXMASMSMMAAAAXXAASMSAMXMSSXMAAXMAMAAASASASXSAMXSMMSMMXXXXSAMAXAXAXAAMMAMSMXAMSAAMSSMMSAMSMMMMAAMAXMMSAXXMAMAAAAAMXA
SXSSSMXMASXMXSXMAMXAMXSAMXXXSXXMXSSMMSAXSAMAXXMXMMSXSMSMSAMSSXMXMAMSMXSAXMSXXXMXAMSMMXSSMSMSASMMMXSMXSMSSMMAMXMAXAMXSSMSMSMMMMMSMMASMSMMMSAS

View File

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

View File

@@ -1,15 +1,54 @@
use crate::Solution;
use std::fs;
use std::process;
struct Direction {
x: i32,
y: i32,
}
pub fn run_day_4() -> Solution {
let file = fs::read_to_string("./inputs/day4test.txt").expect("Unable to parse file");
let search_map: Vec<Vec<char>> = build_search_map(&file);
let directions: Vec<(i32, i32)> = vec![
(0,1), // N
(0,-1), // S
(1,0), // E
(-1,0), // W
(1,1), // NE
(-1,1), // NW
(1,-1), // SE
(-1,-1), // SW
];
// Lets solve day 4 here!
// idea 3.0
// iterate over each letter in the word search
// for each letter, build all possible words around it
// we know the character length is 4 (XMAS, SAMX)
// so if we have a given point, i.e. (3,4)
dbg!(directions[0].0);
// Return the solution
let solution = Solution {
day: 4,
answer_1: "test".to_string(),
answer_2: "another".to_string(),
};
solution
}
// Builds a searchable map.
fn build_search_map(row: &str) -> Vec<Vec<char>> {
let mut search_map: Vec<Vec<char>> = vec!();
for line in row.lines() {
let char_vec: Vec<char> = line_to_chars(&line);
search_map.push(char_vec.clone());
}
search_map
}
// converts a line into a vectory of chars
fn line_to_chars(row_line: &str) -> Vec<char> {
row_line.chars().collect()
}

BIN
2025/.DS_Store vendored Normal file

Binary file not shown.

22
2025/composer.json Normal file
View File

@@ -0,0 +1,22 @@
{
"name": "danchadwick/aoc-2025",
"description": "Advent of code 2025",
"type": "project",
"autoload": {
"psr-4": {
"Aoc2025\\": "src/"
}
},
"authors": [
{
"name": "dan612",
"email": "daniel.chadwick612@gmail.com"
}
],
"minimum-stability": "dev",
"require": {},
"scripts": {
"start": "sh start.sh",
"frontend": "sass theme/style.scss theme/style.css"
}
}

18
2025/composer.lock generated Normal file
View File

@@ -0,0 +1,18 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "27bdc8e2df9841256442f902f4485d9d",
"packages": [],
"packages-dev": [],
"aliases": [],
"minimum-stability": "dev",
"stability-flags": {},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {},
"platform-dev": {},
"plugin-api-version": "2.6.0"
}

63
2025/index.php Normal file
View File

@@ -0,0 +1,63 @@
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Aoc2025\Days\Day1;
use Aoc2025\Days\Day2;
use Aoc2025\Days\Day3;
use Aoc2025\Services\Template;
// First check if this is solution page request.
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if (str_starts_with($path, '/solutions')) {
$path_exploded = explode('/', $path);
if (count($path_exploded) < 3) {
header('Location: /');
}
$day = str_replace("-", '', $path_exploded[2]);
$day = ucfirst($day);
try {
$code = @file_get_contents(__DIR__ . '/src/Days/' . $day . '.php');
if (!$code) {
throw new Exception('File not found');
}
else {
echo "<pre><code class='language-php'>" . htmlspecialchars($code) . "</code></pre>";
}
}
catch (Exception $e) {
header('Location: /');
}
return;
}
if ($path != '/') {
header('Location: /');
}
// Day 1.
$day_1 = new Day1();
$day_1_answer = $day_1->run();
// Day 2.
$day_2 = new Day2();
$day_2_answer = $day_2->run();
// Day 3.
$day_3 = new Day3();
$day_3_answer = $day_3->run();
// Render the template.
$template = new Template('main.html');
$substitutions = [
'day_1_answer' => $day_1_answer['part_1'],
'day_1_answer_2' => $day_1_answer['part_2'],
'day_2_answer' => $day_2_answer['part_1'],
'day_2_answer_2' => $day_2_answer['part_2'],
'day_3_answer' => $day_3_answer['part_1'],
'day_3_answer_2' => $day_3_answer['part_2'],
];
$response = $template->render($substitutions);
echo $response;

4545
2025/inputs/day_1_input.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
851786270-851907437,27-47,577-1044,1184-1872,28214317-28368250,47766-78575,17432-28112,2341-4099,28969-45843,5800356-5971672,6461919174-6461988558,653055-686893,76-117,2626223278-2626301305,54503501-54572133,990997-1015607,710615-802603,829001-953096,529504-621892,8645-12202,3273269-3402555,446265-471330,232-392,179532-201093,233310-439308,95134183-95359858,3232278502-3232401602,25116215-25199250,5489-8293,96654-135484,2-17

View File

@@ -0,0 +1,4 @@
987654321111111
811111111111119
234234234234278
818181911112111

29
2025/src/Day.php Normal file
View File

@@ -0,0 +1,29 @@
<?php
namespace Aoc2025;
abstract class Day {
/**
* Run the day's challenge.
*/
abstract public function run();
/**
* Get the input file for the day.
*
* @param string $filepath
* The path to the input file.
*
* @return string
* The contents of the input file.
*/
public function getInputFile($file = '') {
if (!$file) {
throw new \Exception('Please provide name for the input file.');
}
return file_get_contents(__DIR__ . '/../inputs/' . $file);
}
}

68
2025/src/Days/Day1.php Normal file
View File

@@ -0,0 +1,68 @@
<?php
namespace Aoc2025\Days;
use Aoc2025\Day;
use Aoc2025\Services\Dial;
class Day1 extends Day {
/**
* Count of zeroes ended on.
*
* @var int
*/
protected $zeroCount = 0;
/**
* Count of zeroes encountered and ended on.
*
* @var int
*/
protected $zeroCount2 = 0;
/**
* Run the day's challenge.
*/
public function run() {
$input = $this->getInputFile('day_1_input.txt');
$input = explode("\n", $input);
$instructions = array_filter($input);
$dial = new Dial();
$dial->setPosition(50);
foreach ($instructions as $instruction) {
$distance = substr($instruction, 1);
$direction = substr($instruction, 0, 1);
if ($direction == 'L') {
for ($i = 0; $i < $distance; $i++) {
$dial->moveLeft();
if ($dial->getPosition() == 0 && $i < $distance - 1) {
$this->zeroCount2++;
}
}
}
if ($direction == 'R') {
for ($i = 0; $i < $distance; $i++) {
$dial->moveRight();
if ($dial->getPosition() == 0 && $i < $distance - 1) {
$this->zeroCount2++;
}
}
}
if ($dial->getPosition() == 0) {
$this->zeroCount++;
$this->zeroCount2++;
}
}
return [
'part_1' => $this->zeroCount,
'part_2' => $this->zeroCount2,
];
return $dial->getHitZero();
}
}

66
2025/src/Days/Day2.php Normal file
View File

@@ -0,0 +1,66 @@
<?php
namespace Aoc2025\Days;
use Aoc2025\Day;
class Day2 extends Day {
private function isInvalidId($num) {
$str = (string)$num;
$len = strlen($str);
// Try all possible pattern lengths (from 1 to len/2)
for ($patternLen = 1; $patternLen <= $len / 2; $patternLen++) {
// Only check if the pattern length divides evenly into total length
if ($len % $patternLen !== 0) {
continue;
}
$pattern = substr($str, 0, $patternLen);
$repetitions = $len / $patternLen;
// Must repeat at least twice
if ($repetitions < 2) {
continue;
}
// Check if the entire string is this pattern repeated
$repeated = str_repeat($pattern, $repetitions);
if ($repeated === $str) {
return true;
}
}
return false;
}
public function run() {
$input = $this->getInputFile('day_2_input.txt');
// Parse ranges
$ranges = explode(',', trim($input));
$sumPart1 = 0;
$sumPart2 = 0;
foreach ($ranges as $range) {
$range = trim($range);
list($start, $end) = explode('-', $range);
$start = (int)$start;
$end = (int)$end;
// Check each number in range
for ($id = $start; $id <= $end; $id++) {
if ($this->isInvalidId($id)) {
$sumPart2 += $id;
}
}
}
return [
'part_1' => $sumPart1,
'part_2' => $sumPart2,
];
}
}

17
2025/src/Days/Day3.php Normal file
View File

@@ -0,0 +1,17 @@
<?php
namespace Aoc2025\Days;
use Aoc2025\Day;
class Day3 extends Day {
public function run() {
$input = $this->getInputFile('day_3_input.txt');
return [
'part_1' => 'tes',
'part_2' => 'hello',
];
}
}

View File

@@ -0,0 +1,60 @@
<?php
namespace Aoc2025\Services;
class Dial {
/**
* The maximum number the dial can be set to.
*/
const MAX_NUMBER = 99;
/**
* The minimum number the dial can be set to.
*/
const MIN_NUMBER = 0;
/**
* The position of the dial.
*/
protected $position;
/**
* Moves the dial left.
*/
public function moveLeft() {
if ($this->position == self::MIN_NUMBER) {
$this->position = self::MAX_NUMBER;
}
else {
$this->position = $this->position - 1;
}
}
/**
* Moves the dial right.
*/
public function moveRight() {
if ($this->position == self::MAX_NUMBER) {
$this->position = self::MIN_NUMBER;
}
else {
$this->position = $this->position + 1;
}
}
/**
* Sets the position of the dial.
*/
public function setPosition($position) {
$this->position = $position;
}
/**
* Returns the position of the dial.
*/
public function getPosition() {
return $this->position;
}
}

View File

@@ -0,0 +1,56 @@
<?php
namespace Aoc2025\Services;
class Template {
/**
* The template to render.
*/
protected $template;
/**
* Creates a new Template object.
*/
public function __construct($template_name) {
$this->template = file_get_contents('templates/' . $template_name);
}
/**
* Renders the template and returns the result.
*/
public function render($substitutions = []) {
$this->replaceSections();
if ($substitutions) {
foreach ($substitutions as $key => $value) {
$this->template = str_replace('{{ ' . $key . ' }}', $value, $this->template);
}
}
return $this->template;
}
/**
* Replaces all sections in the template with the contents of the included file.
*/
public function replaceSections() {
preg_match_all('/\[\[\s*(.+?)\s*\]\]/', $this->template, $matches);
foreach ($matches[0] as $i => $placeholder) {
$filename = $matches[1][$i];
$template_path = rtrim('templates', '/') . '/' . $filename;
if (file_exists($template_path)) {
$contents = file_get_contents($template_path);
}
else {
$contents = "<!-- Missing include: {$filename} -->";
}
$this->template = str_replace($placeholder, $contents, $this->template);
}
return $this->template;
}
}

3
2025/start.sh Normal file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
php -S 127.0.0.1:8088

7
2025/templates/head.html Normal file
View File

@@ -0,0 +1,7 @@
<head>
<title>Advent of Code 2025</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="../theme/style.css">
</head>

47
2025/templates/main.html Normal file
View File

@@ -0,0 +1,47 @@
<!DOCTYPE html>
<html>
[[ head.html ]]
<body>
<div class="overlay"></div>
<div class="content container">
<h1 class="bitcount fs-1">Advent of Code <span class="accent">2025</span></h1>
<div class="card-wrapper">
<div class="card">
<div class="card-heading">
<h2 class="bitcount fs-1">Day 1</h2>
</div>
<div class="card-body">
<p class="bold">Part 1: {{ day_1_answer }}</p>
<p class="bold">Part 2: {{ day_1_answer_2 }}</p>
<a class="btn" href="/solutions/day-1">View Code</a>
</div>
</div>
<div class="card">
<div class="card-heading">
<h2 class="bitcount fs-1">Day 2</h2>
</div>
<div class="card-body">
<p class="bold">Part 1: {{ day_2_answer }}</p>
<p class="bold">Part 2: {{ day_2_answer_2 }}</p>
<a class="btn" href="/solutions/day-2">View Code</a>
</div>
</div>
<div class="card">
<div class="card-heading">
<h2 class="bitcount fs-1">Day 3</h2>
</div>
<div class="card-body">
<p class="bold">Part 1: {{ day_3_answer }}</p>
<p class="bold">Part 2: {{ day_3_answer_2 }}</p>
<button>View Code</button>
</div>
</div>
</div>
</div>
</body>
</html>
<html>

BIN
2025/theme/images/.DS_Store vendored Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

1
2025/theme/js/main.js Normal file
View File

@@ -0,0 +1 @@
// console.log('hello world');

View File

@@ -0,0 +1,33 @@
.card {
background-color: var(--primary-2);
padding: 15px;
flex: 1;
h2 {
margin: 0;
color: var(--primary-0);
border-bottom: 1px solid var(--primary-3);
margin-bottom: 12px;
font-size: 2.5rem;
}
&-wrapper {
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
vertical-align: top;
align-items: flex-start;
gap: 12px;
}
&-body {
display: flex;
flex-direction: column;
gap: 12px;
justify-content: space-between;
p {
color: var(--primary-0);
}
}
}

View File

@@ -0,0 +1,14 @@
.fs-1 {
font-size: 2rem;
line-height: 2.2rem;
@media (min-width: 768px) {
font-size: 3rem;
line-height: 3.2rem;
}
@media (min-width: 1024px) {
font-size: 4rem;
line-height: 4.2rem;
}
}

193
2025/theme/style.css Normal file
View File

@@ -0,0 +1,193 @@
@import url("https://fonts.googleapis.com/css2?family=Bitcount+Prop+Double+Ink:wght@100..900&family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap");
:root {
--primary-0: #230C33;
--primary-1: #592E83;
--primary-2: #9984D4;
--primary-3: #CAA8F5;
--primary-accent: #B27C66;
}
.accent {
color: var(--primary-accent);
}
.bitcount {
font-family: "Bitcount Prop Double Ink", system-ui;
font-optical-sizing: auto;
font-weight: 500;
font-style: normal;
font-variation-settings: "slnt" 0, "CRSV" 0.5, "ELSH" 0, "ELXP" 0, "SZP1" 0, "SZP2" 0, "XPN1" 0, "XPN2" 0, "YPN1" 0, "YPN2" 0;
}
.montserrat {
font-family: "Montserrat", system-ui;
}
.light {
font-weight: 100;
}
.regular {
font-weight: 500;
}
.bold {
font-weight: 700;
}
.bolder {
font-weight: 900;
}
body {
min-height: 100vh;
background-image: url("images/holiday.jpg");
background-size: cover;
background-position: center;
background-repeat: no-repeat;
color: var(--primary-3);
font-family: "Montserrat", system-ui;
font-size: 16px;
line-height: 1.5;
}
@media (min-width: 768px) {
body {
font-size: 18px;
line-height: 1.6;
}
}
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: var(--primary-1);
opacity: 0.85;
z-index: -1;
}
h1 {
color: var(--primary-0);
text-align: center;
}
h2,
h3,
h4,
h5,
h6 {
font-family: "Montserrat", system-ui;
font-weight: bold;
line-height: 1.2;
}
@media (min-width: 768px) {
h2,
h3,
h4,
h5,
h6 {
line-height: 1.3;
}
}
p {
margin: 0;
}
a {
color: var(--primary-accent);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
ul {
list-style: none;
margin: 0;
padding: 0;
}
a.btn {
display: block;
text-decoration: none;
}
button, .btn {
background-color: var(--primary-0);
border: none;
border-radius: 4px;
color: var(--primary-text);
cursor: pointer;
font-family: "Montserrat", system-ui;
font-size: 16px;
font-weight: bold;
line-height: 1.2;
padding: 8px 16px;
text-align: center;
text-decoration: none;
transition: background-color 0.2s ease-in-out;
}
button:hover, .btn:hover {
background-color: var(--primary-1);
}
button:active, .btn:active {
background-color: var(--primary-2);
}
.container {
max-width: 1024px;
margin: 0 auto;
padding: 0 16px;
}
.fs-1 {
font-size: 2rem;
line-height: 2.2rem;
}
@media (min-width: 768px) {
.fs-1 {
font-size: 3rem;
line-height: 3.2rem;
}
}
@media (min-width: 1024px) {
.fs-1 {
font-size: 4rem;
line-height: 4.2rem;
}
}
.card {
background-color: var(--primary-2);
padding: 15px;
flex: 1;
}
.card h2 {
margin: 0;
color: var(--primary-0);
border-bottom: 1px solid var(--primary-3);
margin-bottom: 12px;
font-size: 2.5rem;
}
.card-wrapper {
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
vertical-align: top;
align-items: flex-start;
gap: 12px;
}
.card-body {
display: flex;
flex-direction: column;
gap: 12px;
justify-content: space-between;
}
.card-body p {
color: var(--primary-0);
}
/*# sourceMappingURL=style.css.map */

1
2025/theme/style.css.map Normal file
View File

@@ -0,0 +1 @@
{"version":3,"sourceRoot":"","sources":["style.scss","partials/font-scale.scss","partials/cards.scss"],"names":[],"mappings":"AACQ;AAGR;EAEE;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA,yBACE;;;AAYJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAXF;IAYI;IACA;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;;AAEA;EATF;AAAA;AAAA;AAAA;AAAA;IAUI;;;;AAIJ;EACE;;;AAGF;EACE;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;;;ACzJF;EACE;EACA;;AAEA;EAJF;IAKI;IACA;;;AAGF;EATF;IAUI;IACA;;;;ACXJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE","file":"style.css"}

159
2025/theme/style.scss Normal file
View File

@@ -0,0 +1,159 @@
// Fonts.
@import url('https://fonts.googleapis.com/css2?family=Bitcount+Prop+Double+Ink:wght@100..900&family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap');
// Variables
:root {
// colors
--primary-0: #230C33;
--primary-1: #592E83;
--primary-2: #9984D4;
--primary-3: #CAA8F5;
--primary-accent: #B27C66;
}
.accent {
color: var(--primary-accent);
}
.bitcount {
font-family: "Bitcount Prop Double Ink", system-ui;
font-optical-sizing: auto;
font-weight: 500;
font-style: normal;
font-variation-settings:
"slnt" 0,
"CRSV" 0.5,
"ELSH" 0,
"ELXP" 0,
"SZP1" 0,
"SZP2" 0,
"XPN1" 0,
"XPN2" 0,
"YPN1" 0,
"YPN2" 0;
}
.montserrat {
font-family: "Montserrat", system-ui;
}
.light {
font-weight: 100;
}
.regular {
font-weight: 500;
}
.bold {
font-weight: 700;
}
.bolder {
font-weight: 900;
}
body {
min-height: 100vh;
background-image: url("images/holiday.jpg");
background-size: cover;
background-position: center;
background-repeat: no-repeat;
color: var(--primary-3);
font-family: "Montserrat", system-ui;
font-size: 16px;
line-height: 1.5;
@media (min-width: 768px) {
font-size: 18px;
line-height: 1.6;
}
}
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: var(--primary-1);
opacity: 0.85;
z-index: -1;
}
h1 {
color: var(--primary-0);
text-align: center;
}
h2,
h3,
h4,
h5,
h6 {
font-family: "Montserrat", system-ui;
font-weight: bold;
line-height: 1.2;
@media (min-width: 768px) {
line-height: 1.3;
}
}
p {
margin: 0;
}
a {
color: var(--primary-accent);
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
ul {
list-style: none;
margin: 0;
padding: 0;
}
a.btn {
display: block;
text-decoration: none;
}
button, .btn {
background-color: var(--primary-0);
border: none;
border-radius: 4px;
color: var(--primary-text);
cursor: pointer;
font-family: "Montserrat", system-ui;
font-size: 16px;
font-weight: bold;
line-height: 1.2;
padding: 8px 16px;
text-align: center;
text-decoration: none;
transition: background-color 0.2s ease-in-out;
&:hover {
background-color: var(--primary-1);
}
&:active {
background-color: var(--primary-2);
}
}
.container {
max-width: 1024px;
margin: 0 auto;
padding: 0 16px;
}
// partials
@import "partials/font-scale";
@import "partials/cards";