Я пытаюсь выполнить задачу google-foobar # 4 - escape-pods, мой код проходит 3 из 4 тестовых случаев на google-foobar. Я не уверен, что не так с моим кодом.Вот вопрос.
Напишите решение функции (входы, выходы, путь), которое принимает массив целых чисел, обозначающих, где находятся группы собранных кроликов, массив целых чисел, обозначающих, где расположены escape-модули, имассив целых чисел коридоров, возвращающий общее число кроликов, которые могут пройти на каждом временном шаге, в виде целого числа.Входы и выходы не пересекаются и поэтому никогда не будут пересекаться.Элемент path path [A] [B] = C описывает, что коридор, идущий от A до B, может вмещать кроликов C на каждом временном шаге.Существует не более 50 комнат, соединенных коридорами, и не более 2000000 кроликов, которые подойдут одновременно.
Например, если у вас есть:
entrances = [0, 1]
exits = [4, 5]
path = [
[0, 0, 4, 6, 0, 0], # Room 0: Bunnies
[0, 0, 5, 2, 0, 0], # Room 1: Bunnies
[0, 0, 0, 0, 4, 4], # Room 2: Intermediate room
[0, 0, 0, 0, 6, 6], # Room 3: Intermediate room
[0, 0, 0, 0, 0, 0], # Room 4: Escape pods
[0, 0, 0, 0, 0, 0], # Room 5: Escape pods
]
Затем на каждом временном шагеможет произойти следующее: 0 отправляет 4/4 кроликов на 2 и 6/6 кроликов на 3 1 посылает 4/5 кроликов на 2 и 2/2 кроликов на 3 2 посылает 4/4 кроликов на 4 и 4/4 кроликов на 53 отправляет 4/6 кроликов на 4 и 4/6 кроликов на 5
Таким образом, в общей сложности 16 кроликов могут добраться до спасательных капсул в 4 и 5 на каждом временном шаге.(Обратите внимание, что в этом примере комната 3 могла бы отправить любую вариацию из 8 кроликов в 4 и 5, например, 2/6 и 6/6, но окончательное решение остается тем же.)
Я пыталсяпереписать мой код несколько раз, но я не понимаю, что я делаю неправильно.
def solution(entrances, exits, layout):
exit_rooms = layout[exits[0]:]
new_layout = []
for i in layout:
temp = []
for item in i:
if item != 0:
temp.append(item)
new_layout.append(temp)
entrance = sorted(new_layout[:entrances[-1]+1])[::-1]
rooms_to_remove = sorted(entrances + exits)[::-1]
for i in rooms_to_remove:
del new_layout[i]
intermediate_rooms = new_layout
max_exit_room = []
for pods in exit_rooms:
max_exit_room.append(max(pods))
max_exit_room = max(max_exit_room)
count = 0
while True:
max_room_switch = len(intermediate_rooms)
current_room = 0 # switch intermediate rooms
for room in entrance:
xroom = room
# if the number of intermediate rooms are less than number of bunnies in rooms
if (max_room_switch != len(room) and len(room) > 1):
xroom = sorted(room)
xroom.remove(min(room))
for bunnies in xroom:
max_room = max(intermediate_rooms[current_room])
n = max_room - bunnies
if n <= 0:
count += max_room
elif n > 0:
count += bunnies
# room swtiching
if max_room_switch > 1:
if max_room_switch == current_room:
break
else:
if current_room == max_room_switch-1:
current_room = 0
else:
current_room += 1
break
# print(count)
return count
Для первых двух заданных тестов код проходит (6, 16), а для последнего ответа -935