Здравейте, някой има ли обяснение защо на решението на посочената задача Judge дава 0/100, при излезли преди това нулеви тестове и debug в пълен синхрон с указанията? В същото време ми дава 40/100 на незавършено решение(посочено в края).
Loading...
+ Нов въпрос
nd_nikolov avatar nd_nikolov 6 Точки

Mid Exam Python "Array Modifier"?!

Здравейте, някой има ли обяснение защо на решението на посочената задача Judge дава 0/100, при излезли преди това нулеви тестове и debug в пълен синхрон с указанията? В същото време ми дава 40/100 на незавършено решение(посочено в края).

02. Array Modifier

You are given an array with integers. Write a program to modify the elements after receive the commandsswap”, “multiply” or “decrease”.

  • “swap {index1} {index2}” take two elements and swap their places.
  • “multiply {index1} {index2}” take element at the 1st index and multiply it with element at 2nd index. Save the product at the 1st index.
  • “decrease” decreases all elements in the array with 1.

Input

On the first input line you will be given the initial array values separated by a single space.

On the next lines you will receive commands until you receive the command “end”. The commands are as follow:

  • “swap {index1} {index2}”
  • “multiply {index1} {index2}”
  • “decrease”

Output

The output should be printed on the console and consist element of the modified arrayseparated by “, “(comma and single space).

Constraints

  • Commands will be: “swap”, “multiply”, “decrease” and “end
  • Elements of the array will be integer numbers in the range [-231...231]
  • Count of the array elements will be in the range [2...100]
  • Indexes will be always in the range of the array

Examples

Input

Output

Comments

23 -2 321 87 42 90 -123

swap 1 3

swap 3 6

swap 1 0

multiply 1 2

multiply 2 1

decrease

end

86, 7382, 2369942, -124, 41, 89, -3

23 -2 321 87 42 90 -123 – initial values

swap 1(-2) and 3(87) ▼

23 87 321 -2 42 90 -123

swap 3(-2) and 6(-123) ▼

23 87 321 -123 42 90 -2

swap 1(87) and 0(23) ▼

87 23 321 -123 42 90 -2

multiply 1(23) 2(321) = 7383 ▼

87 7383 321 -123 42 290 -2

multiply 2(321) 1(7383) = 2369943 ▼

87 7383 2369943 -123 42 90 -2

decrease – all - 1 ▼

86 7383 2369942 -124 41 89 -3

1 2 3 4

swap 0 1

swap 1 2

swap 2 3

multiply 1 2

decrease

end

1, 11, 3, 0

 

Решение 0/100

array = input().split()
command = input().split()
amount = 0
new_array = []

while not command == "end":
    if command[0] == "swap":
        array[int(command[1])], array[int(command[2])] = array[int(command[2])], array[int(command[1])]
    elif command[0] == "multiply":
        amount = int(array[int(command[1])]) * int(array[int(command[2])])
        array.remove(array[int(command[1])])
        array.insert(int(command[1]), str(amount))
    elif command[0] == "decrease":
        for item in array:
            new_array.append(int(item) - 1)
    command = input().split()
    if command[0] == "end":
        break
print(", ".join(map(str, new_array)))

 

Решение 40/100

array = input().split()
command = input().split()
amount = 0
while not command == "end":
    if command[0] == "swap":
        array[int(command[1])], array[int(command[2])] = array[int(command[2])], array[int(command[1])]
    if command[0] == "multiply":
        amount = int(array[int(command[1])]) * int(array[int(command[2])])
        array.insert(int(command[1]), str(amount))
        array.remove(array[int(command[2])])
    if command[0] == "decrease":
        decreased_array = [int(x)-1 for x in array]
    if command[0] == "end":
        break
    command = input().split()
print(", ".join(map(str, array)))

Предварително благодаря за отделеното време и направените усилия!

Тагове:
0
Python Fundamentals 08/07/2020 14:25:30
KALOYAN_123 avatar KALOYAN_123 22 Точки

Здравей проблемът ти е, че очакваш всеки тест да има командата "decrease" и съответна при тест без тази команда променливата ти new_array остава празна

 

Пример: 

0 1 2 3 4 5
swap 0 4

ще ти принтира празен ред.

 

Затова реших, че ще бъде по-лесно да използваш map() и lamda за да намалиш всяко едно число по отделно и вместо да правиш нов лист просто да намаляш всяко число от вече съществуващия, защото накрая ако има някаква друга команда след "decrease" тя няма да се отрази на new_array.

 

Ето го и завършеното решение: https://pastebin.com/HdMkDfbh

0
08/07/2020 14:52:48
nd_nikolov avatar nd_nikolov 6 Точки

Много ти благодаря! Абсолютно прав си!

0
Xpuck0 avatar Xpuck0 68 Точки

Здравей,

 

Недей да правиш нов лист. В решението ти с 40 точки в decrease смени името на променливата

array = [int(x)-1 for x in array]

multiply също ти е тотал щета. Просто трябва числото на дадения първи индекс да го умнижиш с числото от втория индекс и да го презапишеш. Може и по твоя начин, но е много излишно и дори инсъртваш и триеш на грешните места.

Иначе кода е за пълна оптимизация. Разгледай това решение и проучи и научи нещата, които не ги разбираш.

 

Успех!

0
08/07/2020 15:17:16
nd_nikolov avatar nd_nikolov 6 Точки

Благодаря!

0