Initial release
This commit is contained in:
72
Le coffre à interrupteurs.py
Normal file
72
Le coffre à interrupteurs.py
Normal file
@@ -0,0 +1,72 @@
|
||||
# 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=', ')
|
||||
Reference in New Issue
Block a user