qrgarden
問題
Read a lot, and the flag begins with "ADCTF_".
解法
10000個のQRコードからADCTF_で始まっている物を探しだす問題。
下手に自作のQRコードリーダを持っていたせいで時間がかかってしまった。 作ったQRコード調査ライブラリの問題点(動作の遅さ)を気づかせてくれた問題。
1 import Image
2 import sys
3 from qr import *
4
5 def scan(img, top, left, msize, version):
6 w = h = version * 4 + 17
7 qr = []
8 for y in range(h):
9 line = []
10 for x in range(w):
11 c = img.getpixel((top + msize * x, left + msize * y))
12 if c == (0, 0, 0):
13 x = 1
14 elif c == (255, 255, 255):
15 x = 0
16 else:
17 x = -1
18 line.append(x)
19 qr.append(line)
20 return qr
21
22 version = 3
23
24 img = Image.open("qrgarden.png")
25 img = img.convert('RGB')
26 for y in range(0, 100):
27 for x in range(100):
28 qrtxt = scan(img, 29*3*x, 29*3*y, 3, version)
29 print read_qr(qrtxt)
% python solve.py | grep ADCTF_ ADCTF_re4d1n9_Qrc0de_15_FuN
とりあえずyの範囲を分けて並列で実行した。pypyで実行したら早くなるだろうか。