public static int Problem1(string input) { var mem = new mem(); var lines = input.Replace("\n", "\r").Split('\r').Where(e => !string.IsNullOrWhiteSpace(e)).ToArray(); long pos = 0; var mulcount = 0; var timesincemul = 0; var l = 0; while (timesincemul < 1_000_000 && pos >= 0 && pos < lines.Count()) { var op = pos; var line = lines[pos]; var p = line.Split(' '); timesincemul++; switch (p[0]) { case "set": mem.Set(p[1], mem.Get(p[2])); break; case "sub": mem.Set(p[1], mem.Get(p[1]) - mem.Get(p[2])); break; case "mul": mem.Set(p[1], mem.Get(p[1]) * mem.Get(p[2])); mulcount++; timesincemul = 0; break; case "jnz": if (mem.Get(p[1]) != 0) { pos += mem.Get(p[2]); pos--; } break; } pos++; //Trace.WriteLine($"{op}: {line} ({pos})"); //Trace.WriteLine(mem.ToString()); l++; if (l % 1000 == 0) { Trace.WriteLine($"{l}: {timesincemul}"); } } return(mulcount); }
public pgm(string program, int PID) { lines = program.Replace("\n", "\r").Split('\r').Where(e => !string.IsNullOrWhiteSpace(e)).ToArray(); mem.Set("p", PID); }
public static long Problem1(string input) { //input = "set a 1\nadd a 2\nmul a a\nmod a 5\nsnd a\nset a 0\nrcv a\njgz a -1\nset a 1\njgz a -2"; var mem = new mem(); var lines = input.Replace("\n", "\r").Split('\r').Where(e => !string.IsNullOrWhiteSpace(e)).ToArray(); long pos = 0; long lastSound = 0; while (true) { var op = pos; var line = lines[pos]; var p = line.Split(' '); switch (p[0]) { case "snd": lastSound = mem.Get(p[1]); break; case "set": mem.Set(p[1], mem.Get(p[2])); break; case "add": mem.Set(p[1], mem.Get(p[1]) + mem.Get(p[2])); break; case "mul": mem.Set(p[1], mem.Get(p[1]) * mem.Get(p[2])); break; case "mod": mem.Set(p[1], mem.Get(p[1]) % mem.Get(p[2])); break; case "rcv": if (mem.Get(p[1]) != 0) { return(lastSound); } break; case "jgz": if (mem.Get(p[1]) > 0) { pos += mem.Get(p[2]); pos--; } break; } pos++; Trace.WriteLine($"{op}: {line} ({pos})"); Trace.WriteLine(mem.ToString()); } }