def Lex(num,x,y,z=''):
"""num = string length, x and y = placeholder for some char, z = pattern list """
list = []
palindromes = []
pals = []
patterns = []
c = "%0" + str(num) +"d"
for i in range(0, 2 ** num):
list.append(str(c % int(bin(i)[2:])))
for i in range(0,len(list)):
list[i] = list[i].replace("0",x).replace("1",y)
print str("%02d" % int(i+1)) + '. ' + list[i]
if (list[i]==list[i][::-1]):
palindromes.append(i+1)
pals.append(list[i])
if len(z)>0:
for n in range(0, len(z)):
if list[i][n] == z[n]:
patterns.append(list[i])
if len(palindromes)>0:
print "\nPalindromes: " + str(palindromes) + "\n----\n\n"
return pals,patterns
def LexUpTo(l,op,x,y,z=''):
"""print lex of length range"""
output = []
output2 = []
if op == "<":
for i in range(1, l):
tmp = Lex(i,x,y,z)
output += tmp[0]
output2 += tmp[1]
print "Sorted palindromes:\n"
print sorted(output)
print "\n\nPatterns sorted by alpha, len:\n"
print sorted(output2)
print sorted(output2, key=len)
Lex(5,'x','y',['x'])
ZGVmIExleChudW0seCx5LHo9JycpOgogIiIibnVtID0gc3RyaW5nIGxlbmd0aCwgeCBhbmQgeSA9IHBsYWNlaG9sZGVyIGZvciBzb21lIGNoYXIsIHogPSBwYXR0ZXJuIGxpc3QgIiIiCiBsaXN0ID0gW10KIHBhbGluZHJvbWVzID0gW10KIHBhbHMgPSBbXQogIAogcGF0dGVybnMgPSBbXQoKIGMgPSAiJTAiICsgc3RyKG51bSkgKyJkIgogZm9yIGkgaW4gcmFuZ2UoMCwgMiAqKiBudW0pOgogICAgIGxpc3QuYXBwZW5kKHN0cihjICUgaW50KGJpbihpKVsyOl0pKSkKIGZvciBpIGluIHJhbmdlKDAsbGVuKGxpc3QpKToKICAgICBsaXN0W2ldID0gbGlzdFtpXS5yZXBsYWNlKCIwIix4KS5yZXBsYWNlKCIxIix5KQogICAgIHByaW50IHN0cigiJTAyZCIgJSBpbnQoaSsxKSkgKyAnLiAnICsgbGlzdFtpXQogICAgIGlmIChsaXN0W2ldPT1saXN0W2ldWzo6LTFdKToKICAgICAgICAgcGFsaW5kcm9tZXMuYXBwZW5kKGkrMSkKCSBwYWxzLmFwcGVuZChsaXN0W2ldKQoJCiAgICAgaWYgbGVuKHopPjA6Cglmb3IgbiBpbiByYW5nZSgwLCBsZW4oeikpOgoJICAgaWYgbGlzdFtpXVtuXSA9PSB6W25dOgogCSAgICAgIHBhdHRlcm5zLmFwcGVuZChsaXN0W2ldKSAKCiBpZiBsZW4ocGFsaW5kcm9tZXMpPjA6CiAgICBwcmludCAiXG5QYWxpbmRyb21lczogIiArIHN0cihwYWxpbmRyb21lcykgKyAiXG4tLS0tXG5cbiIKIHJldHVybiBwYWxzLHBhdHRlcm5zCgpkZWYgTGV4VXBUbyhsLG9wLHgseSx6PScnKToKICIiInByaW50IGxleCBvZiBsZW5ndGggcmFuZ2UiIiIgCiBvdXRwdXQgPSBbXQogb3V0cHV0MiA9IFtdCiBpZiBvcCA9PSAiPCI6CiAgICBmb3IgaSBpbiByYW5nZSgxLCBsKToKICAgICAgIHRtcCA9IExleChpLHgseSx6KQogICAgICAgb3V0cHV0ICs9IHRtcFswXQogICAgICAgb3V0cHV0MiArPSB0bXBbMV0KICAgICAgIAoKIHByaW50ICJTb3J0ZWQgcGFsaW5kcm9tZXM6XG4iIAogcHJpbnQgc29ydGVkKG91dHB1dCkKCiBwcmludCAiXG5cblBhdHRlcm5zIHNvcnRlZCBieSBhbHBoYSwgbGVuOlxuIgogcHJpbnQgc29ydGVkKG91dHB1dDIpCiBwcmludCBzb3J0ZWQob3V0cHV0Miwga2V5PWxlbikKCkxleCg1LCd4JywneScsWyd4J10p
01. xxxxx
02. xxxxy
03. xxxyx
04. xxxyy
05. xxyxx
06. xxyxy
07. xxyyx
08. xxyyy
09. xyxxx
10. xyxxy
11. xyxyx
12. xyxyy
13. xyyxx
14. xyyxy
15. xyyyx
16. xyyyy
17. yxxxx
18. yxxxy
19. yxxyx
20. yxxyy
21. yxyxx
22. yxyxy
23. yxyyx
24. yxyyy
25. yyxxx
26. yyxxy
27. yyxyx
28. yyxyy
29. yyyxx
30. yyyxy
31. yyyyx
32. yyyyy
Palindromes: [1, 5, 11, 15, 18, 22, 28, 32]
----