public long Run(int input) { var intcode = new Intcode(_program); intcode.AddInputs(input); return(intcode.Execute().First()); }
private IEnumerable <(int, int)> GetBounds( int maxX = int.MaxValue, int maxY = int.MaxValue, int startY = 0) { int prevWidth = 0; int startX = 0; for (int y = startY; y < maxY; y++) { bool isFoundFirst = false; int first = -1; bool isReturnedAnswer = false; for (int x = startX; x < maxX; x++) { var ic = new Intcode(_program); ic.AddInputs(x, y); var output = (int)ic.Execute().First(); if (!isFoundFirst && output == 1) { isFoundFirst = true; first = x; startX = x; if (prevWidth > 0) { x += prevWidth - 1; } } else if (!isFoundFirst && x - startX > 10) { prevWidth = 0; yield return(-1, -1); isReturnedAnswer = true; break; } else if (isFoundFirst && output == 0) { prevWidth = x - first - 1; yield return(first, x - 1); isReturnedAnswer = true; break; } } if (!isReturnedAnswer) { if (first == -1) { prevWidth = 0; yield return(-1, -1); } else { prevWidth = maxX - first - 1; yield return(first, maxX - 1); } } } }
public long DoCalc(int input) { var intcode = new Intcode(_program); intcode.AddInputs(input); return(intcode.Execute().Last()); }