Browse Source

moved everything into separate classes

master
christian 3 years ago
parent
commit
daf77d62f7
6 changed files with 80 additions and 80 deletions
  1. +0
    -0
      dict/wordlist-english.txt
  2. +0
    -0
      dict/wordlist-german.txt
  3. +24
    -80
      main.py
  4. +13
    -0
      morse_decrypt/dict.py
  5. +28
    -0
      morse_decrypt/morse_decrypt.py
  6. +15
    -0
      morse_decrypt/word_guess.py

wordlist-english.txt → dict/wordlist-english.txt View File


wordlist-german.txt → dict/wordlist-german.txt View File


+ 24
- 80
main.py View File

@ -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)

+ 13
- 0
morse_decrypt/dict.py View File

@ -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)

+ 28
- 0
morse_decrypt/morse_decrypt.py View File

@ -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

+ 15
- 0
morse_decrypt/word_guess.py View File

@ -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

Loading…
Cancel
Save