Advertisement
pegorino

Babylon tower

Nov 20th, 2017
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.19 KB | None | 0 0
  1. def block(room):
  2.     """
  3.    определяет в каком блоке находится искомая комната
  4.    :param room: номер комнаты
  5.    :return: верхняя граница блока, в котором находится комната
  6.    """
  7.     x = 2  # размер блока
  8.     sq = 1  # верхняя граница блока, в котором находится комната
  9.     et_up = 1  # сюда будем накапливать размерность блоков, чтобы знать этаж верхней границы блока
  10.     if room == 1:
  11.         print(1, 1, 1)
  12.     else:
  13.         while sq < room:
  14.             sq = x * x + sq
  15.             et_up += x
  16.             x += 1
  17.         # print('верхняя граница блока', sq, 'размерность блока', x - 1, 'этаж верхней границы блока', et_up)
  18.         return [sq, x - 1, et_up]
  19.  
  20.  
  21. def et_pos(block):
  22.     '''
  23.    определяет на каком этаже и на какой позиции находится комната, переданная на ввод функции block(room)
  24.    :param block: функция возвращает список [граница этажа, размерность блока, этаж верхней границы блока]
  25.    :return: этаж, позицию комнаты
  26.    '''
  27.     n = block[0]    # граница этажа
  28.     x = block[1]    # размерность блока
  29.     et = block[2]   # этаж верхней границы блока
  30.     right_room = n  # верхняя правая ячейка блока
  31.     c_room = n      # флаг выхода из цикла
  32.     while c_room >= room:
  33.         for curr_et in range(et, et - x, -1):
  34.             left_room = right_room - x
  35.             curr_pos = x
  36.             for curr_room in range(right_room, left_room, -1):
  37.                 c_room = curr_room
  38.                 if curr_room == room:
  39.                     print('комната {} на {} этаже {} слева'.format(room, curr_et, curr_pos))
  40.                     return [curr_et, curr_pos]
  41.                 curr_pos -= 1
  42.             right_room -= x
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement