From daf77d62f7be8f88236ee60508fd762eed470ec3 Mon Sep 17 00:00:00 2001 From: christian Date: Mon, 4 Apr 2022 21:22:10 +0200 Subject: [PATCH] moved everything into separate classes --- .../wordlist-english.txt | 0 .../wordlist-german.txt | 0 main.py | 104 ++++-------------- morse_decrypt/dict.py | 13 +++ morse_decrypt/morse_decrypt.py | 28 +++++ morse_decrypt/word_guess.py | 15 +++ 6 files changed, 80 insertions(+), 80 deletions(-) rename wordlist-english.txt => dict/wordlist-english.txt (100%) rename wordlist-german.txt => dict/wordlist-german.txt (100%) create mode 100644 morse_decrypt/dict.py create mode 100644 morse_decrypt/morse_decrypt.py create mode 100644 morse_decrypt/word_guess.py diff --git a/wordlist-english.txt b/dict/wordlist-english.txt similarity index 100% rename from wordlist-english.txt rename to dict/wordlist-english.txt diff --git a/wordlist-german.txt b/dict/wordlist-german.txt similarity index 100% rename from wordlist-german.txt rename to dict/wordlist-german.txt diff --git a/main.py b/main.py index 7fa3361..4650833 100644 --- a/main.py +++ b/main.py @@ -1,80 +1,24 @@ -import csv - -alphabet = [["A", ".-"], - ["B", "-..."], - ["C", "-.-."], - ["D", "-.."], - ["E", "."], - ["F", "..-."], - ["G", "--."], - ["H", "...."], - ["I", ".."], - ["J", ".---"], - ["K", "-.-"], - ["L", ".-.."], - ["M", "--"], - ["N", "-."], - ["O", "---"], - ["P", ".--."], - ["Q", "--.-"], - ["R", ".-."], - ["S", "..."], - ["T", "-"], - ["U", "..-"], - ["V", "...-"], - ["W", ".--"], - ["X", "-..-"], - ["Y", "-.--"], - ["Z", "--.."]] - -dictDE_file = open("wordlist-german.txt", "r") -dictEN_file = open("wordlist-english.txt", "r") - -reader = csv.reader(dictDE_file) -dictDE = [row[0].upper() for row in reader] -reader = csv.reader(dictEN_file) -dictEN = [row[0].upper() for row in reader] -dictionary = dictEN - -morse_cipher = "..-..--..-......-" - - -def latin_to_morse(word): - result = "" - for letter in word: - for latin, morse in alphabet: - if letter == latin: - result += morse - return result - - -def guess_chars(morse_text, plain_text=""): - if morse_text == "": - char_guesses.append(plain_text) - else: - for latin, morse in alphabet: - if morse == morse_text[0:len(morse)]: - guess_chars(morse_text[len(morse):len(morse_text)], (plain_text + latin)) - - -def guess_vocabs(word, phrase=""): - if word == "": - vocab_guesses.append(phrase) - else: - for vocab in dictionary: - if vocab == word[0:len(vocab)]: - guess_vocabs(word[len(vocab):len(word)], (phrase + vocab + " ")) - - -char_guesses = [] -guess_chars(morse_cipher) -print("Chars guessed. char_guesses complete.") - -guess_list_length = len(char_guesses) -for index, word in enumerate(char_guesses): - print("(", index, "/", guess_list_length, ") - ", word, "...", end="") - vocab_guesses = [] - guess_vocabs(word) - print("\r", end="") - if vocab_guesses: - print("Found something: ", vocab_guesses) +from morse_decrypt.dict import Dict +from morse_decrypt.morse_decrypt import MorseDecrypt +from morse_decrypt.word_guess import WordGuess + +if __name__ == '__main__': + morse_cipher = "..-..--..-......-" + + word_guess = WordGuess( + Dict([ + "dict/wordlist-german.txt", + "dict/wordlist-english.txt" + ]) + ) + morse_decrypt = MorseDecrypt() + char_guesses = morse_decrypt.guess_morse_text(morse_cipher) + print("Chars guessed. char_guesses complete.") + + guess_list_length = len(char_guesses) + for index, word in enumerate(char_guesses): + print("(", index, "/", guess_list_length, ") - ", word, "...", end="") + vocab_guesses = word_guess.guess_vocabs(word, '', []) + print("\r", end="") + if vocab_guesses: + print("Found something: ", vocab_guesses) diff --git a/morse_decrypt/dict.py b/morse_decrypt/dict.py new file mode 100644 index 0000000..3f5ed7a --- /dev/null +++ b/morse_decrypt/dict.py @@ -0,0 +1,13 @@ +import csv + + +class Dict: + def __init__(self, dictionary_path_list): + self.dictionary = [] + for path in dictionary_path_list: + handler = open(path, "r") + reader = csv.reader(handler) + self.dictionary += [row[0].upper() for row in reader] + + def __iter__(self): + return iter(self.dictionary) diff --git a/morse_decrypt/morse_decrypt.py b/morse_decrypt/morse_decrypt.py new file mode 100644 index 0000000..4d06281 --- /dev/null +++ b/morse_decrypt/morse_decrypt.py @@ -0,0 +1,28 @@ + +class MorseDecrypt: + alphabet = [ + ["A", ".-"], ["B", "-..."], ["C", "-.-."], ["D", "-.."], ["E", "."], ["F", "..-."], ["G", "--."], ["H", "...."], + ["I", ".."], ["J", ".---"], ["K", "-.-"], ["L", ".-.."], ["M", "--"], ["N", "-."], ["O", "---"], ["P", ".--."], + ["Q", "--.-"], ["R", ".-."], ["S", "..."], ["T", "-"], ["U", "..-"], ["V", "...-"], ["W", ".--"], ["X", "-..-"], + ["Y", "-.--"], ["Z", "--.."] + ] + + def latin_to_morse(self, word: str): + result = "" + for letter in word: + for latin, morse in self.alphabet: + if letter == latin: + result += morse + return result + + def guess_morse_text(self, morse_text): + return self.guess_chars(morse_text, '', []) + + def guess_chars(self, morse_text: str, plain_text="", char_guesses=None): + if morse_text == "": + char_guesses.append(plain_text) + else: + for latin, morse in self.alphabet: + if morse == morse_text[0:len(morse)]: + self.guess_chars(morse_text[len(morse):len(morse_text)], (plain_text + latin), char_guesses) + return char_guesses diff --git a/morse_decrypt/word_guess.py b/morse_decrypt/word_guess.py new file mode 100644 index 0000000..30221b0 --- /dev/null +++ b/morse_decrypt/word_guess.py @@ -0,0 +1,15 @@ +from morse_decrypt.dict import Dict + + +class WordGuess: + def __init__(self, dictionary: Dict): + self.dictionary = dictionary + + def guess_vocabs(self, word: str, phrase="", vocab_guesses=None): + if word == "": + vocab_guesses.append(phrase) + else: + for vocab in self.dictionary: + if vocab == word[0:len(vocab)]: + self.guess_vocabs(word[len(vocab):len(word)], (phrase + vocab + " "), vocab_guesses) + return vocab_guesses