Skip to content

Instantly share code, notes, and snippets.

@svgl
Last active May 6, 2020 22:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save svgl/770fdd97635f71fda993b03a07e77a5d to your computer and use it in GitHub Desktop.
Save svgl/770fdd97635f71fda993b03a07e77a5d to your computer and use it in GitHub Desktop.
Given an array of words, return the words that can be typed using letters of only one row on a keyboard.
keyboard_layouts = {
"qwerty": ['qwertyuiop', 'asdfghjkl', 'zxcvbnm'],
"qwertz": ['qwertzuiop', 'asdfghjk', 'yxcvbnm'],
"azerty": ['azertyuiop', 'qsdfghjkl', 'wxcvbnm'],
"qzerty": ['qzertyuiop', 'asdfghjkl', 'wxcvbnm'],
"dvorak": ['pyfgcrl', 'aoeuidhtns', 'qjkxbmwvz'],
"colemak": ['qwfpgjluy', 'arstdhneio', 'zxcvbkm'],
"workman": ['qdrwbjfup', 'ashtgyneol', 'zxmcvkl'],
}
def oneRow(words, keyboard_layout="qwerty"):
results = []
for word in words:
for row in keyboard_layouts[keyboard_layout]:
if test(word, row):
results.append(word)
return results
def test(word, letters):
for letter in word:
if not letter in letters:
return False
return True
def main():
example = ['candy', 'doodle', 'pop', 'shield', 'lag', 'typewriter']
for layout in keyboard_layouts:
print(layout + ': ' + str(oneRow(example, keyboard_layout=layout)))
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment