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}"); }
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"] } });
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."); }
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}"); }
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); }