I liked Engineer Toast's idea of finding the longest word you could type with right-hand only letters, so I found those as well.
These words come from my computer's /usr/share/dict/words file, you can decide for yourself which words count as English.
All keys
(10, 'desertress')
(10, 'assertress')
(9, 'redresser')
(8, 'kolokolo')
(8, 'assessee')
Left keys
(10, 'desertress')
(10, 'assertress')
(9, 'redresser')
(8, 'assessee')
(8, 'assessed')
Right keys
(8, 'kolokolo')
(6, 'pookoo')
(6, 'polloi')
(6, 'lollop')
(5, 'plook')
I used the following code to come up with this answer:
LEFT_KEYS = {
'Q':['Q', 'W', 'A'],
'W':['W', 'Q', 'A', 'S', 'E'],
'E':['E', 'W', 'S', 'D', 'R'],
'R':['R', 'E', 'D', 'F', 'T'],
'T':['T', 'R', 'F', 'G', 'Y'],
'A':['A', 'Q', 'Z', 'W', 'S'],
'S':['S', 'W', 'A', 'Z', 'X', 'D', 'E'],
'D':['D', 'E', 'S', 'X', 'C', 'F', 'R'],
'F':['F', 'R', 'D', 'C', 'V', 'G', 'T'],
'G':['G', 'T', 'F', 'V', 'B', 'H', 'Y'],
'Z':['Z', 'A', 'S', 'X'],
'X':['X', 'S', 'Z', 'D', 'C'],
'C':['C', 'D', 'X', 'F', 'V'],
'V':['V', 'F', 'C', 'B', 'G'],
'B':['B', 'G', 'V', 'N', 'H']
}
RIGHT_KEYS = {
'Y':['Y', 'T', 'G', 'H', 'U'],
'U':['U', 'Y', 'H', 'J', 'I'],
'I':['I', 'U', 'J', 'K', 'O'],
'O':['O', 'I', 'K', 'L', 'P'],
'P':['P', 'O', 'L'],
'H':['H', 'Y', 'G', 'B', 'N', 'J', 'U'],
'J':['J', 'U', 'H', 'N', 'M', 'K', 'I'],
'K':['K', 'I', 'J', 'M', 'L', 'O'],
'L':['L', 'O', 'K', 'P'],
'N':['N', 'H', 'B', 'M', 'J'],
'M':['M', 'J', 'N', 'K']
}
ALL_KEYS = LEFT_KEYS.copy()
ALL_KEYS.update(RIGHT_KEYS)
def adjacent(keyset, word):
lastletter = None
for letter in word.upper():
if lastletter:
if not letter in keyset.get(lastletter, []):
return False
lastletter = letter
return True
def read_word_list():
with open('/usr/share/dict/words') as wordfile:
return [w.strip() for w in wordfile.readlines() if len(set(w.strip())) > 1]
WORDS = read_word_list()
ADJACENT_WORDS = []
for WORD in WORDS:
if adjacent(ALL_KEYS, WORD):
ADJACENT_WORDS.append((len(WORD), WORD))
for WORD in sorted(ADJACENT_WORDS)[-5:]:
print WORD