Update the Caesar to be case-insensitive and skip unknown symbols.
continuous-integration/drone/push Build is passing
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -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))))))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user