Update the Caesar to be case-insensitive and skip unknown symbols.
continuous-integration/drone/push Build is passing Details

main
KKlochko 2 years ago
parent 20c1d1ef1b
commit 79e316c51b

@ -14,21 +14,28 @@
(+ key) (+ key)
(mod max-index))) (mod max-index)))
(defn encrypt-or-skip
"If symbols do not have a character, then it will be skipped."
[index character key symbols max-index]
(if (nil? index) character
(get symbols
(encrypt-index index key max-index))))
(defn encrypt-char (defn encrypt-char
"Calculates new index of a character. Uses a char from symbols, the key and max-index (exclusive)." "Calculates new index of a character. Uses a char from symbols, the key and max-index (exclusive)."
[char key symbols max-index] [char key symbols max-index]
(get symbols (-> char
(-> char (calculate-char-index symbols)
(calculate-char-index symbols) (encrypt-or-skip char key symbols max-index)))
(encrypt-index key max-index))))
(defn encrypt-message (defn encrypt-message
"Encrypt a message using the Caesar cipher." "Encrypt a message using the Caesar cipher. The function is case-insensitive."
[message key symbols] [message key symbols]
(let [max-index (count symbols)] (let [max-index (count symbols)]
(cs/join (->> message
(map (fn [char] (encrypt-char char key symbols max-index)) (cs/lower-case)
message)))) (map (fn [char] (encrypt-char char key symbols max-index)))
(cs/join))))
(defn decrypt-message (defn decrypt-message
"Decrypt the ciphtext using the Caesar cipher." "Decrypt the ciphtext using the Caesar cipher."

@ -51,14 +51,20 @@
(testing "The message 'abc' is encrypted to 'bca'" (testing "The message 'abc' is encrypted to 'bca'"
(is (= "bca" (encrypt-message "abc" 1 symbols)))) (is (= "bca" (encrypt-message "abc" 1 symbols))))
(testing "The message 'ABC' is encrypted to 'bca', because of case-insensitive."
(is (= "bca" (encrypt-message "ABC" 1 symbols))))
(testing "The message 'bca' is decrypted to 'abc'" (testing "The message 'bca' is decrypted to 'abc'"
(is (= "abc" (encrypt-message "bca" -1 symbols)))))) (is (= "abc" (encrypt-message "bca" -1 symbols))))))
(deftest decrypt-message-text (deftest decrypt-message-text
(let [symbols "abc"] (let [symbols "abc"]
(testing "The message 'bca' is decrypted to 'abc'" (testing "The message 'bca' is decrypted to 'abc'"
(is (= "abc" (decrypt-message "bca" 1 symbols))) (is (= "abc" (decrypt-message "bca" 1 symbols))))
(testing "The message 'BCA' is decrypted to 'abc', because of case-insensitive."
(is (= "abc" (decrypt-message "BCA" 1 symbols))))
(testing "The message 'abc' is encrypted to 'bca'" (testing "The message 'abc' is encrypted to 'bca'"
(is (= "bca" (decrypt-message "abc" -1 symbols))))))) (is (= "bca" (decrypt-message "abc" -1 symbols))))))

Loading…
Cancel
Save