private static void TryHorizontalLines(PictureDescription descriptor, Solution solution, ref Command? bestCommand, ref int bestScore) { for (int y = 0; y < descriptor.NumRows; ++y) { for (int x = 0; x < descriptor.NumCols;) { int startX = x; int endX = x; bool skipped = false; int score = 0; for (;;) { if (x >= descriptor.NumCols) { break; } if (descriptor.IsFilled(x, y)) { if (!solution.IsFilled(x, y)) { ++score; endX = x; } } else if (skipped) { skipped = true; } else { ++x; break; } ++x; } int len = endX - startX + 1; if (len > 0) { if (score > 0 && score > bestScore) { var command = solution.MakeHorizontalLine(startX, y, len); if (score > bestScore) { bestCommand = command; bestScore = score; } } } } } }
public static bool Validate(Solution solution, PictureDescription pd) { for (int row = 0; row < pd.NumRows; row++) { for (int column = 0; column < pd.NumCols; column++) { if(solution.IsFilled(column, row) != pd.IsFilled(column, row)) { Console.WriteLine(row + " " + column); return false; } } } return true; }