Compare commits

...
2 Commits
Author SHA1 Message Date
KKlochko 481735d9df Add the function that return all key combinations for a possible key vector.
continuous-integration/drone/push Build is passing
2023-11-14 21:55:29 +02:00
KKlochko d6ba958b5b Rename the function from get-possible-keys to get-all-combinations-for-blocks. 2023-11-14 21:54:38 +02:00
2 changed files with 24 additions and 5 deletions
@@ -30,9 +30,15 @@
(map cs/join)
(into [])))
(defn get-possible-keys
"Return possible keys for a possible key vector. For example, if you have a map: {\\a [\\a \\b \\c] \\b [\\b \\c] \\c [\\a \\c]}, then the vector is [[\\a \\b \\c] [\\b \\c] [\\a \\c]] and keys (\"aba\" \"abc\" ...)."
(defn get-all-combinations-for-blocks
"Return the all combination of blocks in a possible key vector. For example, if you have a map: {\\a [\\a \"bf\" \\c] \\b [\"bf\" \\c] \\c [\\a \\c]}, then the vector is [[\\a \"bf\" \\c] [\"bf\" \\c] [\\a \\c]] and keys (\"abfa\" \"abfc\" ...)."
[possible-key-vector]
(->> (apply comb/cartesian-product possible-key-vector)
(map cs/join)))
(defn get-possible-key-combinations
"Return possible keys for a possible key vector. For example, if you have a map: {\\a [\\a \\b \\c] \\e [\\f \\g] \\c [\\a \\c]}, then the keys are (\"abcefg\" \"abcegf\" ...)."
[possible-key-vector]
(->> (map get-all-permutation-for-block possible-key-vector)
(get-all-combinations-for-blocks)))
@@ -27,11 +27,24 @@
[\a \b] ["ab" "ba"]
[\a \b \c] ["abc" "acb" "bac" "bca" "cab" "cba"])))
(deftest get-possible-keys-test
(testing "The keys must be the all combinations"
(deftest get-all-combinations-for-blocks-test
(testing "The keys must be the all combinations of blocks"
(are [possible-keys-vector expected-keys]
(= expected-keys (get-possible-keys possible-keys-vector))
(= expected-keys (get-all-combinations-for-blocks possible-keys-vector))
[[\a \b] [\f] [\a \c] [\g]] '("afag" "afcg" "bfag" "bfcg")
[[\a \b] [\a \c]] '("aa" "ac" "ba" "bc")
[[\a \b \c] [\a \c] [\b \c]] '("aab" "aac" "acb" "acc" "bab" "bac" "bcb" "bcc" "cab" "cac" "ccb" "ccc"))))
(deftest get-possible-key-combinations-test
(testing "The keys must be the all combinations, but the blocks must create a permutations which will be joined as a combination"
(are [possible-keys-vector expected-keys]
(= expected-keys (get-possible-key-combinations possible-keys-vector))
[[\a \b] [\f] [\e \c] [\g]] '("abfecg" "abfceg" "bafecg" "bafceg")
[[\a \b] [\a \c]] '("abac" "abca" "baac" "baca")
[[\a \b \c] [\a \c] [\b \c]] '("abcacbc" "abcaccb" "abccabc" "abccacb"
"acbacbc" "acbaccb" "acbcabc" "acbcacb"
"bacacbc" "bacaccb" "baccabc" "baccacb"
"bcaacbc" "bcaaccb" "bcacabc" "bcacacb"
"cabacbc" "cabaccb" "cabcabc" "cabcacb"
"cbaacbc" "cbaaccb" "cbacabc" "cbacacb"))))