summaryrefslogtreecommitdiff
path: root/coinlist.hs
diff options
context:
space:
mode:
Diffstat (limited to 'coinlist.hs')
-rw-r--r--coinlist.hs73
1 files changed, 73 insertions, 0 deletions
diff --git a/coinlist.hs b/coinlist.hs
new file mode 100644
index 0000000..76007fd
--- /dev/null
+++ b/coinlist.hs
@@ -0,0 +1,73 @@
+-- I don't remember what the problem was... I think I had to index the LinkedIn
+-- directory using a tree?
+--
+-- https://www.linkedin.com/directory/people-v/
+
+data User = User
+ { id :: Int
+ , name :: String
+ }
+
+data Tree
+ = Node
+ | Tree
+
+data Node
+ = Start User
+ | End User
+
+(Node (Start (id "V American Clifton"))
+ (End (id "v♡ g♡"))
+
+(Tree
+(Node (Start (id "V American Clifton"))
+ (End (id "VANESSA MITCHELL")))
+(Node (Start (id "Vahid Sab"))
+ (End (id "Val Hoskins")))
+)
+
+
+(Node V)
+
+
+
+
+1. First exact matches
+2. Results where one of the words is an exact match
+3. Results that start with the search string
+4. The rest, alphabetically sorted
+
+
+query: "word"
+correct ordering: [“Word”, “Microsoft Word”, “Wordpress”, “1Password”, “Google AdWords”]
+
+"word", "Microsoft Word"
+
+for w in words:
+ if exactMatch(w, query):
+ putInFront(w, words)
+ else if contains(w, query):
+ putBehindExactMatches(w, query, words)
+ else if: startsWith(w, query):
+ putBehindContains(w, query, words)
+ else
+ sortAlphabetically(words)
+
+
+
+f :: String -> [String] -> [String]
+f "" ls = ls
+f _ [] = []
+f q (x:xs) =
+ if q == x then x:(f xs)
+ else if q `isPrefixOf` x then (f xs):x
+ else if q `isInfixOf` x then placeAfterMatches q (x:xs)
+ else alphabatize((f xs):x)
+
+
+placeAfterMatches :: String -> [String] -> [String]
+placeAfterMatches _ [] = []
+placeAfterMatches q (x:xs) = if q == x then x:(placeAfterMatches q xs) else x:xs
+
+placeAfterContains :: String -> [String] - [String]
+placeAfterContains q (x:xs) = if q `isInfixOf` x then x:(placeAfterContains q xs) else x:xs