Навигация на Piet
- Краен срок:
- 25.10.2022 18:00
- Точки:
- 10
Срокът за предаване на решения е отминал
Вдъхновени от езотеричният език за програмиране Piet, днешната задача ще е да си направим "навигационна" система, базирана на цветове.
Piet Mondrian е рисувал картини, които са изглеждали по следния начин:
Сега си представете, че се движим последователно по "пикселите/квадратите" (however big or small, няма значение) на картина на Piet Mondrian, която съдържа информация за стигане от точка А до точка Б. Нюансът (hue) и наситеността (saturation) на всеки пиксел носят информация за определена посока в която се движим. За нашите цели ще опростим "картината" до едномерна последователност от цветове.
Имаме следните правила:
- Нюансът определя посоката по следната таблица:
- Зелено - надясно
- Жълто - нагоре
- Червено - наляво
- Синьо - надолу
- Наситеността на пиксела определя магнитуда на движението:
- Светло - стъпка -1 по посоката на движение
- Тъмно - стъпка +1 по посоката на движение
- Има два специални цвята:
- Черно - '000000' - означава "край" (не е задължително да присъства, в някои случаи ще го има, в други случаи изпълнението продължава до изчерпване на "пикселите")
- Бяло - 'ffffff' - означава "нищо"... Тоест нищо не се случва с координатите.
Целта на занятието е написването на функцията calculate_final_vector, която приема:
- Начална точка, под формата на вектор в равнина - (x1, y1)
- Списък с hex кодове на цветове във формат:
['ffc0c0', '00ff00', etc.]
Забележка: Цветовете могат да бъдат както 'ffc0c0', така и 'FFC0C0'. С други думи - погрижете се функцията да работи независимо от case-а на цветовете.
На базата на подадените hex кодове на цветове от функцията се очаква да изчисли движението от началната точка и да върне като резултат вектор (x2, y2).
Ето ви и пример:
>>> calculate_final_vector((1, 1), ['00C000', 'C0FFC0', 'C00000', 'FFFFFF', 'C0C000'])
(0, 2)
Обяснение:
- '00C000' - нюанс-зелено, наситеност-тъмно. Следователно посоката ни на движение е надясно, а стъпката - +1. Получаваме вектор (не забравяйте, началният ни такъв е (1, 1)) (2, 1).
- 'C0FFC0' - отново зелено, този път - светло. Посоката на движение отново е надясно, стъпката, обаче, е -1. Резултат - (1, 1).
- 'C00000' - тъмно червено, посоката е наляво, стъпката е 1. Резултат - (0, 1).
- 'FFFFFF' - бяло, не правим нищо. Векторът остава (0, 1).
- 'C0C000' - тъмно жълто, най-накрая движение по y координатата. Посоката е нагоре, стъпката е 1. Резултат - (0, 2).
Дефиниция на цветовете, които функцията трябва да поддържа, се намират в следната таблица: