def getdata(url): f = get_challenge.download(url, "kohsamui", "thailand") flag = -1 size = [] hor = [] ver = [] temp = [size, hor, ver] for i in f.getvalue().decode().split('\n'): if i == '': pass elif i[0] == '#': flag += 1 else: temp[flag].append(list(map(int, i.split()))) return (size[0][0], size[0][1], hor, ver)
# -*- coding: utf-8 -*- """http://www.pythonchallenge.com/pc/rock/beer.html:kohsamui:thailand""" __author__ = "子風" __copyright__ = "Copyright 2015, Sun All rights reserved" __version__ = "1.0.0" import get_challenge from PIL import Image import math import os if not os.path.exists('.\Level33'): os.mkdir('.\Level33') data = get_challenge.download("http://www.pythonchallenge.com/pc/rock/beer2.png", "kohsamui", "thailand") im = Image.open(data) f = im.getdata() color = im.getcolors() print(color) # remove maximum and output to image for i in range(len(color)-1, -1, -2): s = [] t = [] for j in f: if j != color[i][1] and j != color[i-1][1]: s.append(j) t.append(0) else:
#!/usr/bin/env python # -*- coding: utf-8 -*- """http://www.pythonchallenge.com/pc/hex/lake.html""" __author__ = "子風" __copyright__ = "Copyright 2015, Sun All rights reserved" __version__ = "1.0.0" import get_challenge import wave from PIL import Image wavs = [ wave.open(get_challenge.download("http://www.pythonchallenge.com/pc/hex/lake%d.wav" % i, "butter", "fly")) for i in range(1, 26) ] def jig(w): return Image.frombytes("RGB", (60, 60), w.readframes(w.getnframes())) jigsaw = Image.new("RGB", (300, 300), 0) for i in range(len(wavs)): jigsaw.paste(jig(wavs[i]), (60 * (i % 5), 60 * (i // 5))) jigsaw.show()
#!/usr/bin/env python # -*- coding: utf-8 -*- """http://www.pythonchallenge.com/pc/ring/guido.html:repeat:switch""" __author__ = "子風" __copyright__ = "Copyright 2015, Sun All rights reserved" __version__ = "1.0.0" import get_challenge import bz2 data = get_challenge.download("http://www.pythonchallenge.com/pc/ring/guido.html", "repeat", "switch") s = [len(sp) for sp in data.getvalue().split(b"\n")[12::]] text = bytearray(s) print(text) print(bz2.decompress(text).decode())
from PIL import Image def mandelbrot(left=0.34, bottom=0.57, width=0.036, height=0.027,max=128, size=(640, 480)): xstep = width / size[0] ystep = height / size[1] for y in range(size[1] - 1, -1, -1): for x in range(size[0]): c = complex(left + x * xstep, bottom + y * ystep) z = 0+0j for i in range(max): z = z * z + c if abs(z) > 2: break yield i data = get_challenge.download("http://www.pythonchallenge.com/pc/rock/mandelbrot.gif", "kohsamui", "thailand") ufos = Image.open(data) mandel = ufos.copy() # 直接使用原圖的類型、大小和調色板 mandel.putdata(list(mandelbrot())) mandel.show() # 自己畫出的圖像看上去和給出的圖一樣 # 通過比較像素確定自己畫的圖和給出的圖的差異 differences = [(a - b) for a, b in zip(ufos.getdata(), mandel.getdata()) if a != b] length = len(differences) print(length) # 輸出 1679,說明實際上有1679處不同 print(set(differences)) # 輸出set([-16, 16]),說明實際上所有差異都是16或者-16 factors = [x for x in range(2, length) if length % x == 0] print(factors) # 輸出 [23, 73] ,說明可以解析為23×73的圖像 # 構造 23×73的圖像,放大10倍後顯示 plot=Image.new('L',(23,73))
#!/usr/bin/env python # -*- coding: utf-8 -*- """http://www.pythonchallenge.com/pc/hex/speedboat.html""" __author__ = "子風" __copyright__ = "Copyright 2015, Sun All rights reserved" __version__ = "1.0.0" import get_challenge from PIL import Image import bz2,keyword data = get_challenge.download('http://www.pythonchallenge.com/pc/hex/zigzag.gif', 'butter', 'fly') f = Image.open(data) fd = f.tobytes() fp = f.palette.getdata()[1][::3] table = bytes.maketrans(bytearray([i for i in range(256)]), fp) ftran = fd.translate(table) print("fd[1:10]:", fd[1:10]) print("ftran[:10]:", ftran[:10]) diff = [bytes(0),bytes(0)] img = Image.new('1',f.size,0) for i in range(1,len(fd)): if fd[i]!=ftran[i-1]: diff[0] += bytes([fd[i]]) diff[1] += bytes([ftran[i-1]]) img.putpixel(((i-1)%f.size[0],(i-1)//f.size[0]),1)
#!/usr/bin/env python # -*- coding: utf-8 -*- """http://www.pythonchallenge.com/pc/ring/yankeedoodle.html:repeat:switch""" __author__ = "子風" __copyright__ = "Copyright 2015, Sun All rights reserved" __version__ = "1.0.0" import get_challenge from PIL import Image csv = get_challenge.download("http://www.pythonchallenge.com/pc/ring/yankeedoodle.csv", "repeat", "switch") color = [] for line in csv.getvalue().split(b"\n"): for data in line.split(b","): d = data.decode().strip() if d: color.append(d) length = len(color) print(length) # 7367 factors = [x for x in range(2, length) if length % x == 0] print(factors) # [53, 139] img = Image.new('F',(53,139)) img.putdata(list(map(float,color)), 256)
#!/usr/bin/env python # -*- coding: utf-8 -*- """http://www.pythonchallenge.com/pc/ring/bell.html:repeat:switch""" __author__ = "子風" __copyright__ = "Copyright 2015, Sun All rights reserved" __version__ = "1.0.0" import get_challenge from PIL import Image img = Image.open(get_challenge.download("http://www.pythonchallenge.com/pc/ring/bell.png", "repeat", "switch")) r,g,b = img.split() r.show() g.show() b.show() gdata = list(g.getdata()) paris=[(gdata[i],gdata[i+1]) for i in range(0,len(gdata),2)] # 根據"my paris" 將像素兩兩分為一組 # 可以看出基本上每個paris內兩像素之差都為42 print(paris[:10]) diffs=[abs(i[0]-i[1]) for i in paris] # 計算兩兩像素之差的絕對值 print(diffs[:10]) s = '' for i in diffs: if i != -42 and i != 42: s += chr(abs(i)) print(s)