Day2 playing with top level statements

This commit is contained in:
Stefan Forstenlechner 2021-12-02 20:28:54 +01:00
parent 803266f078
commit 028e89266a
1 changed files with 21 additions and 35 deletions

56
Day2.cs
View File

@ -1,43 +1,29 @@
#define Day2 #define Day2
#if Day2 #if Day2
long f = 0; Position PartOne(Position p, Operation op) => op.op switch {
long d = 0; "down" => new Position(p.f, p.d + op.x, p.aim),
"up" => new Position(p.f, p.d - op.x, p.aim),
_ => new Position(p.f + op.x, p.d, p.aim)
};
Position PartTwo(Position p, Operation op) => op.op switch {
"down" => new Position(p.f, p.d , p.aim+ op.x),
"up" => new Position(p.f, p.d, p.aim - op.x),
_ => new Position(p.f + op.x, p.d + (p.aim * op.x), p.aim)
};
var linesSplit = File.ReadAllLines("day2/input") var linesSplit = File.ReadAllLines("day2/input")
.Select(l => l.Split(" ")) .Select(l => l.Split(" "))
.Select(lineParts => new { op = lineParts[0], x = long.Parse(lineParts[1]) }) .Select(lineParts => new Operation(lineParts[0], long.Parse(lineParts[1])))
.ToList(); .ToList();
linesSplit.ForEach(v => { var partOneResult = linesSplit.Aggregate(new Position(0, 0, 0), PartOne);
switch (v.op) { Console.WriteLine(partOneResult.f * partOneResult.d);
case "down":
d += v.x;
break;
case "up":
d -= v.x;
break;
default:
f += v.x;
break;
}
});
Console.WriteLine(f * d);
f = 0; var partTwoResult = linesSplit.Aggregate(new Position(0, 0, 0), PartTwo);
d = 0; Console.WriteLine(partTwoResult.f * partTwoResult.d);
long aim = 0;
linesSplit.ForEach(v => { record Operation(String op, long x);
switch (v.op) { record Position(long f, long d, long aim);
case "down":
aim += v.x;
break;
case "up":
aim -= v.x;
break;
default:
f += v.x;
d += aim * v.x;
break;
}
});
Console.WriteLine(f * d);
#endif #endif