Quick actions

cmd+k|ctrl+k

Navigation

Languages

Flip Game

Snippet info

Language

Python

Visibility

public

Author

yoneda

Created

2019-09-11T20:57:07Z

Updated

2019-09-11T21:06:27Z

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")
INFO