"""Class simulating the Chinese toy Jiulianhuan."""
__author__ = 'zmx0142857'
class Jiulianhuan(object):
def __init__(self, loaded=True):
self.reset(loaded)
def reset(self, loaded=True):
self.log = []
if loaded == True:
self.status = (1 << 9) - 1
elif loaded == False:
self.status = 0
elif isinstance(loaded, int):
self.status = loaded
else:
raise TypeError("cannot set Jiulianhuan with type '%s'"
% str(type(loaded)))
def load(self, n):
if n == 1:
self.move(1)
return
if n == 2:
self.move(1)
self.move(2)
return
self.load(n-1)
self.unload(n-2)
self.move(n)
self.load(n-2)
def unload(self, n):
if n == 1:
self.move(1)
return
if n == 2:
self.move(2)
self.move(1)
return
self.unload(n-2)
self.move(n)
self.load(n-2)
self.unload(n-1)
def move(self, n):
mask = 1 << (n-1)
self.status ^= mask
self.log.append(n if self.status & mask != 0 else -n)
def view(self):
return format(self.status, '09b')
j = Jiulianhuan()
j.unload(9)
print(j.log)
print('total step:', len(j.log))