-
-
Notifications
You must be signed in to change notification settings - Fork 57
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
111 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
## --- Day 4: Ceres Search --- | ||
"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](/2019/day/10)! | ||
|
||
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 <em>word search</em> (your puzzle input). She only has to find one word: <code>XMAS</code>. | ||
|
||
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 <code>XMAS</code> - you need to find <em>all of them</em>. Here are a few ways <code>XMAS</code> might appear, where irrelevant characters have been replaced with <code>.</code>: | ||
|
||
Read the [full puzzle](https://adventofcode.com/2024/day/4). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
namespace AdventOfCode.Y2024.Day04; | ||
|
||
using System; | ||
using System.Collections.Generic; | ||
using System.Collections.Immutable; | ||
using System.Numerics; | ||
using System.Linq; | ||
|
||
using Map = System.Collections.Immutable.ImmutableDictionary<System.Numerics.Complex, char>; | ||
|
||
[ProblemName("Ceres Search")] | ||
class Solution : Solver { | ||
|
||
Complex Up = -Complex.ImaginaryOne; | ||
Complex Down = Complex.ImaginaryOne; | ||
Complex Left = -1; | ||
Complex Right = 1; | ||
|
||
public object PartOne(string input) { | ||
var mat = GetMap(input); | ||
return ( | ||
from pt in mat.Keys | ||
from dir in new[] { Right, Right + Down, Down + Left, Down} | ||
where Matches(mat, pt, dir, "XMAS") | ||
select 1 | ||
).Count(); | ||
} | ||
|
||
public object PartTwo(string input) { | ||
var mat = GetMap(input); | ||
return ( | ||
from pt in mat.Keys | ||
where | ||
Matches(mat, pt + Up + Left, Down + Right, "MAS") && | ||
Matches(mat, pt + Down + Left, Up + Right, "MAS") | ||
select 1 | ||
).Count(); | ||
} | ||
|
||
// check if the pattern (or its reverse) can be read in the given direction | ||
// starting from pt | ||
bool Matches(Map map, Complex pt, Complex dir, string pattern) { | ||
var chars = Enumerable.Range(0, pattern.Length) | ||
.Select(i => map.GetValueOrDefault(pt + i * dir)) | ||
.ToArray(); | ||
return | ||
Enumerable.SequenceEqual(chars, pattern) || | ||
Enumerable.SequenceEqual(chars, pattern.Reverse()); | ||
} | ||
|
||
// store the points in a dictionary so that we can iterate over them and | ||
// to easily deal with points outside the area using GetValueOrDefault | ||
Map GetMap(string input) { | ||
var map = input.Split("\n"); | ||
return ( | ||
from y in Enumerable.Range(0, map.Length) | ||
from x in Enumerable.Range(0, map[0].Length) | ||
select new KeyValuePair<Complex, char>(Complex.ImaginaryOne * y + x, map[y][x]) | ||
).ToImmutableDictionary(); | ||
} | ||
} |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
2414 | ||
1871 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.