Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from math import gcd as bltin_gcd
- class T52:
- def __init__(self, a: int, b: int, alfabet: str):
- if len(alfabet) != len(set(alfabet)):
- raise AssertionError("alfabet bevat herhaalde symbolen")
- if bltin_gcd(a, len(alfabet)) != 1:
- raise AssertionError(f"{a} en {len(alfabet)} zijn niet copriem")
- self.a = a
- self.b = b
- self.alfabet = alfabet
- def codeerSymbool(self, karakter: str):
- if self.alfabet.__contains__(karakter):
- karakter_index = self.alfabet.index(karakter)
- codatie = (self.a * karakter_index + self.b) % len(self.alfabet)
- return self.alfabet[codatie]
- else:
- return karakter
- def decodeerSymbool(self, karakter: str):
- if self.alfabet.__contains__(karakter):
- karakter_index = self.alfabet.index(karakter)
- a_accent = 0
- for i,letter in enumerate(self.alfabet):
- if (self.a * i) % len(self.alfabet) == 1:
- a_accent = i
- decodatie = (a_accent * (karakter_index - self.b)) % len(self.alfabet)
- return self.alfabet[decodatie]
- else:
- return karakter
- def codeer(self, code: str):
- codatie = str()
- for letter in code:
- codatie += self.codeerSymbool(letter)
- return codatie
- def decodeer(self, code: str):
- decodatie = str()
- for letter in code:
- decodatie += self.decodeerSymbool(letter)
- return decodatie
- def __add__(self, other):
- if self.alfabet != other.alfabet:
- raise AssertionError("alfabetten zijn verschillend")
- tot_a = self.a * other.a
- tot_b = (other.a * self.b) + other.b
- return T52(tot_a, tot_b, self.alfabet)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement