mirror of
https://github.com/farcasclaudiu/advent_of_code_2022.git
synced 2026-06-22 07:01:22 +03:00
init current
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
namespace day12.test;
|
||||
using FluentAssertions;
|
||||
public class UnitTestProblem
|
||||
{
|
||||
[Fact]
|
||||
public void TestProblem1()
|
||||
{
|
||||
var problem = new Problem();
|
||||
problem.ResolvePart1("testdata.txt");
|
||||
|
||||
problem.Result1.Should().Be("31");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestProblem2()
|
||||
{
|
||||
var problem = new Problem();
|
||||
problem.ResolvePart2("testdata.txt");
|
||||
|
||||
problem.Result2.Should().Be("29");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
global using Xunit;
|
||||
@@ -0,0 +1,32 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../day12/day12.csproj" />
|
||||
<Content Include="testdata.txt">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" Version="6.8.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
|
||||
<PackageReference Include="xunit" Version="2.4.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="coverlet.collector" Version="3.1.2">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,5 @@
|
||||
Sabqponm
|
||||
abcryxxl
|
||||
accszExk
|
||||
acctuvwj
|
||||
abdefghi
|
||||
@@ -0,0 +1,99 @@
|
||||
namespace day12;
|
||||
|
||||
using FastGraph;
|
||||
using FastGraph.Algorithms;
|
||||
|
||||
public class Node
|
||||
{
|
||||
private Node() { }
|
||||
|
||||
public static AdjacencyGraph<Node, TaggedEdge<Node, string>>
|
||||
graph = new FastGraph.AdjacencyGraph<Node, TaggedEdge<Node, string>>();
|
||||
|
||||
public static void InitGraph()
|
||||
{
|
||||
graph = new FastGraph.AdjacencyGraph<Node, TaggedEdge<Node, string>>();
|
||||
AllNodes.Clear();
|
||||
}
|
||||
|
||||
public static List<Node> AllNodes = new();
|
||||
public static Node Create(int x, int y, string value)
|
||||
{
|
||||
var node = new Node
|
||||
{
|
||||
X = x,
|
||||
Y = y,
|
||||
Value = value
|
||||
};
|
||||
AllNodes.Add(node);
|
||||
|
||||
//add vertex to graph
|
||||
graph.AddVertex(node);
|
||||
|
||||
return node;
|
||||
}
|
||||
public int X { get; set; }
|
||||
public int Y { get; set; }
|
||||
public string Value { get; set; }
|
||||
public List<Node> Vertices { get; set; } = new List<Node>();
|
||||
|
||||
private bool IsFilled = false;
|
||||
|
||||
public void AddVertices(string[] lines)
|
||||
{
|
||||
if (IsFilled)
|
||||
return;
|
||||
// System.Console.WriteLine($"node: {X} - {Y}");
|
||||
TryAddVertice(lines, Value, X - 1, Y);
|
||||
TryAddVertice(lines, Value, X + 1, Y);
|
||||
TryAddVertice(lines, Value, X, Y - 1);
|
||||
TryAddVertice(lines, Value, X, Y + 1);
|
||||
IsFilled = true;
|
||||
foreach (var vertice in Vertices)
|
||||
{
|
||||
vertice.AddVertices(lines);
|
||||
}
|
||||
}
|
||||
|
||||
private void TryAddVertice(string[] lines, string currentValue, int chkX, int chkY)
|
||||
{
|
||||
if (chkX < 0 || chkY < 0 || chkY > lines.Length - 1 || chkX > lines[0].Length - 1)
|
||||
return;
|
||||
|
||||
if (
|
||||
(lines[chkY][chkX] >= 'a' && //Value[0] - 1 &&
|
||||
lines[chkY][chkX] <= (Value[0] + 1)) ||
|
||||
(lines[chkY][chkX] == 'E' && 'z' >= Value[0] - 1 && 'z' <= Value[0] + 1))
|
||||
{
|
||||
var existNode = AllNodes.FirstOrDefault(n => n.X == chkX && n.Y == chkY);
|
||||
if (existNode == null)
|
||||
{
|
||||
//create node
|
||||
var chkNode = Node.Create(chkX, chkY, lines[chkY][chkX].ToString());
|
||||
Vertices.Add(chkNode);
|
||||
// System.Console.WriteLine($"add vertice {chkX} - {chkY} : {lines[chkY][chkX].ToString()}");
|
||||
// add edge to graph
|
||||
var edge1 = new TaggedEdge<Node, string>(this, chkNode, "create hello");
|
||||
graph.AddEdge(edge1);
|
||||
}
|
||||
else
|
||||
{
|
||||
//reuse node - link
|
||||
if (!Vertices.Contains(existNode))
|
||||
{
|
||||
Vertices.Add(existNode);
|
||||
//link
|
||||
// System.Console.WriteLine($"link vertice {chkX} - {chkY} : {lines[chkY][chkX].ToString()}");
|
||||
// add edge to graph
|
||||
var edge1 = new TaggedEdge<Node, string>(this, existNode, "link hello");
|
||||
graph.AddEdge(edge1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"N:{X}-{Y}:{Value}";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
namespace day12;
|
||||
|
||||
using FastGraph;
|
||||
using FastGraph.Algorithms;
|
||||
|
||||
public class Problem
|
||||
{
|
||||
public string Result1 { get; set; }
|
||||
public string Result2 { get; set; }
|
||||
|
||||
public void ResolvePart1(string arg)
|
||||
{
|
||||
var lines = File.ReadAllLines(arg);
|
||||
|
||||
var nrLines = lines.Length;
|
||||
var nrColumns = lines[0].Length;
|
||||
|
||||
var aStarts = new List<(int X, int Y)>();
|
||||
for (int i = 0; i < nrLines; i++)
|
||||
{
|
||||
var line = lines[i];
|
||||
var lineIdx = 0;
|
||||
while ((lineIdx = line.IndexOfAny("S".ToArray(), lineIdx)) >= 0)
|
||||
{
|
||||
aStarts.Add((lineIdx++, i));
|
||||
}
|
||||
}
|
||||
|
||||
var endY = Array.IndexOf(lines, lines.First(x => x.Contains("E")));
|
||||
var endX = lines[endY].IndexOf('E');
|
||||
// System.Console.WriteLine($"E: {endX} - {endY}");
|
||||
|
||||
var startY = aStarts.First().Y;
|
||||
var startX = aStarts.First().X;
|
||||
// System.Console.WriteLine($"S: {startX} - {startY}");
|
||||
|
||||
Node.InitGraph();
|
||||
var root = Node.Create(startX, startY, "a");
|
||||
root.AddVertices(lines);
|
||||
|
||||
var currentPathCount = -1;
|
||||
var endNode = Node.AllNodes.FirstOrDefault(n => n.X == endX && n.Y == endY);
|
||||
if (endNode != null)
|
||||
{
|
||||
var tryGetPaths = Node.graph.ShortestPathsDijkstra(t => 1, root);
|
||||
if (tryGetPaths(endNode, out IEnumerable<TaggedEdge<Node, string>> path))
|
||||
{
|
||||
currentPathCount = path.Count();
|
||||
}
|
||||
}
|
||||
// else
|
||||
// {
|
||||
// System.Console.WriteLine("end node not reacheable.");
|
||||
// }
|
||||
|
||||
Result1 = currentPathCount.ToString();
|
||||
}
|
||||
|
||||
public void ResolvePart2(string arg)
|
||||
{
|
||||
var lines = File.ReadAllLines(arg);
|
||||
|
||||
var nrLines = lines.Length;
|
||||
var nrColumns = lines[0].Length;
|
||||
|
||||
var aStarts = new List<(int X, int Y)>();
|
||||
for (int i = 0; i < nrLines; i++)
|
||||
{
|
||||
var line = lines[i];
|
||||
var lineIdx = 0;
|
||||
while ((lineIdx = line.IndexOfAny("aS".ToArray(), lineIdx)) >= 0)
|
||||
{
|
||||
aStarts.Add((i, lineIdx++));
|
||||
}
|
||||
}
|
||||
|
||||
var endY = Array.IndexOf(lines, lines.First(x => x.Contains("E")));
|
||||
var endX = lines[endY].IndexOf('E');
|
||||
// System.Console.WriteLine($"E: {endX} - {endY}");
|
||||
|
||||
var minPathCount = int.MaxValue;
|
||||
foreach (var start in aStarts)
|
||||
{
|
||||
var startY = start.X;
|
||||
var startX = start.Y;
|
||||
// System.Console.WriteLine($"S: {startX} - {startY}");
|
||||
|
||||
Node.InitGraph();
|
||||
var root = Node.Create(startX, startY, "a");
|
||||
root.AddVertices(lines);
|
||||
|
||||
// System.Console.WriteLine($"Graph nodes: {Node.graph.VertexCount}");
|
||||
|
||||
var endNode = Node.AllNodes.FirstOrDefault(n => n.X == endX && n.Y == endY);
|
||||
if (endNode != null)
|
||||
{
|
||||
var tryGetPaths = Node.graph.ShortestPathsDijkstra(t => 1, root);
|
||||
if (tryGetPaths(endNode, out IEnumerable<TaggedEdge<Node, string>> path))
|
||||
{
|
||||
var currentPathCount = path.Count();
|
||||
minPathCount = Math.Min(minPathCount, currentPathCount);
|
||||
}
|
||||
}
|
||||
// else
|
||||
// {
|
||||
// System.Console.WriteLine("end node not reacheable.");
|
||||
// }
|
||||
}
|
||||
|
||||
// System.Console.WriteLine($"minPathCount: {minPathCount}");
|
||||
Result2 = minPathCount.ToString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
namespace day12;
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
var inputFile = "input.txt";
|
||||
|
||||
var problem = new Problem();
|
||||
|
||||
problem.ResolvePart1(inputFile);
|
||||
System.Console.WriteLine($"Result1: {problem.Result1}");
|
||||
//456
|
||||
|
||||
problem.ResolvePart2(inputFile);
|
||||
System.Console.WriteLine($"Result2: {problem.Result2}");
|
||||
//454
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FastGraph" Version="3.0.0-alpha.1630" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,41 @@
|
||||
abcccccccccccccccccccccccccccccccccccccaaaaaaacccccccaaaaaaaaaaaccccccccccccccccccccaaacaaaaaaaacccccccccccccccccccccccccccccccccccaaaaa
|
||||
abccccccccccccccccccaaccaacccccccccccccaaaaaaaccccccccaaaaaaaaaaacccccccaaaaccccccccaaaaaaaaaaaaacccccccccccccccccccccccccccccccccaaaaaa
|
||||
abccccccccccccccccccaaaaaaccccccccccaaaccaaaaaacccccccaaaaaaaaaaccccccccaaaaccccccaaaaaaaaaaaaaaacccccccccccccccccccaaacccccccccccaaaaaa
|
||||
abcccccccccccccccccccaaaaacccccccccccaaccaacaaaccccccaaaaaaaaaaaccccccccaaaacccccaaaaaaaaacaaaaaaacccccccccccccccccaaaacccccccccccaaacaa
|
||||
abccccccccccccccccccaaaaaaccccccccaacaaaaaacccccccccaaaaaaaaaaaaacaaaccccaaccccccaaaaaaaaacaacccccccccccccccccaaaccaaaacccccccccccccccaa
|
||||
abcccccccccccccccccaaaaaaaacccccccaaaaaaaaccccccaaaaaaaacaaaacaaaaaaacccccccccaaccccaaaaaacaaacccccccccccccccaaaakkkaaccccccccccccccccaa
|
||||
abcccccccccccccccccaaaaaaaaccccccccaaaaaccccaacccaaaaaaaaaaaacaaaaaaccccccccccaacccaaaaaaaaaaaacccccccccccccccakkkkkklcccccccccccccccccc
|
||||
abaaacccccccccccaaccccaaccccccccccccaaaaaccaaacccaaaaaaaaaaaaaaaaaaaaccccccaaaaaaaacaacccaaaaaaccccccccccccccckkkkkkkllcccccccaaaccccccc
|
||||
abaaaacccccccaacaaccccaacccccccccccaaacaaaaaaaccccaaaaaaaaaaaaaaaaaaaacccccaaaaaaaaaaaccccaaaaacccccccccccccckkkksssllllccccccaaaaaacccc
|
||||
abaaaacccccccaaaaacccccccccccaaaccccaacaaaaaaccccaaaaaacaaaaaaaaaaaaaacccccccaaaaccccccccaaaaacccccccccccccckkkksssssllllcccccaaaaaacccc
|
||||
abaaacccccccccaaaaaaccccccccaaaaccccccccaaaaaaaacaaaaaaaaaaaaacaaacaaacccccccaaaaacccccccaaaaacccccccccccccjkkkrssssssllllccccccaaaccccc
|
||||
abccccccccccaaaaaaaaccccccccaaaacccccccaaaaaaaaacaacaaaaaaaaaacaaaccccccccccaaacaaccccccccccccccccccccccccjjkkrrsuuussslllllcccccaaccccc
|
||||
abccaaacccccaaaaacccccccccccaaaaccccccaaaaaaaaaacccccaaaaaaaaaacaaccccccccccaacccacccccccccccccccccccccjjjjjjrrrsuuuussslllllmcccddacccc
|
||||
abcccaaaccaccacaaaccccccccccccccccccccaaaaaaaccccccccccaaaaaaaaccccccaacccccccccccaaaaacccccccccccccccjjjjjjrrrruuuuuusssllmmmmmddddcccc
|
||||
abccaaaaaaaacccaaaccccccccccccccccaaacccccaaaccccccccccccaaacccccccccaacccccccccccaaaaacccccccccccccjjjjjrrrrrruuuxuuussqqqqmmmmmdddcccc
|
||||
abcaaaaaaaacccaaaaaacaaaaaccccccaaaaaaccccaaacccaaccccccccaaccccccaaaaaaaaccaaacccaaaaaaccccccccccccjjjjrrrrrruuuxxxuuuqqqqqqqmmmdddcccc
|
||||
abaaaaaaaaaccccaaaaacaaaaaccccccaaaaaaaaccccccaaaaaaccccccccccccccaaaaaaaaccaaacaaaaaaaacccccccccccjjjjrrrtttuuuuxxxyvvvvvqqqqmmmdddcccc
|
||||
abaaaaaaaaaccaaaaaaacaaaaaaccccccaaaaaaaacccccaaaaaaccccccccccccccccaaaaccaaaaaaaaaaaaaacccccccccaaiijqqqrttttuuuxxyyvvvvvvvqqmmmdddcccc
|
||||
abcaaaaaaaaccaaaaaaaaaaaaaacccccaaaaaaaacccccccaaaacccccaaaaccccccccaaaaacaaaaaaaaccaaccccccccccaaaiiiqqqttttxxxxxxyyyyyyvvvqqmmmdddcccc
|
||||
abcccaaaaaaacaaaaaaaaaaaaaacccccaaaaaaaaaaaccccaaaaccccaaaaacccccccaaaaaacaaaaaaacccccccccccccccaaaiiiqqqtttxxxxxxxyyyyyyvvqqqmmmdddcccc
|
||||
SbcccaacccaccccaaacacccaaacccccccccaaaaaaaaacccaccaccccaaaaaaccccccaaccaacccaaaaaccccccccccccccccaaiiiiqqtttxxxxEzzzyyyyvvvqqqmmmddccccc
|
||||
abccaaaccccccccaaccccccccccccccccccaaaaaaaaccccccccccccaaaaaaccccccccccccccaaacaaaccaacccccccccccccciiiqqqttttxxxyyyyyvvvvqqqmmmdddccccc
|
||||
abccccccccccccccccccccccccccccccccaaaaaaaccccccccccccccaaaaaacccccccccccccccaacccccaaaaaaaccccccccccciiiqqqttttxxyyyyyvvvrrrnnneeecccccc
|
||||
abcaaaaccccccccccccccccccccccccccaaaaaaaaccccccccccccccccaacccccccccccccccccccccccccaaaaacccccccccccciiiqqqqttxxyyyyyyyvvrrnnnneeecccccc
|
||||
abcaaaaacccccccccccccccccccccccccaaaacaaacccaccaaacccccccccccccccccccccccccaaaccccaaaaaaaccccccccccccciiiqqqttwwyywwyyywwrrnnneeeccccccc
|
||||
abaaaaaacccaccaccccccccccccccccccaaaaccaacccaaaaaaccccccccccccccccaaaccccaaaaaacccaaaaaaaacccccccccccciiiqqqtswwwwwwwwwwwrrnnneeeccccccc
|
||||
abaaaaaacccaaaaccccccccaaaacccccccaaacccccccaaaaaacccccccccccccccaaaaaaccaaaaaacccaaaaaaaacaaccccccaaciiiqppsswwwwsswwwwwrrrnneeeccccccc
|
||||
abcaaaaacccaaaaacccccccaaaacccccccccccccccccaaaaaaaccccccccccccccaaaaaaccaaaaaacccccaaaaaaaaaccccccaaaahhpppssswwsssswwwwrrrnneeeacccccc
|
||||
abcaaaccccaaaaaacccccccaaaaccccccccccccccccaaaaaaaaccccccccccccccaaaaacccaaaaaccccccaacaaaaaaaaccaaaaaahhpppsssssssssrrrrrrnnneeeacccccc
|
||||
abccccccccaaaaaaccccccccaacccccccccccccccccaaaaaaaaccccaacccccccccaaaaaccaaaaacccccccccaaaaaaaaccaaaaachhpppssssssoosrrrrrrnnneeeaaacccc
|
||||
abccccccccccaaccccccccccccccccaaaaaccccccaacccaaacccaaaaacccccccccaacaacccccccccccccccccaaaaaaacccaaaaahhhppppssppooooorroonnffeaaaacccc
|
||||
abaaccccccccccccccccccccccccccaaaaaccccccaacccaaaccccaaaaacccccccccccccccccccccccccccaacaaaaacccccaacaahhhppppppppoooooooooonfffaaaacccc
|
||||
abaccccccccccccccccccccccccccaaaaaacccaaaaaaaacccccccaaaaaccccccccccccccccccccccccaaaaaaaaaaaccccccccccchhhpppppppgggoooooooffffaacccccc
|
||||
abaccccccccccccccccccccccccccaaaaaacccaaaaaaaaccccccaaaaaccccccacccaacccccccccccccaaaaaccccaaccccccccccchhhhhhggggggggfffffffffaaacccccc
|
||||
abaacccccccccccccccccccccccccaaaaaacccccaaaacccccccccaaaacccaacaacaaacccccccccccccaaaaaaacccccccccccccccchhhhgggggggggffffffffccaacccccc
|
||||
abcccccccaacccccccccccccccccccaaaccccccaaaaaccccccccaaaaccaaaacaaaaacccccccccccccaaaaaaaaccccccccccccccccchhhggggaaaagffffffcccccccccccc
|
||||
abcccccccaacccccccccccccaacccccccccccccaaaaaaccaaccccaaaaaaaaacaaaaaacccccccaaaacaaaaaaaacccccccccccaacccccccaaaacaaaacccccccccccccccccc
|
||||
abccccaaaaaaaacccccccaacaaaccccccccccccaaccaacaaaacccaaaaaaaacaaaaaaaaccccccaaaaccacaaaccaaaccccaaaaaacccccccaacccaaaacccccccccccccaaaaa
|
||||
abccccaaaaaaaacccccccaaaaaccccccccccccccccccccaaaaccccaaaaaaacaaaaaaaaccccccaaaaccccaaaccaaaaaccaaaaaaaacccccccccccaaaccccccccccccccaaaa
|
||||
abccccccaaaaccccccccccaaaaaaccccccccccccccccccaaaacccaaaaaaaaaaccaaccccccccccaacccccccccaaaaacccaaaaaaaacccccccccccaaaccccccccccccccaaaa
|
||||
abcccccaaaaaacccccccaaaaaaaacccccccccccccccccccccccaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaacccaaaaaaaccccccccccccccccccccccccccaaaaaa
|
||||
@@ -0,0 +1,63 @@
|
||||
--- Day 12: Hill Climbing Algorithm ---
|
||||
You try contacting the Elves using your handheld device, but the river you're following must be too low to get a decent signal.
|
||||
|
||||
You ask the device for a heightmap of the surrounding area (your puzzle input). The heightmap shows the local area from above broken into a grid; the elevation of each square of the grid is given by a single lowercase letter, where a is the lowest elevation, b is the next-lowest, and so on up to the highest elevation, z.
|
||||
|
||||
Also included on the heightmap are marks for your current position (S) and the location that should get the best signal (E). Your current position (S) has elevation a, and the location that should get the best signal (E) has elevation z.
|
||||
|
||||
You'd like to reach E, but to save energy, you should do it in as few steps as possible. During each step, you can move exactly one square up, down, left, or right. To avoid needing to get out your climbing gear, the elevation of the destination square can be at most one higher than the elevation of your current square; that is, if your current elevation is m, you could step to elevation n, but not to elevation o. (This also means that the elevation of the destination square can be much lower than the elevation of your current square.)
|
||||
|
||||
For example:
|
||||
|
||||
Sabqponm
|
||||
abcryxxl
|
||||
accszExk
|
||||
acctuvwj
|
||||
abdefghi
|
||||
Here, you start in the top-left corner; your goal is near the middle. You could start by moving down or right, but eventually you'll need to head toward the e at the bottom. From there, you can spiral around to the goal:
|
||||
|
||||
v..v<<<<
|
||||
>v.vv<<^
|
||||
.>vv>E^^
|
||||
..v>>>^^
|
||||
..>>>>>^
|
||||
In the above diagram, the symbols indicate whether the path exits each square moving up (^), down (v), left (<), or right (>). The location that should get the best signal is still E, and . marks unvisited squares.
|
||||
|
||||
This path reaches the goal in 31 steps, the fewest possible.
|
||||
|
||||
What is the fewest steps required to move from your current position to the location that should get the best signal?
|
||||
|
||||
Your puzzle answer was 456.
|
||||
|
||||
--- Part Two ---
|
||||
As you walk up the hill, you suspect that the Elves will want to turn this into a hiking trail. The beginning isn't very scenic, though; perhaps you can find a better starting point.
|
||||
|
||||
To maximize exercise while hiking, the trail should start as low as possible: elevation a. The goal is still the square marked E. However, the trail should still be direct, taking the fewest steps to reach its goal. So, you'll need to find the shortest path from any square at elevation a to the square marked E.
|
||||
|
||||
Again consider the example from above:
|
||||
|
||||
Sabqponm
|
||||
abcryxxl
|
||||
accszExk
|
||||
acctuvwj
|
||||
abdefghi
|
||||
Now, there are six choices for starting position (five marked a, plus the square marked S that counts as being at elevation a). If you start at the bottom-left square, you can reach the goal most quickly:
|
||||
|
||||
...v<<<<
|
||||
...vv<<^
|
||||
...v>E^^
|
||||
.>v>>>^^
|
||||
>^>>>>>^
|
||||
This path reaches the goal in only 29 steps, the fewest possible.
|
||||
|
||||
What is the fewest steps required to move starting from any square with elevation a to the location that should get the best signal?
|
||||
|
||||
Your puzzle answer was 454.
|
||||
|
||||
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||
|
||||
At this point, you should return to your Advent calendar and try another puzzle.
|
||||
|
||||
If you still want to see it, you can get your puzzle input.
|
||||
|
||||
You can also [Share] this puzzle.
|
||||
Reference in New Issue
Block a user