Решение на Навигация на Piet от Йордан Глигоров

Обратно към всички решения

Към профила на Йордан Глигоров

Резултати

  • 10 точки от тестове
  • 0 бонус точки
  • 10 точки общо
  • 8 успешни тест(а)
  • 0 неуспешни тест(а)

Код

def calculate_final_vector(coordinates, colors):
x = coordinates[0]
y = coordinates[1]
colors_upper = [color.upper() for color in colors]
for color in colors_upper:
if color == "C0FFC0":
x -= 1
elif color == "00C000":
x += 1
elif color == "FFFFC0":
y -= 1
elif color == "C0C000":
y += 1
elif color == "FFC0C0":
x -= -1
elif color == "C00000":
x += -1
elif color == "C0C0FF":
y -= -1
elif color == "0000C0":
y += -1
elif color == "FFFFFF":
continue
elif color == "000000":
break
return (x, y)

Лог от изпълнението

........
----------------------------------------------------------------------
Ran 8 tests in 0.088s

OK

История (2 версии и 2 коментара)

Йордан обнови решението на 18.10.2022 23:21 (преди над 1 година)

+def calculate_final_vector(coordinates, colors):
+ x = coordinates[0]
+ y = coordinates[1]
+ for color in colors:
+ color = color.upper()

Не бих посъветвал да презаписваш променливата, която използваш като референция на текущата итерация от цикъла. Да, в конкретния случай това не е никакъв проблем, но ако създадеш навика да не го правиш, би могъл да си спестиш неприятности в по-сложен код. Ако преправяш вече съществуващ код, би било удобно да погледнеш само ред 4 и веднага да знаеш какво представлява color. Презаписвайки стойността му, вече не знаеш и получаваш неочаквани резултати.

Hint: Можеш да се справиш с този проблем, ако обходиш списък със стойности, които вече са upper(). Днес разгледахме няколко варианта за прилагане на една и съща операция върху всеки елемент от дадена колекция.

+ if color == "C0FFC0":
+ x -= 1
+ elif color == "00C000":
+ x += 1
+ elif color == "FFFFC0":
+ y -= 1
+ elif color == "C0C000":
+ y += 1
+ elif color == "FFC0C0":
+ x -= -1
+ elif color == "C00000":
+ x += -1
+ elif color == "C0C0FF":
+ y -= -1
+ elif color == "0000C0":
+ y += -1
+ elif color == "FFFFFF":
+ continue
+ elif color == "000000":
+ break
+ return (x,y)

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

Йордан обнови решението на 21.10.2022 13:11 (преди над 1 година)

def calculate_final_vector(coordinates, colors):
x = coordinates[0]
y = coordinates[1]
- for color in colors:
- color = color.upper()
+ colors_upper = [color.upper() for color in colors]
+ for color in colors_upper:
if color == "C0FFC0":
x -= 1
elif color == "00C000":
x += 1
elif color == "FFFFC0":
y -= 1
elif color == "C0C000":
y += 1
elif color == "FFC0C0":
x -= -1
elif color == "C00000":
x += -1
elif color == "C0C0FF":
y -= -1
elif color == "0000C0":
y += -1
elif color == "FFFFFF":
continue
elif color == "000000":
break
- return (x,y)
+ return (x, y)