Add Day 10
This commit is contained in:
parent
4816b640bf
commit
3ad5ad40c0
4 changed files with 140 additions and 1 deletions
|
|
@ -1,4 +1,4 @@
|
|||
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.31903.59
|
||||
|
|
@ -25,6 +25,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "core", "src\core\core.cspro
|
|||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aoc-2024-09", "src\2024\09\aoc-2024-09.csproj", "{BFF5A025-BCA5-426C-AA21-237E1059AEA7}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aoc-2024-10", "src\2024\10\aoc-2024-10.csproj", "{295CA1CA-AF90-41EC-A077-98D20A00A6AF}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
|
@ -74,6 +76,10 @@ Global
|
|||
{BFF5A025-BCA5-426C-AA21-237E1059AEA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BFF5A025-BCA5-426C-AA21-237E1059AEA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BFF5A025-BCA5-426C-AA21-237E1059AEA7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{295CA1CA-AF90-41EC-A077-98D20A00A6AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{295CA1CA-AF90-41EC-A077-98D20A00A6AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{295CA1CA-AF90-41EC-A077-98D20A00A6AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{295CA1CA-AF90-41EC-A077-98D20A00A6AF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{FAF70800-E2C3-4AD7-B433-86C1F20380F7} = {37CA8017-085A-4F6A-BADB-535F929C10B9}
|
||||
|
|
@ -85,5 +91,6 @@ Global
|
|||
{58941BB2-E4AC-40F0-AA92-BEF51DEFC859} = {37CA8017-085A-4F6A-BADB-535F929C10B9}
|
||||
{44BBC1CF-D2FC-4906-9691-B439EC9EFB8C} = {37CA8017-085A-4F6A-BADB-535F929C10B9}
|
||||
{BFF5A025-BCA5-426C-AA21-237E1059AEA7} = {37CA8017-085A-4F6A-BADB-535F929C10B9}
|
||||
{295CA1CA-AF90-41EC-A077-98D20A00A6AF} = {37CA8017-085A-4F6A-BADB-535F929C10B9}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
|||
88
src/2024/10/Program.cs
Normal file
88
src/2024/10/Program.cs
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Frozen;
|
||||
using System.Numerics;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Xml;
|
||||
|
||||
using ConsoleAppFramework;
|
||||
|
||||
using core;
|
||||
|
||||
var builder = ConsoleApp.Create();
|
||||
builder.Add("part-one", static ([Argument, FileExists] string file) =>
|
||||
{
|
||||
Console.WriteLine($"Result: {ReadFile(file, true)}");
|
||||
});
|
||||
builder.Add("part-two", static ([Argument, FileExists] string file) =>
|
||||
{
|
||||
Console.WriteLine($"Result: {ReadFile(file, false)}");
|
||||
});
|
||||
builder.Run(args);
|
||||
|
||||
static long ReadFile(string file, bool unique)
|
||||
{
|
||||
SymbolGrid grid = new();
|
||||
grid.Load(file);
|
||||
ScenarioMap map = new(grid);
|
||||
|
||||
HashSet<Vector2I> startingPositions = [];
|
||||
for (int x = 0; x < map.Width; x++)
|
||||
{
|
||||
for (int y = 0; y < map.Height; y++)
|
||||
{
|
||||
if (map[x, y] == 0)
|
||||
{
|
||||
startingPositions.Add(new(x, y));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
long result = 0;
|
||||
foreach (var position in startingPositions)
|
||||
{
|
||||
ICollection<Vector2I> target = unique ? new HashSet<Vector2I>() : new List<Vector2I>();
|
||||
Walk(map, position, target);
|
||||
result += target.Count;
|
||||
Console.WriteLine(target.Count);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
static void Walk(ScenarioMap map, Vector2I currentPosition, ICollection<Vector2I> results)
|
||||
{
|
||||
var height = map[currentPosition];
|
||||
if (height == 9)
|
||||
{
|
||||
results.Add(currentPosition);
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var d in s_directions.Span)
|
||||
{
|
||||
var newPosition = currentPosition + d;
|
||||
if (!map.IsValid(newPosition))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((map[newPosition] - height) != 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Walk(map, newPosition, results);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
partial class Program
|
||||
{
|
||||
static ReadOnlyMemory<Vector2I> s_directions;
|
||||
|
||||
static Program()
|
||||
{
|
||||
s_directions = (Vector2I[])[new(-1, 0), new(1, 0), new(0, -1), new(0, 1)];
|
||||
}
|
||||
}
|
||||
29
src/2024/10/ScenarioMap.cs
Normal file
29
src/2024/10/ScenarioMap.cs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
using core;
|
||||
|
||||
record class ScenarioMap
|
||||
{
|
||||
private readonly int[] _heights;
|
||||
|
||||
public int this[Vector2I position] => this[position.X, position.Y];
|
||||
|
||||
public int this[int x, int y] => _heights[y * Width + x];
|
||||
|
||||
public int Width { get; }
|
||||
|
||||
public int Height { get; }
|
||||
|
||||
public ScenarioMap(SymbolGrid grid)
|
||||
{
|
||||
(Width, Height) = (grid.Width, grid.Height);
|
||||
|
||||
_heights = new int[Width * Height];
|
||||
foreach (var (position, symbol) in grid)
|
||||
{
|
||||
_heights[position.Y * Width + position.X] = symbol - '0';
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsValid(Vector2I position) => IsValid(position.X, position.Y);
|
||||
|
||||
public bool IsValid(int x, int y) => x >= 0 && x < Width && y >= 0 && y < Height;
|
||||
}
|
||||
15
src/2024/10/aoc-2024-10.csproj
Normal file
15
src/2024/10/aoc-2024-10.csproj
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<RootNamespace>aoc_2024_10</RootNamespace>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\core\core.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
Loading…
Add table
Add a link
Reference in a new issue