Refactor Day06 to use LINQ for parsing numbers by column

This commit is contained in:
Sebastian Lindemeier 2025-12-06 13:55:52 +01:00
parent 90be974d36
commit b03404fe6a
1 changed files with 8 additions and 20 deletions

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Data.Common;
using System.IO;
using System.Linq;
using AdvenOfCode.Contracts;
@ -65,26 +66,13 @@ public class Day06 : IPuzzleSolver<long>
private static long[][] ParseNumbersByColumn(string[] numberLines)
{
List<long[]> numberColumns = [];
List<long> currentColumn = [];
for (var i = 1; i <= numberLines[0].Length; i++)
{
var nextNumber = numberLines.Aggregate("", (acc, numberLine) => acc + numberLine[^i]);
if (!string.IsNullOrWhiteSpace(nextNumber))
{
currentColumn.Add(long.Parse(nextNumber));
}
else
{
numberColumns.Add(currentColumn.ToArray());
currentColumn = [];
}
}
numberColumns.Add(currentColumn.ToArray());
numberColumns.Reverse();
return numberColumns.ToArray();
var (numberColumns, lastColumn) = Enumerable.Range(1, numberLines[0].Length)
.Select(i => numberLines.Aggregate("", (acc, numberLine) => acc + numberLine[^i]))
.Aggregate((columns: (List<long[]>)[[]], column: (long[])[]),
(acc, number) => string.IsNullOrWhiteSpace(number)
? ([..acc.columns, acc.column], [])
: (acc.columns, [..acc.column, long.Parse(number)]));
return [lastColumn, ..Enumerable.Reverse(numberColumns)];
}
private (Func<long, long, long> operation, long opBaseValue) ParseOperand(string operand) => operand switch