From 2616b14ef4a9fa7ef7e1d6f31a5e0f93b9d5e095 Mon Sep 17 00:00:00 2001 From: KKlochko Date: Sun, 26 Nov 2023 21:33:28 +0200 Subject: [PATCH] Add the analyzer options and their actions for the simple substiotution. --- .../cli/actions/cracking.clj | 20 ++++++++++++++++++- src/cipher_analytical_machine/cli/options.clj | 3 ++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/cipher_analytical_machine/cli/actions/cracking.clj b/src/cipher_analytical_machine/cli/actions/cracking.clj index db4a8ab..4162727 100644 --- a/src/cipher_analytical_machine/cli/actions/cracking.clj +++ b/src/cipher_analytical_machine/cli/actions/cracking.clj @@ -1,6 +1,7 @@ (ns cipher-analytical-machine.cli.actions.cracking (:require [cipher-analytical-machine.analyzers.caesar :as caesar-analyzers] + [cipher-analytical-machine.analyzers.simple-substitution :as ss-analyzers] [cipher-analytical-machine.symbols.frequencies :as symbol-frequencies]) (:gen-class)) @@ -18,10 +19,27 @@ :else (caesar-analyzers/get-plaintext message symbols frequencies)))) +(defn cracking-simple-substitution-with-caesar + [options arguments] + (let [analyzer (:analyzer options) + message (:message options) + symbols (:symbols options) + frequencies (-> (get options :language "en") + (symbol-frequencies/default-frequency-factory))] + (cond + (= analyzer "Chi^2") + (ss-analyzers/get-plaintext-and-key message frequencies) + + :else + (ss-analyzers/get-plaintext-and-key message frequencies)))) + (defn cracking-actions [options arguments action-type] (let [cipher (:cipher options)] (cond (= cipher "Caesar") - (cracking-caesar options arguments)))) + (cracking-caesar options arguments) + + (= cipher "Simple substitution and Caesar") + (cracking-simple-substitution-with-caesar options arguments)))) diff --git a/src/cipher_analytical_machine/cli/options.clj b/src/cipher_analytical_machine/cli/options.clj index dd93152..61624d7 100644 --- a/src/cipher_analytical_machine/cli/options.clj +++ b/src/cipher_analytical_machine/cli/options.clj @@ -32,7 +32,8 @@ (option-values-as-row "Ciphers" cipher-options)) (def analyzers-options - {"Caesar" #{"Chi^2"}}) + {"Caesar" #{"Chi^2" "Frequency"} + "Simple substitution and Caesar" #{"Chi^2" "Frequency"}}) (defn get-available-analyzers-options-as-string "Return the formatted string of analyzers options."