-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDay9.cs
83 lines (71 loc) · 2.16 KB
/
Day9.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
namespace _2023_cs;
public class Day9
{
private static int[] convert(string line)
{
string[] splitLine = line.Split(' ');
int[] startingLine = new int[splitLine.Length];
for (int i = 0; i < splitLine.Length; i++)
{
startingLine[i] = Convert.ToInt32(splitLine[i]);
}
return startingLine;
}
private static List<int[]> extrapolate(int[] startingLine)
{
List<int[]> extrapolations = new List<int[]>();
extrapolations.Add(startingLine);
int size = startingLine.Length-1;
bool nonzero = true;
int[] previousLine = startingLine;
while (size> 0 && nonzero)
{
int[] nextLine = new int[size];
for (int i = 0; i < previousLine.Length-1; i++)
{
nextLine[i] = previousLine[i + 1] - previousLine[i];
}
extrapolations.Add(nextLine);
previousLine = nextLine;
size--;
}
return extrapolations;
}
private static int part1(List<int[]> extrapolations)
{
int result = 0;
foreach (var line in extrapolations)
{
result += line[^1];
}
return result;
}
private static int part2(List<int[]> extrapolations)
{
int result = 0;
extrapolations.Reverse();
foreach (var line in extrapolations)
{
result = line[0] - result;
}
return result;
}
public static void solve(string filename)
{
StreamReader input = new StreamReader(filename);
string? line = input.ReadLine();
int sum1 = 0;
int sum2 = 0;
while (line != null)
{
List<int[]> extrapolations = extrapolate(convert(line));
sum1 += part1(extrapolations);
sum2 += part2(extrapolations);
line = input.ReadLine();
}
Console.WriteLine("Day 9 part 1");
Console.WriteLine(sum1);
Console.WriteLine("Day 9 part 2");
Console.WriteLine(sum2);
}
}