views:

403

answers:

2

The questions is: One small letter, surrounded by EXACTLY three big bodyguards on each of its sides. I wrote this code and get an answer. I thougt it would be correct, but it doesn't work. Can anybody help me? My answer: KWGtIDC

import urllib, sys, string
from string import maketrans

bbb = 0

f = urllib.urlopen("http://www.pythonchallenge.com/pc/def/equality.html")
while 1:
    buf = f.read(200000)
    if not len(buf):
        break
    for x in range(len(buf)):
        if buf[x] in string.ascii_lowercase:
           if buf[x+1] in string.ascii_uppercase:
               if buf[x-1] in string.ascii_uppercase:
                   if buf[x+2] in string.ascii_uppercase:
                       if buf[x-2] in string.ascii_uppercase:
                           if buf[x+3] in string.ascii_uppercase:
                               if buf[x-3] in string.ascii_uppercase:
                                   if buf[x+4] in string.ascii_lowercase:
                                       if buf[x-4] in string.ascii_lowercase:
                                           bbb = x
    sys.stdout.write(buf)
    print(buf[bbb-3:bbb+4])
+1  A: 

In your code

if buf[x+4] in string.ascii_lowercase:

will only work if there is a fouth (lowercase) character, but did you consider the case that there is no fourth character, such as the end of sring (for instanceL: "ABCdEFG")?

Without ruining the puzzle, have you try creating a regular expression? A regex avoids the nested loops and requires a lot less lines.

catchmeifyoutry
+1  A: 

A couple of points:

  • You need to operate on the comment block in the source of the html page, not the entire page itself. I'm not sure if the rest of the page makes a difference, but still. I'd copy the comment block to another file locally, and go from there.

  • The title of the page is "re". Does that ring any bells?

  • There may be more than one occurrence of the pattern that fits your requirement, and your program overwrites it each time bbb = x. You need all of them, IIRC.

sykora