From de35d4e2d39298cef4736d464324f80d080fa34a Mon Sep 17 00:00:00 2001 From: KKlochko Date: Thu, 12 Oct 2023 22:04:39 +0300 Subject: [PATCH] Add the function to make a frequency string from a map. --- .../symbols/{frequences.clj => frequencies.clj} | 14 ++++++++++++-- .../symbols/frequencies_test.clj | 11 +++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) rename src/cipher_analytical_machine/symbols/{frequences.clj => frequencies.clj} (69%) create mode 100644 test/cipher_analytical_machine/symbols/frequencies_test.clj diff --git a/src/cipher_analytical_machine/symbols/frequences.clj b/src/cipher_analytical_machine/symbols/frequencies.clj similarity index 69% rename from src/cipher_analytical_machine/symbols/frequences.clj rename to src/cipher_analytical_machine/symbols/frequencies.clj index c9e0ac4..dad6368 100644 --- a/src/cipher_analytical_machine/symbols/frequences.clj +++ b/src/cipher_analytical_machine/symbols/frequencies.clj @@ -1,7 +1,17 @@ (ns cipher-analytical-machine.symbols.frequencies (:gen-class)) -(def english-letter-frequences { +(defn map-to-string + "Convert the map of frequencies to the frequency string. Letters are sorted by frequency in descending order." + [frequency-map] + (->> frequency-map + (reduce (fn [acc el] (conj acc el)) []) + (sort-by last) + (map first) + (reverse) + (apply str))) + +(def english-letter-frequencies { \a 0.0804 \b 0.0154 \c 0.0306 @@ -30,7 +40,7 @@ \z 0.0009 }) -(def ukrainian-letter-frequences { +(def ukrainian-letter-frequencies { \а 0.064 \б 0.013 \в 0.046 diff --git a/test/cipher_analytical_machine/symbols/frequencies_test.clj b/test/cipher_analytical_machine/symbols/frequencies_test.clj new file mode 100644 index 0000000..1db5bd0 --- /dev/null +++ b/test/cipher_analytical_machine/symbols/frequencies_test.clj @@ -0,0 +1,11 @@ +(ns cipher-analytical-machine.symbols.frequencies-test + (:require + [clojure.test :refer :all] + [cipher-analytical-machine.symbols.frequencies :refer :all])) + +(deftest calculate-char-index-test + (let [symbol-map english-letter-frequencies] + (testing "The map must be converted to 'etaoinsrhldcumfpgwybvkxjqz'" + (is (= "etaoinsrhldcumfpgwybvkxjqz" + (map-to-string symbol-map)))))) +