Exemplo n.º 1
0
 public static ImmutableArray <Instruction> ParseInstructions(this IInputLines lines)
 {
     return(new CommandParser <Instruction>()
            .AddDerivedTypes <Instruction>()
            .ParseCommands(lines)
            .ToImmutableArray());
 }
Exemplo n.º 2
0
        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()));
        }
Exemplo n.º 3
0
    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);
Exemplo n.º 4
0
        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();
            }));
        }
Exemplo n.º 5
0
    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));
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
    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));
    }
Exemplo n.º 8
0
        public static Graph ParseGraph(this IInputLines lines)
        {
            var connections = ParseConnections(lines);

            return(new Graph(connections));
        }
Exemplo n.º 9
0
 public static IEnumerable <int> Ints(this IInputLines lines)
 => lines.Transform(static l => int.Parse(l));
Exemplo n.º 10
0
 public static string[] AsArray(this IInputLines lines)
 => lines.AsString().ToArray();