Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- def path_in_room1(x1, y1, x2, y2, room):
- room[x1, y1] = 10
- room[x2, y2] = 0
- d = 10
- Flag1 = True
- while (room[x2, y2] == 0) and Flag1:
- Flag1 = False
- for i in range(0, np.shape(room)[0]):
- for j in range(0, np.shape(room)[0]):
- if room[i, j] == d:
- if i + 1 != np.shape(room)[0]:
- if room[i + 1, j] == 0:
- room[i + 1, j] = d + 1
- Flag1 = True
- if i - 1 >= 0:
- if room[i - 1, j] == 0:
- room[i - 1, j] = d + 1
- Flag1 = True
- if j + 1 != np.shape(room)[1]:
- if room[i, j + 1] == 0:
- room[i, j + 1] = d + 1
- Flag1 = True
- if j - 1 >= 0:
- if room[i, j - 1] == 0:
- room[i, j - 1] = d + 1
- Flag1 = True
- d += 1
- if (room[x2, y2] != 0):
- return True
- else:
- return False
- class Furniture:
- space = []
- _x, _y = -1, -1
- wasplaced = False
- def __init__(self, length=0, width=0):
- self.length = length
- self.width = width
- def x(self):
- return self._x
- def y(self):
- return self._y
- def place(self, x, y):
- return False
- def _check(self, x, y):
- if np.size(np.shape(self.space)) < 2:
- return False
- if x + np.shape(self.space)[0] > np.shape(room)[0]:
- return False
- if y + np.shape(self.space)[1] > np.shape(room)[1]:
- return False
- for i in range(0, np.shape(self.space)[0]):
- for j in range(0, np.shape(self.space)[1]):
- if room[x + i, y + j] > 0:
- return False
- copy = room.copy()
- if path_in_room1(x, y, dx, dy, copy):
- return True
- else:
- return False
- return True
- def dele(self):
- for i in range(np.shape(self.space)[0]):
- for m in range(np.shape(self.space)[1]):
- self.space[i, m] = 0
- self._set(self._x, self._y)
- def __str__(self):
- return str(self.__class__.__name__) + ' ' + 'Длина: ' + str(self.length) + ' ' + 'Ширина:' + str(
- self.width) + ' |' + 'В комнате:' + str(self.wasplaced)
- def _set(self, x, y):
- self._x = x
- self._y = y
- for i in range(0, np.shape(self.space)[0]):
- for j in range(0, np.shape(self.space)[1]):
- room[x + i, y + j] = self.space[i, j]
- class Table(Furniture): # Стол
- length, width = 0, 0
- FREE_PLACE =1
- def __init__(self, length, width):
- super().__init__(length, width)
- self.space = np.ones((length, width + self.FREE_PLACE))
- self.space[0:length, width:width + self.FREE_PLACE] = 3
- def place(self, x, y):
- if y == 0 or x == 0 or x == np.shape(room)[0] - 1 or y == np.shape(room)[1] - 1:
- if (x < 0) or (y < 0):
- return False
- if not self._check(x, y):
- return False
- self._set(x, y)
- return True
- else:
- return False
- def __str__(self):
- return str(self.__class__.__name__) + '| ' + 'Длина: ' + str(self.length) + '| ' + 'Ширина:' + str(
- self.width) + ' |' + 'В комнате:' + str(self.wasplaced)
- class OperTable(Furniture): # Стол операционный
- length, width = 0, 0
- FREE_PLACE = 1
- def __init__(self, length, width):
- super().__init__(length, width)
- self.space = np.ones((length, width + self.FREE_PLACE))
- self.space[0:length, width:width + self.FREE_PLACE] = 3
- def place(self, x, y):
- if y == 0 or x == 0 or x == np.shape(room)[0] - 1 or y == np.shape(room)[1] - 1:
- if (x < 0) or (y < 0):
- return False
- if not self._check(x, y):
- return False
- self._set(x, y)
- return True
- else:
- return False
- def __str__(self):
- return str(self.__class__.__name__) + '| ' + 'Длина: ' + str(self.length) + '| ' + 'Ширина:' + str(
- self.width) + ' |' + 'В комнате:' + str(self.wasplaced)
- class Case(Furniture): # Тубмочка
- length, width = 0, 0
- FREE_PLACE = 1 # ширина свободного места
- def __init__(self, length, width):
- super().__init__(length, width)
- self.space = np.ones((length, width + self.FREE_PLACE))
- self.space[0:length, width:width + self.FREE_PLACE] = 3
- def place(self, x, y):
- if y == 0 or x == 0 or x == np.shape(room)[0] - 1 or y == np.shape(room)[1] - 1:
- if (x < 0) or (y < 0):
- return False
- if not self._check(x, y):
- return False
- self._set(x, y)
- return True
- else:
- return False
- def __str__(self):
- return str(self.__class__.__name__) + '| ' + 'Длина: ' + str(self.length) + '| ' + 'Ширина:' + str(
- self.width) + ' |' + 'В комнате:' + str(self.wasplaced)
- class Bed(Furniture): # Кровать
- length, width = 0, 0
- FREE_PLACE = 1 #
- def __init__(self, length, width):
- super().__init__(length, width)
- self.space = np.ones((length, width + self.FREE_PLACE))
- self.space[0:length, width:width + self.FREE_PLACE] = 3
- def place(self, x, y):
- if y == 0 or x == 0 or x == np.shape(room)[0] - 1 or y == np.shape(room)[1] - 1:
- if (x < 0) or (y < 0):
- return False
- if not self._check(x, y):
- return False
- self._set(x, y)
- return True
- else:
- return False
- def __str__(self):
- return str(self.__class__.__name__) + '| ' + 'Длина: ' + str(self.length) + '| ' + 'Ширина:' + str(
- self.width) + ' |' + 'В комнате:' + str(self.wasplaced)
- class TableWithInstruments(Furniture): # Стол с инструментами
- FREE_PLACE = 1
- def __init__(self, length, width):
- super().__init__(length, width)
- self.space = np.ones((length, width + self.FREE_PLACE))
- self.space[0:length, width:width + self.FREE_PLACE] = 3
- def place(self, x, y):
- if y == 0 or x == 0 or x == np.shape(room)[0] - 1 or y == np.shape(room)[1] - 1:
- if (x < 0) or (y < 0):
- return False
- if not self._check(x, y):
- return False
- self._set(x, y)
- return True
- else:
- return False
- def __str__(self):
- return str(self.__class__.__name__) + '| ' + 'Длина: ' + str(self.length) + '| ' + 'Ширина:' + str(
- self.width) + ' |' + 'В комнате:' + str(self.wasplaced)
- class Chest(Furniture):
- length, width = 0, 0
- FREE_PLACE = 2 # ширина свободного места перед шкафом
- def __init__(self, length, width):
- super().__init__(length, width)
- self.space = np.ones((length, width + self.FREE_PLACE)) * 2
- self.space[0:length, width:width + self.FREE_PLACE] = 3
- def place(self, x, y):
- if y == 0 or x == 0 or x == np.shape(room)[0] - 1 or y == np.shape(room)[1] - 1:
- if (x < 0) or (y < 0):
- return False
- if not self._check(x, y):
- return False
- self._set(x, y)
- return True
- else:
- return False
- def __str__(self):
- return str(self.__class__.__name__) + '| ' + 'Длина: ' + str(self.length) + '| ' + 'Ширина:' + str(
- self.width) + ' |' + 'В комнате:' + str(self.wasplaced)
- fcount = 0
- type_room = 0
- s = input('Выберите тип помещения(Операционная, Палата, Столовая)')
- if (s=='Операционная'):
- type_room = 1
- if (s=='Палата'):
- type_room=2
- if (s=='Столовая'):
- type_room=3
- while True:
- inp0 = input('Размер комнаты?(Длина Ширина):').split(' ')
- doorinp = input('Координаты двери(x y):').split(' ')
- furnituresinp = int(input('Кол-во мебели: '))
- furnitures = []
- try:
- room = np.zeros((int(inp0[0]), int(inp0[1])))
- dx = int(doorinp[0])
- dy = int(doorinp[1])
- room[dx][dy] = 4
- except:
- print('Вы ввели некоректные данные, повторите попытку')
- continue
- break
- while True:
- while True:
- inpmenu = input(
- 'Что вы хотите сделать? Добавить эллемент мебели в список, Поставить мебель в комнату, Вывести информацию о мебели, Удалить из комнаты?(Добавить, Поставить, Информация, Удалить):')
- if inpmenu == 'Добавить':
- if (type_room==1):
- inp1 = input('ЧтоО вы хотите добавить?(Тумбочка, Стол, Cтол с инструментами, Шкаф, Операционный стол):')
- if (type_room==2):
- inp1 = input('Что вы хотите добавить?(Кровать, Тумбочки, Стол, Шкаф):')
- if (type_room==3):
- inp1 = input('Что вы хотите добавить?(Тумбочка, Стол):')
- try:
- if inp1 == 'Тумбочка':
- inp0 = input('Размер Тумбочки?(Длина Ширина):')
- if fcount < furnituresinp:
- new = Case(int(inp0.split(' ')[0]), int(inp0.split(' ')[1]))
- furnitures.append(new)
- fcount += 1
- else:
- print('Вы уже добавили максимальное кол-во мебели')
- if inp1 == 'Стол':
- inp0 = input('Размер стола?(Длина Ширина):')
- if fcount < furnituresinp:
- new = Table(int(inp0.split(' ')[0]), int(inp0.split(' ')[1]))
- furnitures.append(new)
- fcount += 1
- else:
- print('Вы уже добавили максимальное кол-во мебели')
- if inp1 == 'Шкаф':
- inp0 = input('Размер шкафа?(Длина Ширина):')
- if fcount < furnituresinp:
- new = Bed(int(inp0.split(' ')[0]), int(inp0.split(' ')[1]))
- furnitures.append(new)
- fcount += 1
- else:
- print('Вы уже добавили максимальное кол-во мебели')
- if inp1 == 'Кровать':
- inp0 = input('Размер кровати?(Длина Ширина):')
- if fcount < furnituresinp:
- new = Bed(int(inp0.split(' ')[0]), int(inp0.split(' ')[1]))
- furnitures.append(new)
- fcount += 1
- else:
- print('Вы уже добавили максимальное кол-во мебели')
- if inp1 == 'Cтол с инструментами':
- inp0 = input('Размер стола?(Длина Ширина):')
- if fcount < furnituresinp:
- new = TableWithInstruments(int(inp0.split(' ')[0]), int(inp0.split(' ')[1]))
- furnitures.append(new)
- fcount += 1
- else:
- print('Вы уже добавили максимальное кол-во мебели')
- except:
- print('Вы ввели некоректные данные, повторите попытку')
- continue
- elif inpmenu == 'Информация':
- cnt = 0
- for i in furnitures:
- print(str(cnt) + ' |' + str(i))
- cnt += 1
- elif inpmenu == 'Удалить':
- cnt = 0
- for i in furnitures:
- print(str(cnt) + ' |' + str(i))
- cnt += 1
- inpdelete = int(input('Номер удаляемого эллемента?:'))
- if furnitures[inpdelete].wasplaced:
- furnitures[inpdelete].dele()
- furnitures.remove(furnitures[inpdelete])
- print('Предмет удален')
- else:
- print('Этот предмет мебели не стоит в комнате')
- elif inpmenu == 'Поставить':
- errs = False
- for i in range(len(furnitures)):
- if not furnitures[i].wasplaced:
- errs = False
- for x in range(np.shape(room)[0]):
- for y in range(np.shape(room)[1]):
- x = furnitures[i].place(x, y)
- if not x:
- furnitures[i].wasplaced = False
- errs = True
- else:
- furnitures[i].wasplaced = True
- errs = False
- if not errs:
- break
- if not errs:
- break
- if errs:
- print('Не удалось установить:')
- for i in range(len(furnitures)):
- if not furnitures[i].wasplaced:
- print(str(furnitures[i]))
- print(room)
- else:
- print('Вы ввели неверную команду')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement