Foobar - Escape Pods Вопрос Мой код не проходит все тесты - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь выполнить задачу 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

...