#!/usr/bin/python
# Alex Dehnert - 2007-04-10
# Phillips Academy
# Senior-5 ACSL (round 4)
# Flock
import sys
def parseInput(line):
ret = {}
elems = [ int(elem.strip()) for elem in line.split(',') ]
num = int(elems[0])
locs = elems[1:num+1]
ret['main'] = [ False ] * 10
for space in locs:
ret['main'][space-1] = True
ret['stage'] = elems[num+1]
return ret
class Flock:
def __init__(self, main, above = []):
#spaces = max(*locs)
self.spaces = [[], []]
self.spaces[0] = list(main) # copy it
if(above != []): self.spaces[1] = list(above)
else: self.spaces[1] = [ False ] * 10
self.changed = [False] * 10
def move(self, startLevel, startPos, endLevel, endPos):
endPos = endPos % 10
if((not self.changed[startPos]) and (not
self.spaces[endLevel][endPos])):
self.spaces[startLevel][startPos] = False
self.spaces[endLevel][endPos] = True
self.changed[startPos] = True
return True
return False
def nextStage(self):
flock2 = Flock(self.spaces[0], self.spaces[1])
slots = 10
# Rules 1 or 5 and 2
if(self.spaces[0][slots-1]):
flock2.move(0, slots-1, 0, 0)
for index in range(0,slots-1):
if(self.spaces[0][index]):
flock2.move(0, index, 0, index+1)
#if(self.spaces[1][index]):
#
flock2.move(1, index, 0, (index+1)%slots)
# Rule 6 --- move up
for index in range(0,slots):
if(self.spaces[0][(index+1)%slots] and
self.spaces[0][index]): # the next space is full
flock2.move(0, index, 1, index) # move up
# Rule 7 --- move back down
for index in range(0,slots):
if((not self.spaces[0][index]) and
self.spaces[1][index]):
#print "moving 1,", index
flock2.move(1, index, 0, index) # move down
return flock2
def countMain(self):
count = 0
for bird in self.spaces[0]:
if bird: count = count + 1
return count
def __str__(self):
ret = "Space: | "
for space in range(0, len(self.spaces[1])):
ret+=str(space+1)
ret += " |
"
ret = ret + "\nAbove: | "
for space in self.spaces[1]:
if space: ret+="B"
else: ret+=" "
ret += " | "
ret += "\nMain:
| "
for space in self.spaces[0]:
if space: ret+="B"
else: ret+=" "
ret += " | "
ret += "\n"
return ret
if __name__ == '__main__':
debug = True
debug = False
for line in sys.stdin.readlines():
data=parseInput(line)
#print data
stage = data['stage']
flock = Flock(data['main'])
#print flock
for s in range(2, stage+1):
flock = flock.nextStage()
if debug:
print "Stage", s
print flock
print flock.countMain()