[Tutor] Algorithm

kreglet kreglet at gmail.com
Tue Aug 25 23:03:54 CEST 2009


Hello Kent,

Yes I would like to see your implementation. It seems to work but I get
error at the end.

concat=''.join

mainword="python"
cmpword="pot"
 # sort the letters in the target word; for example 'python' becomes
'hnopty'
tmplst=[]
for letters in mainword:
	tmplst.append(letters)

tmplst.sort()
mainword=concat(tmplst)
# sort the letters in the word you want to test, for example 'pot' becomes
'opt'
tmplst=[]
for letters in cmpword:
	tmplst.append(letters)

tmplst.sort()
cmpword=concat(tmplst)

inword=False
# walk through test letters looking for them in the target list. 
print cmpword, mainword
for letter in range(len(cmpword)): #Test
	for let in range(len(mainword)):#Target
		print cmpword[letter], mainword[let],
		# if it matches the current target letter, go to the next letter in each
list
		if cmpword[letter]==mainword[let]:
			print "Match: "
			let +=1
			letter +=1
		# if it is less than the current target letter, go to the next target
letter
		if cmpword[letter]<mainword[let]:
			print "No Match: "
			let+=1
		#	  - if the test letter is greater than the target letter, or you run
		#	    out of target letters, there is no match
		if cmpword[letter]>mainword[let]:	
			print "No Match:"
		inword=False
	inword=True


if inword==True:
	print cmpword + " is IN: " + mainword
else:
	print cmpword + " is NOT in: " + mainrowd


opt hnopty
o h No Match:
o n No Match:
o o Match: 
p p Match: 
t t Match: 
Traceback (most recent call last):
  File "/home/kreglet/bin/knt.py", line 45, in <module>
    if cmpword[letter]<mainword[let]:
IndexError: string index out of range




Kent Johnson wrote:
> 
> 
> Another way to do this:
> - sort the letters in the target word; for example 'python' becomes
> 'hnopty'
> - sort the letters in the word you want to test, for example 'pot' becomes
> 'opt'
> - walk through test letters looking for them in the target list. For
> each test letter,
>   - if it matches the current target letter, go to the next letter in each
> list
>   - if it is less than the current target letter, go to the next target
> letter
>   - if the test letter is greater than the target letter, or you run
> out of target letters, there is no match
>   - if you get to the end of the test letters, you have a match
> 
> The code for this is pretty simple and doesn't require much in the way
> of data, just the two lists of letters. If you like I can share my
> implementation.
> 
> Kent
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
> 
> 

-- 
View this message in context: http://www.nabble.com/Algorithm-tp25107922p25142030.html
Sent from the Python - tutor mailing list archive at Nabble.com.



More information about the Tutor mailing list