Решение на Навигация на Piet от Иван Досев

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

Към профила на Иван Досев

Резултати

  • 9 точки от тестове
  • 1 бонус точка
  • 10 точки общо
  • 7 успешни тест(а)
  • 1 неуспешни тест(а)

Код

def calculate_final_vector(nums, colors):
[left, up] = nums

Това ще сработи, но е страшно подвеждащо. Unpacking-а работи без скоби, камо ли квадратни, така създаваш илюзията, че си искал да използваш списък.

for color in colors:
movement_left = 0
movement_up = 0
shade = 0
if color.lower() == 'ffffff':
continue
if color.lower() == '000000':
break
rgb = tuple(int(color[i:i+2], base=16) for i in (0, 2, 4))
[r, g, b] = rgb
if r == g:
movement_up = 1
if r > 192 and g > 192:
shade = -1
else:
shade = 1
elif r > g and r >= b:
movement_left = -1
if r > 192:
shade = -1
else:
shade = 1
elif g > r and g > b:
movement_left = 1
if g > 192:
shade = -1
else:
shade = 1
elif b > r and b > g:
movement_up = -1
if b > 192:
shade = -1
else:
shade = 1
left = shade * movement_left + left
up = shade * movement_up + up
return left, up

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

.....F..
======================================================================
FAIL: test_positive_step (test.TestCalculateFinalVector)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/storage/deedee/data/rails/pyfmi-2022/releases/20221020151654/lib/language/python/runner.py", line 67, in thread
    raise result
AssertionError: Tuples differ: (0, 1) != (0, -1)

First differing element 1:
1
-1

- (0, 1)
+ (0, -1)
?     +


----------------------------------------------------------------------
Ran 8 tests in 0.094s

FAILED (failures=1)

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

Иван обнови решението на 21.10.2022 10:55 (преди над 1 година)

+def calculate_final_vector(nums, colors):
+ [left, up] = nums

Това ще сработи, но е страшно подвеждащо. Unpacking-а работи без скоби, камо ли квадратни, така създаваш илюзията, че си искал да използваш списък.

+ for color in colors:
+ movement_left = 0
+ movement_up = 0
+ shade = 0
+ if color.lower() == 'ffffff':
+ continue
+ if color.lower() == '000000':
+ break
+ rgb = tuple(int(color[i:i+2], base=16) for i in (0, 2, 4))
+ [r, g, b] = rgb
+ if r == g:
+ movement_up = 1
+ if r > 192 and g > 192:
+ shade = -1
+ else:
+ shade = 1
+ elif r > g and r >= b:
+ movement_left = -1
+ if r > 192:
+ shade = -1
+ else:
+ shade = 1
+ elif g > r and g > b:
+ movement_left = 1
+ if g > 192:
+ shade = -1
+ else:
+ shade = 1
+ elif b > r and b > g:
+ movement_up = -1
+ if b > 192:
+ shade = -1
+ else:
+ shade = 1
+ left = shade * movement_left + left
+ up = shade * movement_up + up
+ return left, up

Аз отначало не разбрах условието, и си мислех, че трябва да работи със всякакви цветове, а не само указаните, и за това помислих как да го направи да разпознава кога един цвят е тъмен и кога светъл. :Д Ако е проблем мога да го махна