Loading...
KALOYAN_123 avatar KALOYAN_123 34 Точки

Проблем на задача 03. Moving Target

Здравейте колеги имам проблем с задача 03. Moving Target от "Programming Fundamentals Mid Exam Retake - 07 April 2020". 

Мисля, че греша някъде при командата "Strke", но не мога да си намеря грешката. 

 

Моят кодhttps://pastebin.com/N6WQBi2y

Условиетоhttps://judge.softuni.bg/Contests/Practice/DownloadResource/8988

 

1
Fundamentals Module
MartinBG avatar MartinBG 4803 Точки
Best Answer

При команди Add и Shoot не проверявате дали индекса не е по-малък от нула, а само дали е по-малък от размера на targets_sequence.

Другата грешка беше в логиката на Strike командата. Този код ще пропусне всички таргети, чиито точки съвпадат с някой от селектираните за премахване :

            strike = targets_sequence[start:end + 1]
            new_targets_sequence = [x for x in targets_sequence if x not in strike]

Напр. при лист [1, 2, 5, 5, 5, 5, 2, 1, 3] ако трябва да премахнем първите 3 елемента (1, 2, 5) ще ни осане само [3], вместо [5, 5, 5, 2, 1, 3].

 

Оправеното решение;

targets_sequence = [int(x) for x in input().split(' ')]

while True:
    tokens = input().split(' ')
    command = tokens[0]
    index = 0
    value = 0

    if command == "Shoot":
        index = int(tokens[1])
        value = int(tokens[2])

        if 0 <= index < len(targets_sequence):
            targets_sequence[index] -= value

            if targets_sequence[index] <= 0:
                targets_sequence.pop(index)

    elif command == "Add":
        index = int(tokens[1])
        value = int(tokens[2])

        if 0 <= index < len(targets_sequence):
            targets_sequence.insert(index, value)
        else:
            print("Invalid placement!")

    elif command == "Strike":
        index = int(tokens[1])
        radius = int(tokens[2])

        start = index - radius
        end = index + radius

        if start >= 0 and end < len(targets_sequence):
            del targets_sequence[start: end + 1]
        else:
            print("Strike missed!")

    elif command == "End":
        targets_sequence = [str(x) for x in targets_sequence]
        print("|".join(targets_sequence))
        break

 

0
02/07/2020 22:04:00
KALOYAN_123 avatar KALOYAN_123 34 Точки

Благодаря ти за бързия и точен. Много ми помогна.

1
krum_43 avatar krum_43 756 Точки

Командата Strike e малко по-трудна за имплементиране на произволен език.

 

0
04/07/2020 16:33:37
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.