Advertisement
Guest User

Untitled

a guest
Apr 1st, 2015
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.76 KB | None | 0 0
  1. import random
  2. import time
  3. import sys
  4.  
  5. BLUE = '\033[94m'
  6. GREEN = '\033[92m'
  7. WALL = '\033[93m'
  8. SIGHT = '\033[95m'
  9. ENDC = '\033[0m'
  10.  
  11. class Person(object):
  12. position = (0, 0)
  13. direction = 0
  14. store = []
  15. sight = []
  16.  
  17. def __init__(self, store):
  18. self.store = store
  19. self.sight = []
  20. self.init_position()
  21. self.rotate()
  22.  
  23. def init_position(self):
  24. walkables = []
  25. for i in range(1, len(self.store)):
  26. for j in range(1, len(self.store[0])):
  27. if self.store[i][j] == 0:
  28. walkables.append((j, i))
  29. self.position = random.choice(walkables)
  30.  
  31. def rotate(self):
  32. self.direction = random.randint(0, 3)
  33.  
  34. def move(self):
  35. movables = [self.position]
  36. if self.position[0]+1 < len(self.store[0]) and self.store[self.position[1]][self.position[0]+1] != 1:
  37. movables.append((self.position[0]+1, self.position[1]))
  38. if self.position[0]-1 > 0 and self.store[self.position[1]][self.position[0]-1] != 1:
  39. movables.append((self.position[0]-1, self.position[1]))
  40. if self.position[1]+1 < len(self.store) and self.store[self.position[1]+1][self.position[0]] != 1:
  41. movables.append((self.position[0], self.position[1]+1))
  42. if self.position[1]-1 > 0 and self.store[self.position[1]-1][self.position[0]] != 1:
  43. movables.append((self.position[0], self.position[1]-1))
  44. self.position = random.choice(movables)
  45.  
  46. def sights(self):
  47. self.sight = []
  48. if self.direction == 0:
  49. for i in range(self.position[1]-1, 0, -1):
  50. if self.store[i][self.position[0]] != 0:
  51. break
  52. self.sight.append((self.position[0], i))
  53. elif self.direction == 1:
  54. for i in range(self.position[0]+1, len(self.store[0])):
  55. if self.store[self.position[1]][i] != 0:
  56. break
  57. self.sight.append((i, self.position[1]))
  58. elif self.direction == 2:
  59. for i in range(self.position[1]+1, len(self.store)):
  60. if self.store[i][self.position[0]] != 0:
  61. break
  62. self.sight.append((self.position[0], i))
  63. elif self.direction == 3:
  64. for i in range(self.position[0]-1, 0, -1):
  65. if self.store[self.position[1]][i] != 0:
  66. break
  67. self.sight.append((i, self.position[1]))
  68. return self.sight
  69.  
  70. class LostSimulation(object):
  71.  
  72. store = []
  73. mamma = (0, 0)
  74. me = (0, 0)
  75. step = 0
  76.  
  77. def __init__(self):
  78. self.store = [
  79. [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
  80. [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
  81. [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1],
  82. [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1],
  83. [1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
  84. [1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1],
  85. [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1],
  86. [1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1],
  87. [1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1],
  88. [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
  89. [1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1],
  90. [1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1],
  91. [1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1],
  92. [1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1],
  93. [1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
  94. [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1],
  95. [1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
  96. [1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1],
  97. [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
  98. self.mamma = Person(self.store)
  99. self.me = Person(self.store)
  100. self.step = 0
  101.  
  102. def is_found(self):
  103. if self.mamma.position == self.me.position:
  104. return True
  105. elif self.mamma.position in self.me.sights():
  106. return True
  107. elif self.me.position in self.mamma.sights():
  108. return True
  109. else:
  110. return False
  111.  
  112. def step_forward(self):
  113. self.mamma.rotate()
  114. self.mamma.move()
  115. self.me.rotate()
  116. self.me.move()
  117. self.step += 1
  118.  
  119. def draw_situation(self):
  120. sys.stdout.flush()
  121. for i in range(0, len(self.store)):
  122. for j in range(0, len(self.store[0])):
  123. someone_in_there = False
  124. if self.mamma.position == (j, i):
  125. someone_in_there = True
  126. print BLUE + "M" + ENDC,
  127. if self.me.position == (j, i):
  128. someone_in_there = True
  129. print GREEN + "X" + ENDC,
  130. if not someone_in_there:
  131. if self.store[i][j] == 0:
  132. if (j, i) in self.mamma.sight or (j, i) in self.me.sight:
  133. print SIGHT + "." + ENDC,
  134. else:
  135. print " ",
  136. else:
  137. print WALL + str(self.store[i][j]) + ENDC,
  138. print ""
  139.  
  140.  
  141. for idx in range(0, 100000):
  142. sim = LostSimulation()
  143. #sim.draw_situation()
  144. while not sim.is_found():
  145. # time.sleep(0.1)
  146. # sim.draw_situation()
  147. sim.step_forward()
  148. #sim.draw_situation()
  149. print sim.step
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement