Given an input like "gello" suggest an correction like "hello". This is a proof-of-concept problem for writing a simplistic auto-correction algorithm for a mobile device.
		
			
				
	
	
		
			33 lines
		
	
	
	
		
			763 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
	
		
			763 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| def nearby_chars(c):
 | |
|     keyboard = [
 | |
|         "qwertyuiop",
 | |
|         "asdfghjkl",
 | |
|         "zxcvbnm",
 | |
|     ]
 | |
| 
 | |
|     for row in keyboard:
 | |
|         for i in range(len(row)):
 | |
|             if row[i] == c:
 | |
|                 result = set()
 | |
|                 if i + 1 < len(row):
 | |
|                     result.add(row[i + 1])
 | |
|                 if i - 1 >= 0:
 | |
|                     result.add(row[i - 1])
 | |
|                 return result
 | |
| 
 | |
| def is_word(word):
 | |
|     words = {
 | |
|         "hello",
 | |
|     }
 | |
|     return word in words
 | |
| 
 | |
| def nearby_words(x):
 | |
|     result = set()
 | |
|     for i in range(len(x)):
 | |
|         for c in nearby_chars(x[i]):
 | |
|             candidate = x[0:i] + c + x[i+1:]
 | |
|             if is_word(candidate):
 | |
|                 result.add(candidate)
 | |
|     return result
 | |
| 
 | |
| print(nearby_words('gello'))
 |