Python Permutations Problem
Mensanator
mensanator at aol.com
Fri Aug 14 16:07:40 EDT 2009
On Aug 14, 11:28 am, Asanka Wasala <was... at gmail.com> wrote:
> Hi
> I am developing a spell checker for my language, and I came across
> solving an interesing problem. It would be great if you can suggest
> me an optimized solution for the problem described below:
>
> I have certain group of letters like these:
>
> Group #1: c,r,b
> Group #2: a,z,k
> Group #3: h,t
> .
> .
>
> Letters within the same group can be substituted/replaced with the
> rest of the letters in that group.
>
> (ie. Group #1 means letter 'c' can be replaced with either 'r' or 'b',
> and letter r can be replaced with either c or b, and letter b can be
> replaced with either r or c)
>
> A group can have upto 3 letters, and letters do not overlap between
> groups. There can be upto 25 such groups.
> Given a word containing above letters, (e.g. 'cat'.) I want to
> generate all possible words by subsituting letters in the groups.
>
> eg. expected output:
>
> cat rat bat
> czt rzt bzt
> ckt rkt bkt
> cah rah bah
> czh rzh bzh
> ckh rkh bkh
>
> My code is given below. But for complex words like 'cccccccccczzk' it
> thows the 'maximum recursion depth exceeded' error. Therefore, can you
> suggest me an optimized solution to achive the above task? Thanks in
> advance.
> --------------------------
> CODE-------------------------------------------
> #-*- coding: UTF-8 -*-
> import re
> def getPermutations(word):
> def getSimilarLetters(letter):
> pattern=u"|c,r,b|a,z,k|h,t|"
> list=[]
> ptrn=re.compile("(?P<grp>\|(.?,)*?"+letter+"(,.)*?\|)")
> k=ptrn.search(pattern)
> if k:
> letterlist=k.group("grp")[1:-1]
> list=letterlist.split(",")
> list.remove(letter)
> return list
> else:
> return letter
>
> list=[]
>
> def perm(word):
> posi=0
> wrd=word
> for w in word:
> posi=posi+1
> lst=getSimilarLetters(w)
> if len(lst)>0:
> for l in lst:
> newwrd=wrd[:posi-1]+l+wrd[posi:]
> if not (newwrd in list):
> list.append(newwrd)
> perm(newwrd)
>
> try:
> perm(word)
> except RuntimeError:
> list=[]
> list.append("error")
> return list
>
> list=getPermutations(u"cat")
>
> for i in list:
> print i.encode('utf-8')
> --------------------------------------------END of
> CODE-----------------------------------------------------------------------------
IDLE 2.6.1
>>> import itertools as it
>>> for i in it.product('crb','azk','ht'): print ''.join(i),
cah cat czh czt ckh ckt rah rat rzh rzt rkh rkt bah bat bzh bzt bkh
bkt
More information about the Python-list
mailing list