// #define Day2 #if Day2 Position PartOne(Position p, Operation op) => op.op switch { "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") .Select(l => l.Split(" ")) .Select(lineParts => new Operation(lineParts[0], long.Parse(lineParts[1]))) .ToList(); var partOneResult = linesSplit.Aggregate(new Position(0, 0, 0), PartOne); Console.WriteLine(partOneResult.f * partOneResult.d); var partTwoResult = linesSplit.Aggregate(new Position(0, 0, 0), PartTwo); Console.WriteLine(partTwoResult.f * partTwoResult.d); record Operation(String op, long x); record Position(long f, long d, long aim); #endif