feat: rehaul of encode function. Now will encode regardless of text length. Will ignore values not in alphabet. Decode works on same logic, but opposite

This commit is contained in:
Sandro Zimmermann 2026-03-04 22:08:22 +01:00
parent 76e5f47d64
commit 696c37396b

View File

@ -4,15 +4,39 @@ class VigenereCipher(object):
self.alphabet = alphabet
def encode(self, text):
idx_key = [self.alphabet.index(x) for x in self.key]
idx_text = [self.alphabet.index(x) for x in text]
pos_enc = [sum(x) % len(self.alphabet) for x in zip(idx_key, idx_text)]
return "".join([self.alphabet[x] for x in pos_enc])
encoded = []
idx_key = 0
for char in text:
if char in self.alphabet:
text_pos = self.alphabet.index(char)
key_char = self.key[idx_key % len(self.key)]
key_pos = self.alphabet.index(key_char)
pos = (text_pos + key_pos) % len(self.alphabet)
encoded.append(self.alphabet[pos])
idx_key += 1
else:
encoded.append(char)
return "".join(encoded)
def decode(self, text):
pass
decoded = []
idx_key = 0
for char in text:
if char in self.alphabet:
text_pos = self.alphabet.index(char)
key_char = self.key[idx_key % len(self.key)]
key_pos = self.alphabet.index(key_char)
test = VigenereCipher("password", "abcdefghijklmnopqrstuvwxyz")
pos = (text_pos - key_pos) % len(self.alphabet)
decoded.append(self.alphabet[pos])
print(test.encode("codewars"))
idx_key += 1
else:
decoded.append(char)
return "".join(decoded)