Created
May 4, 2020 17:09
-
-
Save kolharsam/1d19f39519b8a36418220cb5a2a0fc44 to your computer and use it in GitHub Desktop.
Cassidy's Interview Question - 04/05/2020
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(def default-input ["candy" "doodle" "pop" "shield" "lag" "typewriter" "this"]) | |
(def qwerty-rows ["qwertyuiop" "asdfghjkl" "zxcvbnm"]) | |
(def dvorak-rows ["pyfgcrl" "aoeuidhtns" "qjkxbmwvz"]) | |
(def azerty-rows ["azertyuiop" "qsdfghjklm" "wxcvbn"]) | |
(defn get-letter-row | |
"Returns the index of the row in which the letter is present" | |
[letter layout] | |
(loop [current-row (first layout) | |
rest-elems (rest layout) | |
current-index 0] | |
(if (clojure.string/index-of current-row letter) | |
current-index | |
(recur (first rest-elems) (rest rest-elems) (inc current-index))))) | |
(defn get-num-str | |
"Returns a collection of the row of each letter present in the word" | |
[word layout] | |
(map #(get-letter-row % layout) (clojure.string/split word #""))) | |
(defn one-row | |
"Returns the collection of words in the input that can be entered on the same row" | |
[coll layout] | |
(filter #(apply = (get-num-str % layout)) coll)) | |
(defn program | |
"Outputs the result for multiple layouts instead of seeking user input | |
First is qwerty | |
Second is dvorak | |
Third is azerty" | |
[input] | |
(doseq [current-layout [qwerty-rows dvorak-rows azerty-rows]] | |
(println (one-row input current-layout)))) | |
(program default-input) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment