From b042d24ceeb355a106d2c01ef18024f53988eb2f Mon Sep 17 00:00:00 2001 From: Richard Hull Date: Sun, 20 Mar 2016 15:13:21 +0000 Subject: [PATCH] Rarest letter --- src/ars_magna/letter_frequencies.clj | 72 +++++++++++++--------- test/ars_magna/letter_frequencies_test.clj | 9 +++ 2 files changed, 52 insertions(+), 29 deletions(-) create mode 100644 test/ars_magna/letter_frequencies_test.clj diff --git a/src/ars_magna/letter_frequencies.clj b/src/ars_magna/letter_frequencies.clj index b3cea55..22d87e0 100644 --- a/src/ars_magna/letter_frequencies.clj +++ b/src/ars_magna/letter_frequencies.clj @@ -2,36 +2,50 @@ ; From: https://en.wikipedia.org/wiki/Letter_frequency#Relative_frequencies_of_letters_in_the_English_language -(def en-GB { - \a 0.08167 - \b 0.01492 - \c 0.02782 - \d 0.04253 - \e 0.12702 - \f 0.02228 - \g 0.02015 - \h 0.06094 - \i 0.06966 - \j 0.00153 - \k 0.00772 - \l 0.04025 - \m 0.02406 - \n 0.06749 - \o 0.07507 - \p 0.01929 - \q 0.00095 - \r 0.05987 - \s 0.06327 - \t 0.09056 - \u 0.02758 - \v 0.00978 - \w 0.02361 - \x 0.00150 - \y 0.01974 - \z 0.00074 }) +(def letter-frequencies + { + :en-GB { + \a 0.08167 + \b 0.01492 + \c 0.02782 + \d 0.04253 + \e 0.12702 + \f 0.02228 + \g 0.02015 + \h 0.06094 + \i 0.06966 + \j 0.00153 + \k 0.00772 + \l 0.04025 + \m 0.02406 + \n 0.06749 + \o 0.07507 + \p 0.01929 + \q 0.00095 + \r 0.05987 + \s 0.06327 + \t 0.09056 + \u 0.02758 + \v 0.00978 + \w 0.02361 + \x 0.00150 + \y 0.01974 + \z 0.00074 }}) -(defn by-ascending-frequency [letter-table] +(defn by-ascending-frequency [letter-freq] (->> - letter-table + letter-freq (sort-by second) (map first))) + +(defn rarest-letter + ([word] (rarest-letter word :en-GB)) + ([word lang] + (let [letters (set word)] + (->> + (get letter-frequencies lang) + (filter #(letters (first %))) + by-ascending-frequency + first)))) + +(rarest-letter "compute") diff --git a/test/ars_magna/letter_frequencies_test.clj b/test/ars_magna/letter_frequencies_test.clj new file mode 100644 index 0000000..3af5231 --- /dev/null +++ b/test/ars_magna/letter_frequencies_test.clj @@ -0,0 +1,9 @@ +(ns ars-magna.letter-frequencies-test + (:require + [clojure.test :refer :all] + [ars-magna.letter-frequencies :refer :all])) + +(deftest check-rarest-letter + (is (= \p (rarest-letter "compute"))) + (is (nil? (rarest-letter "compute" :ru-RU))) + (is (nil? (rarest-letter nil))))