fix day 15
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
2c9737d6d2
commit
f6b72dd9ee
|
@ -17,20 +17,27 @@ public sealed class Day15 : Day
|
||||||
var halt = IntCodeVM.HaltType.Waiting;
|
var halt = IntCodeVM.HaltType.Waiting;
|
||||||
while (halt == IntCodeVM.HaltType.Waiting)
|
while (halt == IntCodeVM.HaltType.Waiting)
|
||||||
{
|
{
|
||||||
var direction = currentLocation!.NextDirection();
|
var direction = currentLocation.NextDirection();
|
||||||
if (direction <= 4)
|
if (direction <= 4)
|
||||||
{
|
{
|
||||||
var (x, y) = currentLocation.Neighbor(direction);
|
var (x, y) = currentLocation.Neighbor(direction);
|
||||||
if (Location.GetLocation(x, y) == null)
|
if (Location.GetLocation(x, y) == null)
|
||||||
{
|
{
|
||||||
halt = vm.Run(direction);
|
halt = vm.Run(direction);
|
||||||
currentLocation = vm.Result switch
|
switch (vm.Result)
|
||||||
{
|
{
|
||||||
Location.Wall => new Location(x, y, Location.Opposites[direction], Location.Wall),
|
case Location.Wall:
|
||||||
Location.Empty => new Location(x, y, Location.Opposites[direction]),
|
_ = new Location(x, y, Location.Opposites[direction], Location.Wall);
|
||||||
Location.System => new Location(x, y, Location.Opposites[direction], Location.System),
|
break;
|
||||||
_ => throw new Exception($"Unknown IntCodeVM response: {vm.Result}"),
|
case Location.Empty:
|
||||||
};
|
currentLocation = new Location(x, y, Location.Opposites[direction]);
|
||||||
|
break;
|
||||||
|
case Location.System:
|
||||||
|
currentLocation = new Location(x, y, Location.Opposites[direction], Location.System);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new Exception($"Unknown IntCodeVM response: {vm.Result}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -39,11 +46,15 @@ public sealed class Day15 : Day
|
||||||
if (direction > 0)
|
if (direction > 0)
|
||||||
{
|
{
|
||||||
halt = vm.Run(direction);
|
halt = vm.Run(direction);
|
||||||
currentLocation = vm.Result switch
|
switch (vm.Result)
|
||||||
{
|
{
|
||||||
Location.Empty or Location.System => Location.GetLocation(currentLocation.Neighbor(direction)),
|
case Location.Empty:
|
||||||
_ => throw new Exception($"Unknown or unexpected response for previous room: {vm.Result}"),
|
case Location.System:
|
||||||
};
|
currentLocation = Location.GetLocation(currentLocation.Neighbor(direction));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new Exception($"Unknown or unexpected response for previous room: {vm.Result}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -79,10 +90,10 @@ public sealed class Day15 : Day
|
||||||
|
|
||||||
currentLocation = Location.OxygenLocation;
|
currentLocation = Location.OxygenLocation;
|
||||||
var distance = 0;
|
var distance = 0;
|
||||||
while (currentLocation?.PreviousDirection != 0)
|
while (currentLocation.PreviousDirection != 0)
|
||||||
{
|
{
|
||||||
distance++;
|
distance++;
|
||||||
currentLocation = Location.GetLocation(currentLocation!.PreviousLocation());
|
currentLocation = Location.GetLocation(currentLocation.PreviousLocation());
|
||||||
}
|
}
|
||||||
|
|
||||||
return $"{distance}";
|
return $"{distance}";
|
||||||
|
@ -143,7 +154,7 @@ public sealed class Day15 : Day
|
||||||
AllLocations.Add((x, y), this);
|
AllLocations.Add((x, y), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Location? OxygenLocation { get; private set; }
|
public static Location OxygenLocation { get; private set; }
|
||||||
public int PreviousDirection { get; }
|
public int PreviousDirection { get; }
|
||||||
private int X { get; }
|
private int X { get; }
|
||||||
private int Y { get; }
|
private int Y { get; }
|
||||||
|
@ -193,12 +204,12 @@ public sealed class Day15 : Day
|
||||||
return searchDirection++;
|
return searchDirection++;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Location? GetLocation(int x, int y)
|
public static Location GetLocation(int x, int y)
|
||||||
{
|
{
|
||||||
return AllLocations.ContainsKey((x, y)) ? AllLocations[(x, y)] : null;
|
return AllLocations.ContainsKey((x, y)) ? AllLocations[(x, y)] : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Location? GetLocation((int x, int y) coords)
|
public static Location GetLocation((int x, int y) coords)
|
||||||
{
|
{
|
||||||
return GetLocation(coords.x, coords.y);
|
return GetLocation(coords.x, coords.y);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue