Created
October 1, 2011 16:28
-
-
Save zenwerk/1256279 to your computer and use it in GitHub Desktop.
google code jam practice A-small
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# coding:utf-8 | |
# Snapperクラス | |
class Snapper(object): | |
def __init__(self): | |
self.state = 'OFF' | |
self.hasPower = False # 電源が供給されているか | |
self.isWorking = False # Snapperが稼働しているか | |
self.previous = None # 前に接続しているSnapper | |
self.follow = None # 次に接続しているSnapper | |
# Snapperを接続する | |
def connect(self, previous, follow): | |
# print 'connecting...', previous, 'and', follow | |
self.previous = previous | |
self.follow = follow | |
# 電力が供給されている場合はON/OFFを切り替える | |
def changeState(self): | |
if self.hasPower: | |
if self.state == 'ON': | |
self.state = 'OFF' | |
elif self.state == 'OFF': | |
self.state = 'ON' | |
# 電源供給の可否の判断 | |
def transmitPower(self): | |
if self.state == 'ON' and self.hasPower: | |
self.follow.hasPower = True | |
elif self.state == 'OFF' or self.hasPower == False: | |
self.follow.hasPower = False | |
def getPreviousPowerState(self): | |
if self.previous.state == 'ON' and self.previous.hasPower: | |
self.hasPower = True | |
elif self.previous.state == 'OFF': | |
self.hasPower = False | |
return self.hasPower | |
# 電源クラス | |
class Power(object): | |
def __init__(self): | |
self.hasPower = True # 電源は常にON | |
self.state = 'ON' | |
def connect(self, follow): | |
self.follow = follow | |
def transmitPower(self): | |
self.follow.hasPower = True | |
# 電球クラス | |
class Lamp(object): | |
def __init__(self): | |
self.state = 'OFF' | |
self.hasPower = False | |
def connect(self, previous): | |
self.previous = previous | |
def changeState(self): | |
if self.hasPower: | |
self.state = 'ON' | |
elif not self.hasPower: | |
self.state = 'OFF' | |
def getState(self): | |
return self.state | |
if __name__ == '__main__': | |
f = open('./A-small-practice.in', 'r') | |
T = str(f.readline()) | |
conditions = [] # N,Kの条件 | |
for i in f.readlines(): | |
N, K = i.split(' ') | |
conditions.append((int(N), int(K))) | |
count = 1 | |
for i in conditions: | |
snappers = [] | |
N = i[0] # Snapper数 | |
if N == 0: | |
print 'Case%d:OFF'%(count) | |
continue | |
for j in range(N): | |
snappers.append(Snapper()) | |
for j in range(1, N-1): | |
# print 'CONNECTING...', 'snapper[%d]'%(j), 'to', 'snapper[%d]'%(j-1), 'snapper[%d]'%(j+1) | |
snappers[j].connect(snappers[j-1], snappers[j+1]) | |
power = Power() | |
lamp = Lamp() | |
if N == 1: | |
power.connect(snappers[0]) | |
snappers[0].connect(power,lamp) | |
lamp.connect(snappers[0]) | |
else: | |
#print 'CONNECTING POWER AND LAMP...' | |
power.connect(snappers[0]) | |
snappers[0].connect(power, snappers[1]) | |
snappers[N-1].connect(snappers[N-2], lamp) | |
lamp.connect(snappers[N-1]) | |
K=i[1] # 指パッチン数 | |
power.transmitPower() # 電源からの電源供給 | |
for j in range(K): | |
# ON/OFFの状態更新 | |
for l in range(len(snappers)): | |
snappers[l].changeState() | |
# 電源供給状態の更新 | |
for l in range(len(snappers)): | |
power.transmitPower() | |
snappers[l].transmitPower() | |
#print '[%d, Power:%s State:%s] ->'%(l, snappers[l].hasPower, snappers[l].state) | |
lamp.changeState() | |
print 'Case #%d: %s' % (count, lamp.getState()) | |
count = count+1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment