Refactor Day06 to use LINQ for parsing numbers by column
This commit is contained in:
parent
90be974d36
commit
b03404fe6a
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue