Професионална програма
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 3857 Точки
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 630 Точки

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

 

0
04/07/2020 16:33:37