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