/// <inheritdoc/> public IEnumerable <string> RunTask1(string input, bool shouldVisualise) { var title = " is the lowest positive integer that can be used to initialize register a"; if (!shouldVisualise) { yield return(this.FastLoop(input).ToString() + title); yield break; } var found = false; var value = 1; var spinner = new Spinner(); while (!found) { var compRabbit = new PrototypeComputer.PrototypeComputer(input); var compTurtle = new PrototypeComputer.PrototypeComputer(input); compRabbit.SetRegister("a", value); compTurtle.SetRegister("a", value); while (compRabbit.State.CanRun && compTurtle.State.CanRun) { compRabbit.RunNext(); compRabbit.RunNext(); compTurtle.RunNext(); if (compRabbit.State.Equals(compTurtle.State)) { // Infinite loop detected. if (this.IsSignal(compRabbit.State.Out)) { yield return("Calculating.. " + spinner.State + " " + value.ToString()); found = true; } break; } } spinner.Turn(); ++value; } yield return(value.ToString() + title); }
private int FastLoop(string input) { var comp = new PrototypeComputer.PrototypeComputer(input); var baseValue = int.Parse(comp.State.Instructions[1].Args[0]) * int.Parse(comp.State.Instructions[2].Args[0]); var value = 0; while (value < baseValue) { value <<= 1; ++value; value <<= 1; } return(value - baseValue); }
private IEnumerable <string> SimplifiedProgram(string program, int input) { var comp = new PrototypeComputer.PrototypeComputer(program); if (!int.TryParse(comp.State.Instructions[19].Args[0], out var left) || !int.TryParse(comp.State.Instructions[20].Args[0], out var right)) { yield return("Wrong input!.\nThis solution abuses fact that program should calculate factorial of 7 and add multiply arguments of instructions #19 and #20."); yield break; } long value = left * right; value += Utils.Factorial(input); yield return(value.ToString() + " should be sent to the safe."); }