#gopatterns def flip(s): out="" sp=s.splitlines() #print "sp",sp #print len(sp) for x in range(len(sp[0])): for y in range(len(sp)): out=out+sp[y][x] out=out+"\n" if out.endswith("\n"): out=out[:-1] if out.startswith("\n"): out=out[1:] return out class pattern(object): def __init__(self,name,data): self.name=name if data.endswith("\n"): data=data[:-1] self.rawdata=data try: self.data=self.make_sym() except: print "failed on pattern:",self.rawdata def make_sym(self): #print "entered make_sym" raw=self.rawdata if raw=='':return rev=raw[::-1] joinrev="\n".join(raw.split("\n")[::-1]) joinrevrev="\n".join((raw.split("\n")[::-1]))[::-1] #nonflipped ok={} ok[rev]=1 ok[raw]=1 ok[joinrev]=1 ok[joinrevrev]=1 #flipped ok[flip(rev)]=1 ok[flip(raw)]=1 ok[flip(joinrev)]=1 ok[flip(joinrevrev)]=1 return ok.keys() def show(self): print "this is",self.name print self.name print self.data A=pattern(name="test",data="abcd\nefgh") def readpatterns(file="gopatterns.txt"): lines=open(file,'r').readlines() divider=1 patterns=[] data="" name="" for l in lines: if l=="\n": continue if l.startswith("#"): continue if l.startswith("done"): p=pattern(name=name,data=data) patterns.append(p) name="" data="" continue if l[0].islower(): name=l.replace("\n","") continue if not name: continue data=data+l return patterns if __name__=="__main__": p=readpatterns() print "read" for t in p: t.show()