int SkipGarbage(string input, int start) { var offset = start + 1; while (true) { if (offset == input.Length) { Oh.Bollocks(); } switch (input[offset]) { case '>': removeCharacters += (offset - start) - 1; return(offset - start); case '!': removeCharacters -= 2; offset += 2; break; default: offset++; break; } } }
GridWriter CreateWriter(string pattern) { return((grid, x, y) => { var cX = x; var cY = y; foreach (var c in pattern) { switch (c) { case '.': grid[cX++, cY] = false; break; case '#': grid[cX++, cY] = true; break; case '/': cX = x; cY++; break; default: Oh.Bollocks(); break; } } }); }
string FollowPath(Map map, int entryPoint, out int numSteps) { var result = ""; var x = entryPoint; var y = 0; var dX = 0; var dY = 1; numSteps = 0; while (true) { var c = map.GetCell(x, y); switch (c) { case '|': case '-': break; case '+': ChangeDirection(map, x, y, ref dX, ref dY); break; case ' ': return(result); default: if (IsLetter(c)) { result += c; } else { Oh.Bollocks(); } break; } x += dX; y += dY; numSteps++; } }