parent
a5b12f590b
commit
7e4fcbf35e
@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
class Register:
|
||||
def __init__(self):
|
||||
self.zero = False
|
||||
self.negative = [False]
|
||||
self.positive = [False]
|
||||
self.pos = 0
|
||||
|
||||
def __str__(self):
|
||||
p = str(self.pos) + ": "
|
||||
if self.pos == 0:
|
||||
return p + str(self.zero)
|
||||
elif self.pos < 0:
|
||||
return p + str(self.negative[self.pos * -1])
|
||||
else:
|
||||
return p + str(self.positive[self.pos])
|
||||
|
||||
def read(self):
|
||||
if self.pos == 0:
|
||||
return self.zero
|
||||
elif self.pos < 0:
|
||||
return self.negative[self.pos * -1]
|
||||
else:
|
||||
return self.positive[self.pos]
|
||||
|
||||
def write(self,value):
|
||||
if self.pos == 0:
|
||||
self.zero = value
|
||||
elif self.pos < 0:
|
||||
self.negative[(self.pos * -1)] = value
|
||||
else:
|
||||
self.positive[self.pos] = value
|
||||
|
||||
def left(self):
|
||||
self.pos = self.pos - 1
|
||||
if self.pos < 0:
|
||||
if len(self.negative) < ((self.pos * -1) +1):
|
||||
self.negative.append(False)
|
||||
|
||||
def right(self):
|
||||
self.pos = self.pos + 1
|
||||
if self.pos > 0:
|
||||
if len(self.positive) < (self.pos +1):
|
||||
self.positive.append(False)
|
||||
|
||||
class Card:
|
||||
def __init__(self,number):
|
||||
self.number = number
|
||||
line = []
|
||||
with open("cards/" + str(self.number) ,'r') as f:
|
||||
for row in f:
|
||||
line.append(row[:-1])
|
||||
self.zero_write = bool(line[0])
|
||||
self.zero_move = bool(line[1])
|
||||
self.zero_next = int(line[2])
|
||||
self.one_write = bool(line[3])
|
||||
self.one_move = bool(line[4])
|
||||
self.one_next = int(line[5])
|
||||
|
||||
class Machine:
|
||||
def __init__(self):
|
||||
self.r = Register()
|
||||
self.card = Card(1)
|
||||
|
||||
def evolve(self):
|
||||
ret = True
|
||||
if self.r.read():
|
||||
if self.card.one_move:
|
||||
self.r.left()
|
||||
else:
|
||||
self.r.right()
|
||||
self.r.write(self.card.one_write)
|
||||
if not self.card.one_next:
|
||||
ret = False
|
||||
else:
|
||||
self.card = Card(self.card.one_next)
|
||||
else:
|
||||
if self.card.zero_move:
|
||||
self.r.left()
|
||||
else:
|
||||
self.r.right()
|
||||
self.r.write(self.card.zero_write)
|
||||
if not self.card.zero_next:
|
||||
ret = False
|
||||
else:
|
||||
self.card = Card(self.card.zero_next)
|
||||
|
||||
print(self.r)
|
||||
return ret
|
||||
|
||||
|
||||
turing = Machine()
|
||||
run = True
|
||||
while run:
|
||||
run = turing.evolve()
|
Loading…
Reference in new issue