from kenken import Puzzle, ConstraintLabel def error(msg): print msg sys.exit(1) if len(sys.argv) != 2: error("Usage: " + sys.argv[0] + " <input>") puzzle = Puzzle(sys.argv[1]) n = puzzle.n # Ensure all answers are in correct range for i in range(n): for j in range(n): answer = puzzle.getAnswer(i, j) if answer <= 0 or answer > n: error("Answer out of correct range (" + str(answer) + ")") # Ensure row constraints are met for i in range(n): used = [False for j in range(n)] for j in range(n): answer = puzzle.getAnswer(i, j) if used[answer - 1]: error("Row constraint violated (" + str(i) + ", " + str(j) + ")") used[answer - 1] = True # Ensure column constraints are met for j in range(n): used = [False for i in range(n)]
if i + 1 < n and not puzzle.inSameConstraint(i, j, i + 1, j): draw.line([x, y + cellSize, x + cellSize, y + cellSize], width=2) if j + 1 < n and not puzzle.inSameConstraint(i, j, i, j + 1): draw.line([x + cellSize, y, x + cellSize, y + cellSize], width=2) # Draw constraint labels for constraint in puzzle.constraints: cell = constraint.label.cell draw.text((cell[1] * cellSize + 5, cell[0] * cellSize + 5), str(constraint.label), font=smallFont) # Draw answers (if any) for i in range(n): for j in range(n): answer = puzzle.getAnswer(i , j) if answer == -1: continue xOffset = 30; if answer < 10: xOffset += 10; draw.text((j * cellSize + xOffset, i * cellSize + 40), str(answer), font=largeFont) del draw # save created image