def lights(dim):
varargs = []
constraints = []
for i in range(1, dim + 1):
for j in range(1, dim + 1):
variable = "x_%s_%s" % (i, j)
varargs.append(variable)
elems = [variable]
if i > 1:
elems.append("x_%s_%s" % (i - 1, j))
if i < dim:
elems.append("x_%s_%s" % (i + 1, j))
if j > 1:
elems.append("x_%s_%s" % (i, j - 1))
if j < dim:
elems.append("x_%s_%s" % (i, j + 1))
addition = " + ".join(elems)
constraints.append("(" + addition + ") % 2 == 1")
varargsexp = ", ".join(varargs)
forexp = " ".join(map(lambda arg: "for %s in (0, 1)" % (arg), varargs))
constraint = " and ".join(constraints)
expression = "[[%s] %s if %s]" % (varargsexp, forexp, constraint)
print(expression)
return eval(expression)
solutions = lights(4)
print("%s solutions" % (len(solutions,)))
for k, solution in enumerate(solutions):
print("solution %s----------------------------\n" % (k + 1))
dim = round(len(solution) ** 0.5)
for i, status in enumerate(solution):
print("◆" if status == 1 else '◇', end = " ")
if (i + 1) % dim == 0:
print("\n")