Leetspeak
Verfasst: Montag 10. Januar 2011, 16:22
Wieder ein mal tut eines meiner Programme nicht das was es soll. Es soll nämlich einen String in Leetspeak entschlüsseln. Ich hab es mal durch getestet es kann jeden Buchstaben aus dem dictionary entschlüsseln, aber wenn der String länger ist als 4 Byte wird das 5 Byte verschluckt. Entschuldigt bitte das der Code (wieder einmal) nicht schön ist aber ich musste einfach rumprobieren.
Der Code:
Ausgabe:
Ich hab mal im Code ein Paar print() Anweisungen eingebaut um zusehen was das Skript macht.
Ohne tab: memory auffüllen
ein tab: memory auf Zeichen durchsuchen
zwei tabs: ausgabe des erkannten Zeichens
Der Code:
Code: Alles auswählen
character2leet_speak={'a': '4', 'b': '|3', 'c': '<', 'd': '|)', 'e': '3', 'f': 'f', 'g': '6',
'h': '|-|', 'i': '!', 'j': 'j', 'k': '|<', 'l': '1', 'm': '|\/|', 'n': '|/|',
'o': '0', 'p': '|*', 'q': 'q', 'r': '|2', 's': '5', 't': '+', 'u': '|_|',
'v': '\\/', 'w': '\\/\\/', 'x': 'x', 'y': 'y', 'z': '2', '!': '°!', '?': '°?'}
def find_longest_translation(dic):
maxlen=0
for i in dic:
if len(str(dic[i]))>maxlen:
maxlen=len(str(dic[i]))
return maxlen
def inverted_dict(dictionary):
return dict((v, k) for k, v in dictionary.items())
def encrypt_leetcode(string, codedic=None):
global character2leet_speak
leetcode=''
if codedic is None:
codedic=character2leet_speak
for letter in string.lower():
if letter in codedic:
leetcode+=codedic[letter]
else:
leetcode+=letter
return leetcode
def decode_leetcode(string, codedic=None):
global character2leet_speak
if codedic is None: #Wenn codedic nicht angegeben ist,
codedic=character2leet_speak #wird das standartd dictionary hergenommen.
normaltext=''
memory=''
maxlen=find_longest_translation(codedic)
codedic=inverted_dict(codedic)
for letter in string:
if len(memory)<maxlen: #ueberprueft ob der Speicher vollgeschrieben ist, wenn nicht wird er vollgeschrieben
print(memory)
memory+=letter
continue #verhindert das ausführen des folgenden code bis der Speicher voll ist
for i in range(maxlen):
print('\t'+str(memory[0: len(memory)-i]))
if memory[0: len(memory)-i] in codedic:
normaltext+=codedic[memory[0: len(memory)-i]]
print('\t\t'+normaltext)
memory=memory[len(memory)-i:]
break
elif i == maxlen-1:
print('unbekantes Zeichen identifiziert')
normaltext+=memory[0: 1]
print('\t\t'+normaltext)
memory=memory[1:]
break
if len(memory)>0:
print('noch nicht fehrtig')
print(memory)
for letter in memory:
for i in range(maxlen):
print('\t'+str(memory[0: len(memory)-i]))
if memory[0: len(memory)-i] in codedic:
normaltext+=codedic[memory[0: len(memory)-i]]
print('\t\t'+normaltext)
memory=memory[len(memory)-i:]
break
elif i == maxlen-1:
print('unbekantes Zeichen identifiziert')
normaltext+=memory[0: 1]
print('\t\t'+normaltext)
memory=memory[1:]
break
return normaltext
if __name__ == '__main__':
print(decode_leetcode('|-|4110'))
Code: Alles auswählen
|
|-
|-|
|-|4
|-|
h
4
41
noch nicht fehrtig
410
410
41
4
ha
10
1
hal
0
halo
haloOhne tab: memory auffüllen
ein tab: memory auf Zeichen durchsuchen
zwei tabs: ausgabe des erkannten Zeichens