~cpp import unittest class ManTestCase(unittest.TestCase): def setUp(self): self.man = Man() self.man.makeBoard(4, 3) def testMakeBoard(self): self.assertEquals([[0,0,0],[0,0,0],[0,0,0],[0,0,0]], self.man.board) def testMakeRoach(self): self.man.makeRoach(0,0,[1]) self.assertEquals([[1,0,0],[0,0,0],[0,0,0],[0,0,0]], self.man.board) def testMoveRoach(self): self.man.makeRoach(0,0,[2,4]) self.man.moveRoach() self.assertEquals([[1,1,0],[0,0,0],[0,0,0],[0,0,0]], self.man.board) self.man.moveRoach() self.assertEquals([[1,1,0],[0,1,0],[0,0,0],[0,0,0]], self.man.board) def testPierceRoach(self): self.man.makeRoach(0,0,[6,0]) self.man.moveRoachAllJourney() self.assertEquals([[1,0,1],[0,0,0],[0,0,0],[0,0,1]], self.man.board) def testIsBoardAllPassed(self): self.assertEquals(False, self.man.isBoardAllPassed()) self.man.board = [[1,2,1],[1,3,1],[1,4,1],[2,1,5]] self.assertEquals(True, self.man.isBoardAllPassed()) class Man: def __init__(self): self.direction = [(-1,0),(-1,1),(0,1),(1,1),(1,0),(1,-1),(0,-1),(-1,-1)] def makeBoard(self, row, col): self.row = row self.col = col self.board = [[0 for c in range(self.col)] for r in range(self.row)] def makeRoach(self, startRow, startCol, journey): self.currentRow = startRow self.currentCol = startCol self.journey = journey self.journeyCount = 0 self.movingCount = 0 self.board[self.currentRow][self.currentCol] += 1 def moveRoach(self): moveRow, moveCol = self.direction[self.journey[self.journeyCount]] self.journeyCount += 1 self.currentRow += moveRow self.currentCol += moveCol self.checkPierceRoach() self.board[self.currentRow][self.currentCol] += 1 self.movingCount += 1 def checkPierceRoach(self): if(self.currentRow == -1): self.currentRow = self.row - 1 elif(self.currentRow == self.row): self.currentRow = 0 if(self.currentCol == -1): self.currentCol = self.col - 1 elif(self.currentCol == self.col): self.currentCol = 0 def moveRoachAllJourney(self): while (len(self.journey) != self.movingCount or self.isBoardAllPassed()): self.moveRoach() def isBoardAllPassed(self): for r in range(self.row): for c in range(self.col): if(self.board[r][c] == 0): return False return True def showBoard(self): print self.movingCount for r in range(self.row): for c in range(self.col): print self.board[r][c], print if __name__ == '__main__': #unittest.main() row = int(raw_input()) col = int(raw_input()) startRow = int(raw_input()) startCol = int(raw_input()) journeyString = raw_input() journeyList = [] for i in range(len(journeyString)): journeyList.append(int(journeyString[i])) man = Man() man.makeBoard(row, col) man.makeRoach(startRow, startCol, journeyList) man.moveRoachAllJourney() man.showBoard()