+ Нов въпрос
nd_nikolov 6 Точки

# 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
08/07/2020 14:25:30
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 6 Точки

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

0
Xpuck0 68 Точки

Здравей,

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

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

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

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

Успех!

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

Благодаря!

0