day 12
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Ben Harris 2020-12-12 11:30:08 -05:00
parent c70ac6a5d5
commit 844a52bbec
3 changed files with 866 additions and 0 deletions

View File

@ -19,6 +19,7 @@ namespace aoc2020.test
[DataRow(typeof(Day09), "138879426", "23761694")]
[DataRow(typeof(Day10), "1980", "4628074479616")]
[DataRow(typeof(Day11), "2303", "2057")]
[DataRow(typeof(Day12), "1710", "62045")]
public void CheckAllDays(Type dayType, string part1, string part2)
{
// create day instance

94
aoc2020/Day12.cs Normal file
View File

@ -0,0 +1,94 @@
using System;
namespace aoc2020
{
/// <summary>
/// Day 12: <see href="https://adventofcode.com/2020/day/12">Rain Risk</see>
/// </summary>
public sealed class Day12 : Day
{
public Day12() : base(12)
{
}
private static void Swap(ref int x, ref int y)
{
var tmp = x;
x = y;
y = tmp;
}
private (int x, int y, int sx, int sy) ProcessInstructions()
{
// start facing east
int x = 0, y = 0, dx = 1, dy = 0;
int sx = 0, sy = 0, waypointX = 10, waypointY = -1;
foreach (var instruction in Input)
{
var value = int.Parse(instruction[1..]);
switch (instruction[0])
{
case 'N':
y -= value;
waypointY -= value;
break;
case 'S':
y += value;
waypointY += value;
break;
case 'E':
x += value;
waypointX += value;
break;
case 'W':
x -= value;
waypointX -= value;
break;
case 'L':
for (var i = 0; i < value / 90; ++i)
{
Swap(ref dx, ref dy);
Swap(ref waypointX, ref waypointY);
dy *= -1;
waypointY *= -1;
}
break;
case 'R':
for (var i = 0; i < value / 90; ++i)
{
Swap(ref dx, ref dy);
Swap(ref waypointX, ref waypointY);
dx *= -1;
waypointX *= -1;
}
break;
case 'F':
x += dx * value;
y += dy * value;
sx += waypointX * value;
sy += waypointY * value;
break;
default: throw new InvalidOperationException(nameof(instruction));
}
}
return (x, y, sx, sy);
}
public override string Part1()
{
var (x, y, _, _) = ProcessInstructions();
return $"{Math.Abs(x) + Math.Abs(y)}";
}
public override string Part2()
{
var (_, _, sx, sy) = ProcessInstructions();
return $"{Math.Abs(sx) + Math.Abs(sy)}";
}
}
}

771
aoc2020/input/day12.in Normal file
View File

@ -0,0 +1,771 @@
N2
S5
E2
F35
N2
W5
F83
S5
R180
S3
L270
N1
F35
N1
W4
S3
L180
F46
R180
S4
F29
R90
S3
E1
F65
E4
F29
S4
E5
F33
L90
F28
L270
E3
S5
E2
S5
F82
R270
F81
S3
F68
R180
W5
S3
F70
W4
L180
E2
L90
F28
L270
S4
R90
W2
F39
R90
N5
W5
L180
E3
F66
S5
W3
N5
L90
S2
W4
F77
E1
L90
E3
W1
S3
E4
N4
W5
S1
F55
S3
L90
F20
W2
N2
F23
W2
F48
L90
N1
E3
R90
N4
F73
S4
F7
S1
R90
R90
W3
S3
F71
E5
N1
W1
L90
W3
R180
F60
W2
S5
L90
W2
F6
L180
W4
S2
F28
N4
F56
N4
E4
L90
F67
L90
N1
L90
W3
F43
S2
W4
S1
F67
F72
E2
L90
W2
L180
F35
L90
N2
W1
S5
F58
R180
F68
E2
S5
F61
W4
L180
W2
S2
F35
W4
F50
E3
L90
E3
N5
F16
E2
N4
F87
W4
R180
F25
N3
F6
L90
F57
R180
E2
R90
E1
F99
W1
L90
W4
F76
W2
F48
S1
F19
N1
F54
L90
F66
E4
F88
R90
S5
L180
W2
R90
S2
F54
L90
S2
L180
S4
F14
N2
F51
E3
F83
N2
W1
F61
S1
W3
N2
F15
R180
S3
E3
R90
F50
R90
E5
L90
F53
S3
L90
S5
F22
R90
S5
E3
L90
E4
F88
W1
F10
S2
W4
F68
W3
W2
S3
R90
F1
S1
L270
F51
S2
R90
E3
F6
S1
R90
W2
L180
N1
W5
F51
W1
N1
R90
E1
S3
F21
W3
R180
N1
R180
N1
W4
F21
R180
W3
S5
E3
S5
L180
F3
N4
L90
W5
F23
S3
N5
E1
F88
L90
E4
F18
E3
F27
F51
E3
F58
N5
R180
F36
N4
E2
F14
N4
L180
F87
L180
E3
F67
E4
L90
E2
F62
E3
F60
R90
W2
S1
F47
S5
L90
W2
F11
N2
F29
S2
W1
S1
W1
N2
F73
N3
F92
S2
F1
R180
W4
R90
S5
W4
F33
E2
N2
F40
S1
L180
S2
L90
F95
E2
W2
R180
F26
E1
S3
S1
R90
N4
W4
S5
L90
N1
E5
F9
W5
N1
F89
R180
E5
L90
N2
F90
W4
F33
W2
F62
E1
N4
W4
S5
L90
L90
F81
E3
N5
F81
S1
E3
F89
N3
R90
N3
W3
L90
N2
F93
L90
F48
N5
R180
F66
E5
S1
F47
R180
F61
L90
N2
F74
N1
L180
E2
S5
F39
R180
N5
F26
E5
F12
R90
R90
S4
F7
W5
L90
W1
R90
W2
N2
E2
N1
F15
L90
W4
S2
R90
E3
R180
F86
N5
S5
E2
R90
W1
F64
S2
W3
R180
S4
L180
F58
L90
F100
S2
E4
S2
F52
W2
N4
W4
R90
N2
F45
E5
F84
N3
W2
R90
F36
R90
F85
N5
L90
F6
L90
S4
F21
R90
E5
F9
S4
F53
L90
R90
E1
F55
R90
F56
L90
E4
L90
N1
E1
L90
N1
R90
F51
W1
F39
S5
F96
R90
S1
R180
F72
E1
N4
N3
F77
E3
L90
W4
S3
F53
F92
W5
L90
E4
N2
R180
R90
S3
E2
S3
W1
N1
F86
E3
F46
W1
L90
F97
W3
F45
W4
F73
W2
S2
R90
N2
L180
N4
L90
W1
N2
L90
E1
F93
F36
E2
F74
E3
F49
W5
L180
S3
F5
L180
F53
S2
E3
N1
F96
L90
F44
S3
F32
W1
S2
L90
N2
E3
F17
R90
F34
L90
N4
F22
W2
F58
S2
R90
S2
R90
F12
S5
W5
N5
R90
N3
F12
S4
E1
F86
W3
F6
R90
S5
L90
E4
L180
N2
E4
F50
S5
F85
R90
F13
S1
F69
S2
F97
S1
F66
S4
F86
N5
F34
S2
W5
R180
F42
W4
F72
E3
R270
S3
R90
E2
N4
E5
R90
E2
L180
S2
F35
E4
S2
F50
S1
R90
W3
F100
N3
F10
W4
L90
F19
E2
F10
R90
F27
S4
W3
R90
F53
R90
N3
L90
N5
F46
R90
F3
N1
S4
F17
L270
E2
S2
R90
N4
W4
L180
E3
R90
F86
N5
W1
S4
R90
E4
N4
E5
S4
W1
L90
L180
S1
F42
S2
E2
S5
E1
R90
W1
N4
R90
N3
F58
E3
S1
N5
F65
N5
E4
R180
N5
R90
F90
N3
F1
R180
S2
W3
R90
W1
W2
R180
S1
F93
S2
F35
W2
F62
L90
F15
W3
F79
E5
N4
R180
R90
L90
E2
N2
E5
L270
N3
F31
W3
F39
E5
N3
R90
N2
E3
L90
F50
L90
W5
S3
F68
S3
W3
F20
W3
S2
F7
W1
N1
R90
E2
L180
W4
L90
W4
N5
E5
F19
F11
E2
L90
S3
F30
N2
E5
F51