Решение на Навигация на Piet от Александър Сариков

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

Към профила на Александър Сариков

Резултати

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

Код

def calculate_final_vector(point, codes):
x = point[0]
y = point[1]
hex_colors = {
'C0FFC0': ('green', 'light'),
'00C000': ('green', 'dark'),
'FFFFC0': ('yellow', 'light'),
'C0C000': ('yellow', 'dark'),
'FFC0C0': ('red', 'light'),
'C00000': ('red', 'dark'),
'C0C0FF': ('blue', 'light'),
'0000C0': ('blue', 'dark'),
'FFFFFF': ('white', ''),
'000000': ('black', ''),
}
for code in codes:
formatted_code = code.upper()
if formatted_code not in hex_colors:
continue
# skip if not defined in hex_colors
hue = hex_colors[formatted_code][0]
saturation = hex_colors[formatted_code][1]
match hue:
case 'green':
if saturation == 'dark':

Този вариант за проверка работи, но не бих базирал логиката си на стрингови литерали. Може би по-удачен ватиант е вместо този string,в hex_colors да сложиш инкрементора и директно да го използваш" x/y += saturation

Не е нужно да пускаш ново решение. Просто идея за следващия път.

x += 1
else:
x -= 1
case 'yellow':
if saturation == 'dark':
y += 1
else:
y -= 1
case 'red':
if saturation == 'dark':
x -= 1
else:
x += 1
case 'blue':
if saturation == 'dark':
y -= 1
else:
y += 1
case 'black':
break
# end
case 'white':
continue
# nothing happens
return (x, y)

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

........
----------------------------------------------------------------------
Ran 8 tests in 0.089s

OK

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

Александър обнови решението на 23.10.2022 11:58 (преди над 1 година)

+def calculate_final_vector(point, codes):
+ x = int(point[0])
+ y = int(point[1])
+
+ hex_colors = {
+ 'C0FFC0': ('green', 'light'),
+ '00C000': ('green', 'dark'),
+ 'FFFFC0': ('yellow', 'light'),
+ 'C0C000': ('yellow', 'dark'),
+ 'FFC0C0': ('red', 'light'),
+ 'C00000': ('red', 'dark'),
+ 'C0C0FF': ('blue', 'light'),
+ '0000C0': ('blue', 'dark'),
+ 'FFFFFF': ('white', ''),
+ '000000': ('black', ''),
+ }
+
+ for code in codes:
+ formatted_code = code.upper()
+
+ if formatted_code not in hex_colors:
+ continue
+ # skip if not defined in hex_colors
+
+ hue = hex_colors[formatted_code][0]
+ saturation = hex_colors[formatted_code][1]
+
+ match hue:
+ case 'green':
+ if saturation == 'dark':
+ x += 1
+ else:
+ x -= 1
+ case 'yellow':
+ if saturation == 'dark':
+ y += 1
+ else:
+ y -= 1
+ case 'red':
+ if saturation == 'dark':
+ x -= 1
+ else:
+ x += 1
+ case 'blue':
+ if saturation == 'dark':
+ y -= 1
+ else:
+ y += 1
+ case 'black':
+ break
+ # end
+ case 'white':
+ continue
+ # nothing happens
+ return (x, y)

Александър обнови решението на 23.10.2022 12:15 (преди над 1 година)

def calculate_final_vector(point, codes):
- x = int(point[0])
- y = int(point[1])
+ x = point[0]
+ y = point[1]
hex_colors = {
'C0FFC0': ('green', 'light'),
'00C000': ('green', 'dark'),
'FFFFC0': ('yellow', 'light'),
'C0C000': ('yellow', 'dark'),
'FFC0C0': ('red', 'light'),
'C00000': ('red', 'dark'),
'C0C0FF': ('blue', 'light'),
'0000C0': ('blue', 'dark'),
'FFFFFF': ('white', ''),
'000000': ('black', ''),
}
for code in codes:
formatted_code = code.upper()
if formatted_code not in hex_colors:
continue
# skip if not defined in hex_colors
hue = hex_colors[formatted_code][0]
saturation = hex_colors[formatted_code][1]
match hue:
case 'green':
if saturation == 'dark':

Този вариант за проверка работи, но не бих базирал логиката си на стрингови литерали. Може би по-удачен ватиант е вместо този string,в hex_colors да сложиш инкрементора и директно да го използваш" x/y += saturation

Не е нужно да пускаш ново решение. Просто идея за следващия път.

x += 1
else:
x -= 1
case 'yellow':
if saturation == 'dark':
y += 1
else:
y -= 1
case 'red':
if saturation == 'dark':
x -= 1
else:
x += 1
case 'blue':
if saturation == 'dark':
y -= 1
else:
y += 1
case 'black':
break
# end
case 'white':
continue
# nothing happens
return (x, y)