72 lines
1.7 KiB
Python
72 lines
1.7 KiB
Python
# size = 3
|
|
# obj = (1,2,4)
|
|
size = 12
|
|
objs = (2376, 1812, 1106, 563, 1536)
|
|
|
|
ope = 0
|
|
inter = [False,] * size
|
|
res = dict()
|
|
|
|
def switch(inter, i, type):
|
|
global ope
|
|
global objs
|
|
global res
|
|
if i < 0 or i > len(inter)-1:
|
|
raise RuntimeError("Mmmmmm")
|
|
s_old = "".join(["0" if not x else "1" for x in inter])
|
|
inter[i] = not inter[i]
|
|
ope = ope + 1
|
|
s = "".join(["0" if not x else "1" for x in inter])
|
|
if ope in objs:
|
|
res[ope] = int(s,2)
|
|
print("Operation #{:05d} ({}) - Switch #{:02d}: {} ==> {}".format(ope, type, i, s_old, s))
|
|
return inter
|
|
|
|
def action1(inter):
|
|
inter = switch(inter, 0, "a1")
|
|
return inter
|
|
|
|
def action2(inter):
|
|
i = 0
|
|
while inter[i] == False:
|
|
i=i+1
|
|
inter = switch(inter, i+1, "a2")
|
|
return inter
|
|
|
|
def set_all_off(inter, i):
|
|
if i <0:
|
|
return inter
|
|
# print("set_all_off", i)
|
|
if i > 0:
|
|
if inter[i] == False:
|
|
inter = set_all_off(inter, i-1)
|
|
else:
|
|
inter = set_inter(inter, i-1)
|
|
inter = set_all_off(inter, i-2)
|
|
inter = action2(inter)
|
|
inter = set_all_off(inter, i-1)
|
|
elif i == 0:
|
|
if inter[0] == True:
|
|
inter = action1(inter)
|
|
# print("end set_all_off", i)
|
|
return inter
|
|
|
|
def set_inter(inter, i):
|
|
if i < 0:
|
|
return inter
|
|
# print("set_inter", i)
|
|
if inter[i] == True:
|
|
return inter
|
|
if i > 0:
|
|
inter = set_inter(inter, i-1)
|
|
inter = set_all_off(inter, i-2)
|
|
inter = action2(inter)
|
|
else:
|
|
inter = action1(inter)
|
|
# print("end set_inter", i)
|
|
return inter
|
|
|
|
for i in range(0, size):
|
|
inter = set_inter(inter, size-1-i)
|
|
for obj in objs:
|
|
print(res[obj], end=', ') |