timeit

Програмиране с Python

Курс във Факултета по Математика и Информатика към СУ

Второ предизвикателство

  1. Коя от всичките формули се очаква да ползваме за grayscale (има разлики в резултатите)?

    Която желаете. Важното е картинката да е "черно-бяла" в края на краищата.

    Виждайки предадените до тук решения, осъзнавам колко е било важно да поясним, че очакваме от вас да предадете само имплементацията на декоратора, без цялото решение на първа задача.

  2. @Петър, тестовете ти са твърде конкретни и ще покриват една конкретна имплементация.

    Например, изображението:

    [(0, 0, 255), (0, 255, 0), (0, 0, 255)],
    [(255, 0, 0), (0, 0, 255), (0, 255, 0)],
    [(0, 255, 0), (0, 255, 0), (255, 0, 0)]]
    

    го оценяваш като черно-бяла само ако резултатът е:

    [(85, 85, 85), (85, 85, 85), (85, 85, 85)],
    [(85, 85, 85), (85, 85, 85), (85, 85, 85)],
    [(85, 85, 85), (85, 85, 85), (85, 85, 85)]]
    

    Аз твърдя, че същото изображение ще се смята за черно-бяло и ако резултатът е:

    [(86, 86, 86), (86, 86, 86), (86, 86, 86)],
    [(86, 86, 86), (86, 86, 86), (86, 86, 86)],
    [(86, 86, 86), (86, 86, 86), (86, 86, 86)]]
    

    Може би някакъв интервал от възможни равни стойности би решил този проблем :)

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

  4. @Ивета

    Проблемът може би идва от това, че имаш грешка във функцията при третото get_level.

    def made_grayscale(image):
        def get_level(r, g, b):
            return int(r*0.21 + g*0.71 + b*0.07)
        return [[(get_level(x, y, z), get_level(x, y, z),
                  get_level(x, y, x)) for x, y, z in row] for row in image]
    
    Трите стойности в пиксела трябва да имат еднакви стойности.
  5. И аз съм написал greyscale вместо grayscale и ми гърмят тестовете.

    Лошо.

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

    Ръчното проверяване се състои в това автоматизирано да се генерират изображения, използвайки вашите декоратори и "на око" да се преценява дали резултатът е черно-бял вариант на аргумента. Причината за това е, че е доста тривиално да се провери дали дадена колекция от пиксели представя черно-бяло изображение с конкретни размери, но е крайно нетривиално да се провери дали това изображение е черно-белият вариант на подадено цветно такова.

    [..] тези тестове имат ли някакво значение в случая?

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

    В този ред на мисли, съм изключително доволен, че никой не е опитал да прави номера и тази мярка се оказа ненужна :)

Трябва да сте влезли в системата, за да може да отговаряте на теми.