Вероятно, что ответ зашифрован в серой полоске. Открываем исходный код и видим, что картинка в формате png. Для работы с png-изображениями в Python существует несколько библиотек, наиболее удобной мне показалась Pillow. Устанавливаем: pip install Pillow
.
Считываем все цвета всех пикселей первого столбца. Нам нужно определить координаты по вертикали начала серой полосы:
1 2 3 4 5 6 7 8 9 | from urllib.request import urlopen from PIL import Image img_file = urlopen('http://www.pythonchallenge.com/pc/def/oxygen.png') img = Image.open(img_file) width, height = img.size px = img.load() for i in range(height): print(i, ' - ', px[0,i]) |
from urllib.request import urlopen from PIL import Image img_file = urlopen('http://www.pythonchallenge.com/pc/def/oxygen.png') img = Image.open(img_file) width, height = img.size px = img.load() for i in range(height): print(i, ' - ', px[0,i])
Зашифрованное послание начинается со строки 43. Попробуем получить код цвета и преобразовать его в букву с помощью функции chr.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from urllib.request import urlopen from PIL import Image img_file = urlopen('http://www.pythonchallenge.com/pc/def/oxygen.png') img = Image.open(img_file) width, height = img.size px = img.load() for i in range(height): print(i, ' - ', px[0,i]) answer = '' for i in range(0, width): answer = answer + chr(px[i,43][0]) print(answer) |
from urllib.request import urlopen from PIL import Image img_file = urlopen('http://www.pythonchallenge.com/pc/def/oxygen.png') img = Image.open(img_file) width, height = img.size px = img.load() for i in range(height): print(i, ' - ', px[0,i]) answer = '' for i in range(0, width): answer = answer + chr(px[i,43][0]) print(answer)
Что-то похожее на текст, только символы повторяются по 7 раз. Исправим это:
1 2 3 4 5 6 | answer = '' for i in range(0, width, 7): answer = answer + chr(px[i,43][0]) print(answer) |
answer = '' for i in range(0, width, 7): answer = answer + chr(px[i,43][0]) print(answer)
Вот так лучше. Получаем массив чисел, которые после известного преобразования и будут ответом.
И финальный код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | from urllib.request import urlopen from PIL import Image img_file = urlopen('http://www.pythonchallenge.com/pc/def/oxygen.png') img = Image.open(img_file) width, height = img.size px = img.load() for i in range(height): print(i, ' - ', px[0,i]) answer = '' for i in range(0, width, 7): answer = answer + chr(px[i,43][0]) print(answer) key = [105, 110, 116, 101, 103, 114, 105, 116, 121] print(list(map(lambda x: chr(x), key))) |
from urllib.request import urlopen from PIL import Image img_file = urlopen('http://www.pythonchallenge.com/pc/def/oxygen.png') img = Image.open(img_file) width, height = img.size px = img.load() for i in range(height): print(i, ' - ', px[0,i]) answer = '' for i in range(0, width, 7): answer = answer + chr(px[i,43][0]) print(answer) key = [105, 110, 116, 101, 103, 114, 105, 116, 121] print(list(map(lambda x: chr(x), key)))