Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

niyazihasan avatar niyazihasan 83 Точки

Todo List 80/100

Здравейте, колеги

Някой може ли да помогне, защо не ми минава единия тест в Judge?

Това е условието на задачата:

You will receive a todo-notes until you get the command "End". The notes will be in the format: "{importance}-
{value}". Return the list of todo-notes sorted by importance. The maximum importance will be 10.

Input

Output

2-Walk the dog

1-Drink coffee

6-Dinner

5-Work

End

['Drink coffee', 'Walk the dog', 'Work', 'Dinner']

 Ето и кода:

command = input()
notes = [0] * 10

while command != "End":
    tokens = command.split("-")
    index = int(tokens[0])
    element = tokens[1]
    notes.insert(index, element)
    command = input()
result = []
for note in notes:
    if note != 0:
        result.append(note)
print(result)
Тагове:
0
Fundamentals Module
MartinBG avatar MartinBG 4803 Точки
Best Answer

На пръв поглед се забеляза, че не използвате правилно индексиране - индексите са от 0 до 9, докато приоритетите идват с номера от 1 до 10:

index = int(tokens[0]) - 1

Това не беше достатъчно за Judge, затова промених малко и структурата на notes:

command = input()
notes = [[] * 0 for i in range(10)]
while command != "End":
    tokens = command.split("-")
    index = int(tokens[0]) - 1
    element = tokens[1]
    notes[index].append(element)
    command = input()
result = []
for note in notes:
    if len(note) > 0:
        for n in note:
            result.append(n)
print(result)

 

Може би някой, който е по-навътре в Python ще може да даде по-смислено обяснение.

 

Aз лично, бих използвал dictionary за тази задача:

notes = {}

command = input()
while command != "End":
    tokens = command.split("-")
    importance = int(tokens[0])
    value = tokens[1]
    notes[importance] = value
    command = input()

result = []

for task in sorted(notes.items()):
    result.append(task[1])

print(result)

 

1
niyazihasan avatar niyazihasan 83 Точки

Благодаря

1
Dimitar_Damianov avatar Dimitar_Damianov 1 Точки

Причината, поради която е нужен вложен лист, е че вероятно при един от тестовете на Judge има повече от един task-a с еднакъв приоритет. По начина с един лист и функция insert() веднага щом получим втори task, с приоритет, който вече сме получавали, губим първия.

Пример:

3 - Walk the dog
3 - Feed the cat
End

Разглеждаме следното парче код:

tokens = command.split('-')
priority = int(tokens[0])
note = tokens[1]
notes.insert(priority - 1, note)

Лесно виждаме, че след първото изпълнение елементът с индекс 2 ще бъде променен на 'Walk the dog'. След второто изпълнение елементът с индекс 2 ще бъде променен на 'Feed the cat', като така губим предишния таск. Затова това решение получава 80/100.

1
Nikolay.Ishev avatar Nikolay.Ishev 1 Точки

Проблемът идва точно при повече от един task с еднакъв приоритет.

По време на while цикъла Insert не замества, а поставя всеки следващ елемент с еднакъв индекс пред предходния. Judge явно ги очаква в реда, в който са подадени в конзолата. Тоест ако имаме: 

2-Walk
2-Run
3-Dinner
End

с горния код ще получим резултат  ['Run', 'Walk', 'Dinner'], а judge очаква ['Walk', 'Run', 'Dinner']

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