-
-
Save amsterdatech/5207019f56522e4c8866 to your computer and use it in GitHub Desktop.
Quem o Luca deve convidar para dividir uma pizza que tenha um gosto mais parecido com o dele?
This file contains 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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;Distancia Euclideana é um metodo para calcular uma pontuação baseada em quanto 2 coisas são similares. | |
;O valores sempre estão no intervalo entre 0 e 1, onde 1 significa que 2 coisas são identicas e 0 que não ;possuem nada em comum. | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
(def pizza_prefs | |
{"Renato" {"Margarita" 4 "Quatro queijos" 5 | |
"Escarola" 4 "Portuguesa" 5 | |
"Frango+Catupiry" 4 "Napolitana" 3} | |
"Marcelo" {"Margarita" 2 "Quatro queijos" 2 | |
"Escarola" 1 "Portuguesa" 3 | |
"Frango+Catupiry" 5 "Napolitana" 2} | |
"Lennon" {"Margarita" 4 "Quatro queijos" 5 | |
"Escarola" 2 "Portuguesa" 1 | |
"Frango+Catupiry" 1 "Napolitana" 3} | |
"Renata" {"Margarita" 4 "Quatro queijos" 5 | |
"Escarola" 1 "Portuguesa" 1 | |
"Frango+Catupiry" 3 "Napolitana" 4} | |
"Washington" {"Margarita" 1 "Quatro queijos" 1 | |
"Escarola" 2 "Portuguesa" 3 | |
"Frango+Catupiry" 4 "Napolitana" 3} | |
"Tino"{"Margarita" 1 "Quatro queijos" 5 | |
"Escarola" 1 "Portuguesa" 4 | |
"Frango+Catupiry" 3 "Napolitana" 2} | |
"Luca"{"Margarita" 5 "Quatro queijos" 3 | |
"Escarola" 3 "Portuguesa" 4 | |
"Frango+Catupiry" 3 "Napolitana" 2}}) | |
(defn euclidean [pessoa1 pessoa2] | |
(let [items-em-comum (filter pessoa1 (keys pessoa2)) | |
score (reduce (fn[scr mv] | |
(let [score1 (pessoa1 mv) | |
score2 (pessoa2 mv)] | |
(+ scr (Math/pow (- score1 score2) 2)))) | |
0 items-em-comum)] | |
(if (= (count items-em-comum) 0) | |
0 | |
(/ 1 (+ 1 score))))) | |
(defn sort-by-similarity [pizza-prefs pessoa] | |
(sort-by second | |
(reduce (fn[h p] | |
(let [name (first p) | |
prefs (second p) | |
similarity (euclidean pessoa prefs)] | |
(assoc h name similarity) )) {} pizza_prefs))) | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;Para achar quem o Luca deve convidar para dividir uma pizza | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
(sort-by-similarity pizza_prefs (pizza_prefs "Luca")) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment