def do_compute(self): # step 1, get information from web source bell_url = TextHelper.find_text_between_tag(self.web_source, '<a href="', '">') bell_url = WebHelper.join_url(self.url, bell_url) print "Find some url: %s" % bell_url zigzag_jpg = TextHelper.find_text_between_tag(self.web_source, '<img src="', '"> <!--') zigzag_jpg = WebHelper.join_url(self.url, zigzag_jpg) print "Find a picture: %s" % zigzag_jpg gif_prompt = TextHelper.find_text_between_tag(self.web_source, 'did you say ', '? -->') gif_url = WebHelper.change_suffix_url(zigzag_jpg, gif_prompt) print "Get a gif picture: %s" % gif_url # step 2, deal with gif img = ImageHelper.create_image_from_web(gif_url, self.user, self.password) img_content = img.tobytes() img_plt = img.palette.getdata()[1][::3] trans = string.maketrans("".join([chr(i) for i in range(256)]), img_plt) img_tran = img_content.translate(trans) diff = ["", ""] img = Image.new("1", img.size, 0) for i in range(1, len(img_content)): if img_content[i] != img_tran[i - 1]: diff[0] += img_content[i] diff[1] += img_tran[i - 1] img.putpixel(((i - 1) % img.size[0], (i - 1) / img.size[0]), 1) img.show( ) # two words shows in picture: 'not', 'word', between is an key text = bz2.decompress(diff[0]) auth = set() for i in text.split(): if not keyword.iskeyword(i): auth.add(i) # print repeat, switch, ../ring/bell auth = list(auth) print auth for item in auth: if 'html' in item: next_level_url = WebHelper.join_url(self.url, item) auth.remove(item) try: content_ignore = WebHelper.get_auth_web_source( next_level_url, auth[0], auth[1]) self.result.set_user_password(auth[0], auth[1]) print "Set next level user, password = (%s, %s)" % (auth[0], auth[1]) except HTTPError: self.result.set_user_password(auth[1], auth[0]) print "Set next level user, password = (%s, %s)" % (auth[1], auth[0]) # step 3, set next level url self.set_next_level_url(next_level_url)
def do_compute(self): # step 1, get prompt information from web source print TextHelper.find_text_between_tag(self.web_source, '<!-- ', '-->') wav_suffix = 'wav' print "Above prompt words ask us to replace the suffix of jpg to %s" % wav_suffix wave_img_url = WebHelper.join_url( self.url, TextHelper.find_text_between_tag(self.web_source, '<img src="', '">')) print "wave image web url is %s" % wave_img_url ImageHelper.show_image_from_web( WebHelper.join_url(self.url, wave_img_url), self.user, self.password) print "This picture prompt us: there is 25 block, we need to combine them" # step 2, download waves wave_url = WebHelper.change_suffix_url(wave_img_url, wav_suffix) print "After change suffix: %s" % wave_url local_directory = 't25' FileHelper.mkdir(local_directory) waves = [] for i in range(25): store_path = FileHelper.join_path(local_directory, WebHelper.get_url_page(wave_url)) WebHelper.download_with_auth(wave_url, store_path, self.user, self.password) waves.append(wave.open(store_path)) wave_url = WebHelper.url_add(wave_url) # step 3, Create combine image from waves img = Image.new('RGB', (300, 300), 'black') frames = waves[0].getnframes() print "Totally waves: %d" % len(waves) for i in range(len(waves)): tmp_img = Image.frombytes('RGB', (60, 60), waves[i].readframes(frames)) current_pos = (60 * (i % 5), 60 * (i // 5)) print "Put image to position%s" % str(current_pos) img.paste(tmp_img, current_pos) img.show() # It shows a words 'decent' # step 4, set prompt words prompt_word = 'decent' print "Get prompt words from combined picture: %s" % prompt_word self.set_prompt(prompt_word) # step 5, clean unused file FileHelper.remove_folder(local_directory)
def do_compute(self): # step 1. get prompt information prompt_img_url = TextHelper.find_text_between_tag(self.web_source, "<img src=\"", "\"><br>") img_url = T12.evil_add_url(WebHelper.join_url(self.url, prompt_img_url)) print "get new image url: " + img_url url_ignore, img_data = WebHelper.get_auth_url_content(img_url) img = Image.open(StringIO(img_data)) img.show() # shows: we should use suffix .gfx not .jpg # step 2. get gfx file gfx_url = WebHelper.change_suffix_url(img_url, ".gfx") url_ignore, gfx_data = WebHelper.get_auth_url_content(gfx_url) # step 3. play data cards T12.play_cards(gfx_data) # There were five picture shows : 'dis', 'pro', 'port', 'ional', 'ity' (strikeout) # step 3. set prompt for next level self.set_prompt('disproportional')
def do_compute(self): # step 1. Get hint from page source hint = TextHelper.find_text_between_tag(self.web_source, "<html> <!-- <-- ", " -->\n<head>") zip_url = WebHelper.change_suffix_url(self.url, hint) # step 2. Download zip to local and extract tmp_zip = zip_url[zip_url.rindex("/") + 1:] tmp_folder = tmp_zip[:tmp_zip.index(".")] WebHelper.download(zip_url, tmp_zip) zip_ref = zipfile.ZipFile(tmp_zip, 'r') zip_ref.extractall(tmp_folder) zip_ref.close() # step 3. Get next hint readme_txt = open(tmp_folder + "/readme.txt", 'r').read() start_txt = TextHelper.find_text_between_tag(readme_txt, "hint1: start from ", "\n") next_hint = T6.read_traverse(start_txt) print next_hint # Hint: Collect the comments. # step 4. Get comments print T6.collect_comments( tmp_zip, start_txt) # Comments: HOCKEY (Small letter oxygen) # step 5. Wrong way wrong_url = WebHelper.join_url(self.url, "hockey") print WebHelper.get_web_source( wrong_url) # it's in the air. look at the letters. # step 6. Get next url hint self.set_prompt(WebHelper.join_url(self.url, "oxygen")) # step 7. Clean folder FileHelper.remove_folder(tmp_folder) FileHelper.remove_file(tmp_zip)
def do_compute(self): # step 1. get information from web source print TextHelper.find_text_between_tag(self.web_source, '<!--\n', '\n-->') beer_url = TextHelper.find_text_between_tag(self.web_source, '<img src="', '" border="0"') beer_url = WebHelper.join_url(self.url, beer_url) print beer_url beer_url = WebHelper.url_add(beer_url) beer_url = WebHelper.change_suffix_url(beer_url, 'png') # step 2. try out this picture beer_img = ImageHelper.create_image_from_web(beer_url, self.user, self.password) data = list(beer_img.getdata()) local_dir = 'img_data' FileHelper.mkdir(local_dir) print len(data) count = 0 while len(data) > 0: if self.is_int_sqrt(len(data)) and len(data) > 0: count += 1 size = int(math.sqrt(len(data))) print "data length = %i, sqrt value = %i" % (len(data), size) new_img = Image.new('RGB', (size, size)) new_img.putdata(data) new_img.save(os.path.join(local_dir, 'img_%i.png' % count)) max_value = max(data) data = [x for x in data if x != max_value] # step 3, Get hint from these pictures print "check png under %s, you will find many characters!" % local_dir prompt = 'gremlins' print "but only characters %s are in square" % str(list(prompt)) self.set_prompt(prompt) FileHelper.remove_folder(local_dir)
def do_compute(self): # step 1, get information from web source question = TextHelper.find_text_between_tag(self.web_source, '<title>', '</title>') print "The title asked us: %s" % question answer = ("kohsamui", "thailand") self.result.set_user_password(answer[0], answer[1]) print "Set next level user, password = (%s, %s)" % answer print "Search google by this photograph, you can find the place: %s, %s" % answer prompt = TextHelper.find_text_between_tag(self.web_source, '<a href="', '"><img src') new_url = WebHelper.join_url(self.url, prompt) print "Get prompt jpg url: %s" % new_url new_web_content = WebHelper.get_auth_web_source2(new_url, answer) print TextHelper.find_text_between_tag(new_web_content, '<font color="gold">', '</font>') mandelbrot_gif = TextHelper.find_text_between_tag( new_web_content, '<img src="', '" border="0">') mandelbrot_gif = WebHelper.join_url(new_url, mandelbrot_gif) print "Get new gif picture: %s" % mandelbrot_gif print TextHelper.find_text_between_tag(new_web_content, 'border="0">\n', '\n </img>') # step 2, parse mandelbrot gif left, top, width, height, iteration = 0.34, 0.57, 0.036, 0.027, 128 img = ImageHelper.create_image_from_web(mandelbrot_gif, answer[0], answer[1]) print "Get image size: %s, %s" % img.size w, h = img.size x_step, y_step = width / w, height / h result = [] for y in range(h - 1, -1, -1): for x in range(w): c = complex(left + x * x_step, top + y * y_step) z = 0 + 0j for i in range(iteration): z = z * z + c if abs(z) > 2: break result.append(i) new_img = img.copy() new_img.putdata(result) new_img.show() # step 3, show diff about these two picture diff = [(a - b) for a, b in zip(img.getdata(), new_img.getdata()) if a != b] print len(diff) print set(diff) plot = Image.new('L', (23, 73)) plot.putdata([(i < 16) and 255 or 0 for i in diff]) plot.resize((230, 730)).show() prompt = 'arecibo' print "Oh, God dammit! Who knows this is a message humanity send to the starts from %s telescope" % prompt # step 4, set next challenge url next_level_url = WebHelper.join_url(mandelbrot_gif, prompt) next_level_url = WebHelper.change_suffix_url(next_level_url, 'html') self.set_next_level_url(next_level_url)