Задания в pythonchallenge.com: задание 7 (smarty)


Вероятно, что ответ зашифрован в серой полоске. Открываем исходный код и видим, что картинка в формате 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)))
Bookmark the permalink.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *