public static ImmutableArray <Instruction> ParseInstructions(this IInputLines lines) { return(new CommandParser <Instruction>() .AddDerivedTypes <Instruction>() .ParseCommands(lines) .ToImmutableArray()); }
public static RuleSet ParseRules(this IInputLines lines) { var twoByTwo = ImmutableArray.CreateBuilder <Rule>(); var threeByThree = ImmutableArray.CreateBuilder <Rule>(); foreach (var line in lines.AsString()) { var split = line.Split("=>", StringSplitOptions.TrimEntries); var length = split[0].Length; var rules = ParseRule(split[0], split[1]) .Distinct(); if (length == 5) { twoByTwo.AddRange(rules); } else if (length == 11) { threeByThree.AddRange(rules); } } return(new RuleSet( twoByTwo.ToImmutable(), threeByThree.ToImmutable())); }
public static ImmutableArray <Command> ParseCommands(this IInputLines lines) { var builder = ImmutableArray.CreateBuilder <Command>(); foreach (var line in lines.AsMemory()) { var span = line.Span; var split = span.IndexOf(' '); var type = Enum.Parse <CommandType>(span[..split], ignoreCase: true);
public static IEnumerable <int[]> AsSeparatedInts(this IInputLines lines) { var regex = new PcreRegex(@"(\d+)\s?", PcreOptions.Compiled); return(lines.Transform(line => { var matches = regex.Matches(line); return matches.Select(m => int.Parse(m.Value)).ToArray(); })); }
public static Graph ParseGraph(this IInputLines lines) { var links = new Dictionary <string, List <string> >(); foreach (var line in lines.AsString()) { var split = line.Split('-', StringSplitOptions.TrimEntries); AddEdge(links, split[0], split[1]); } return(new Graph(links));
public static char[,] As2DArray(this IInputLines inputLines) { var lines = inputLines.AsArray(); var array = new char[lines.Length, lines[0].Length]; for (var y = 0; y < lines.Length; y++) { var line = lines[y].AsSpan(); for (var x = 0; x < line.Length; x++) { array[y, x] = line[x]; } } return(array); }
public static Map ParseMap(this IInputLines lines) { var arr = lines.As2DArray(); var area = Area2d.Create(arr); var cucumbers = ImmutableHashSet.CreateBuilder <SeaCucumber>(); foreach (var point in area.Items) { var c = arr[point.Y, point.X]; if (c is '>' or 'v') { cucumbers.Add(new SeaCucumber(point, c is '>' ? Direction.East : Direction.South)); } } return(new Map(cucumbers.ToImmutable(), area)); }
public static Graph ParseGraph(this IInputLines lines) { var connections = ParseConnections(lines); return(new Graph(connections)); }
public static IEnumerable <int> Ints(this IInputLines lines) => lines.Transform(static l => int.Parse(l));
public static string[] AsArray(this IInputLines lines) => lines.AsString().ToArray();