Beispiel #1
0
        public override void Solve()
        {
            var sec   = new Sectioner(Input);
            var deck1 = new Queue <int>();

            foreach (string line in sec.NextSection(1))
            {
                deck1.Enqueue(int.Parse(line));
            }

            var deck2 = new Queue <int>();

            foreach (string line in sec.NextSection(1))
            {
                deck2.Enqueue(int.Parse(line));
            }

            var  winner = RecursiveCombat(deck1, deck2) ? deck2 : deck1;
            long total  = 0;

            while (winner.Count != 0)
            {
                Console.Write($"{winner.Peek()} ");
                total += winner.Count * winner.Dequeue();
            }

            Console.WriteLine();
            Console.WriteLine($"The recursive combat score is {total}");
        }
Beispiel #2
0
        public override void Solve()
        {
            var sec     = new Sectioner(Input);
            var grammar = ParseGrammar(sec);

            grammar.StartingSymbol = grammar.NonTerminals["0"];
            var nt = grammar.NonTerminals;

            nt["8"].Rules.Add(new ReplaceRule {
                Symbols = new() { nt["42"], nt["8"] }
            });
Beispiel #3
0
        public override void Solve()
        {
            var sec     = new Sectioner(Input);
            var grammar = ParseGrammar(sec);

            grammar.StartingSymbol = grammar.NonTerminals["0"];
            var parser = new EarleyParser(grammar.StartingSymbol);

            int total = sec.NextSection().Count(line => parser.Recognizes(line));

            Console.WriteLine($"Parser accepts {total} lines from input.");
        }
Beispiel #4
0
        public override void Solve()
        {
            var sec   = new Sectioner(Input);
            var deck1 = new Queue <int>();
            var deck2 = new Queue <int>();

            foreach (var line in sec.NextSection(1))
            {
                deck1.Enqueue(int.Parse(line));
            }

            foreach (var line in sec.NextSection(1))
            {
                deck2.Enqueue(int.Parse(line));
            }

            while (deck1.Count != 0 && deck2.Count != 0)
            {
                int one = deck1.Dequeue();
                int two = deck2.Dequeue();
                if (one > two)
                {
                    deck1.Enqueue(one);
                    deck1.Enqueue(two);
                }
                else
                {
                    deck2.Enqueue(two);
                    deck2.Enqueue(one);
                }
            }

            var  winner = deck1.Count == 0 ? deck2 : deck1;
            long total  = 0;

            while (winner.Count != 0)
            {
                total += winner.Count * winner.Dequeue();
            }

            Console.WriteLine($"The winner's score is {total}");
        }
Beispiel #5
0
        protected Grammar ParseGrammar(Sectioner sec)
        {
            var grammar = new Grammar();

            foreach (string line in sec.NextSection())
            {
                string[] split   = line.Split(':');
                string   name    = split[0];
                string   ruleset = split[1];
                grammar.NonTerminals.TryAdd(name, new NonTerminal {
                    Name = name
                });
                split = ruleset.Split('|');
                foreach (string rule in split)
                {
                    AddRuleToGrammar(grammar, name, rule);
                }
            }

            //PrintGrammar(grammar.NonTerminals);
            return(grammar);
        }