Ошибка во время выполнения Python 3, Kattis «Putovanje»

#python #runtime

#python #время выполнения

Вопрос:

Kattis отклонил четыре попытки отправить скрипт Python 3 для «Putovanje», указав в качестве причины только «ошибку времени выполнения». Он отлично работает в VSCode с тремя тестовыми примерами, которые я встроил в него, а также с примерами из самого Kattis. Однако это может означать, что Kattis использует более хитрый набор входных данных.

Онлайн-ресурсы направляют меня к следующим решениям: «… не должно иметь возвращаемого значения, равного нулю …» (что я исправил, альтернативно удалив строку возврата из плодотворной функции «ответ» или назначив вызов переменной в main (т. Е. Функции «решение»)) или»… используйте блок try / except, чтобы избежать запроса входных данных после EOF …» (я включил его в новейшие версии моего кода, здесь ). Затем я использовал Python Tutor для визуализации кода еще в нескольких тестовых примерах, таких как 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10 чтобы убедиться, что все циклы идут к завершению. Кстати, использование метода списка fruits.remove() меня немного беспокоит, поскольку длина списка сокращается при каждом последующем удалении, но пока все мои тестовые примеры не превысили емкость списка.

Чего мне здесь не хватает, что Kattis продолжает улавливать?

Примечание: моя тестовая функция вызывается только через терминал, через «python putovanje.py test» — в противном случае эта функция игнорируется.

Вот описание Kattis: https://open.kattis.com/problems/putovanje

И вот мой код:

 # Module requests
import sys

def answer(fruits, C, N):
    loop = int(0)
    # marker is the desired end result
    count = int(0)
    sum = int(0) 
    marker = int(0)
    it = int(0)

    #loops over successive indices
    for iterator2 in range(len(fruits)):
        #loops over available indices
        for iterator in range(len(fruits)): 
            if ((sum   fruits[iterator] <= C)):
                sum = sum   fruits[iterator]
                count =1

        # stores largest count
        if (count > marker):
            marker = count
        count = int(0)
        sum = int(0)
        loop =1
        if (loop == N):
            break
        #advances iterator
        fruits.remove(fruits[it])

    # print and return maximum fruits count
    print(marker)
    return marker

def solution():
    C = int(0)
    N = int(0)
    i = int(0)
    elem = int(0)

    # Read in total number of fruits (list length)
    N = int(input())
    # Read in total amount of weight (list length)
    C = int(input())

    fruits = []

    # Read in fruit weights to list by append loop
    for i in range(N):
        try:
            elem=int(input())
        except EOFError:  #stackoverflow.com
            break
        fruits.append(elem)

    # computes desired result
    marker = answer(fruits, C, N)

def test():
    #local test cases
    berries = [1,2,4,2,1]
    mushrooms = [1, 1000, 1]
    nuts = [10,9,8,7,6,5,4,3,2,1]
    assert answer(berries, 5, 5) == 3
    assert answer(mushrooms, 1000, 3) == 2
    assert answer(nuts, 10, 10) == 4
    print("All test cases passed.")

if __name__ == "__main__":
    if len(sys.argv) > 1 and sys.argv[1] == 'test':
        test()
    else:
        solution()
  

Ответ №1:

Существует проблема с обработкой вашего ввода. Он считывает всю строку ввода сразу, поэтому вам нужно разделить эту строку и присвоить ее переменным.

 N, C = map(int, input().split())
fruits = [int(x) for x in input().split()]