leet-speak
Verfasst: Freitag 7. Januar 2011, 13:17
Hatte gestern Abend mal eine halbe Stunde langeweile und war bis jetzt am überlegen ob ich das überhaupt posten soll, aber vieleicht hat ja mal jemand von euch Interesse drüber zu schauen
Handelt sich lediglich um einen kleinen Übersetzer, wie der Title schon vermuten lässt.
Das die Rückumwandlung nicht völlig gelingt ist mir klar, allein schon weil in der Decode Dictionary einige Keys verworfen werden, da sie doppelt drin stehen, zudem gehe ich beim dekodieren nur Vergleichend vor.
Genaugenommen prüfe ich ob die längst Zeichenkette ein Buchstabe existiert und dann werde ich kleiner, damit habe ich aber einfach nur eine "hohe" Warscheinlichkeit das es zumindest Lesbar wird
Andere Ansätze, Ideen oder Verbesserungen ?

Handelt sich lediglich um einen kleinen Übersetzer, wie der Title schon vermuten lässt.
Code: Alles auswählen
#!/usr/bin/env python
import random
LEET_ENCODE = {
"A" : ("A", "a", "4", "@", "/-\\", "/\\", "^", "ci"),
"B" : ("B", "b", "8", "|3", "6", "13", "\xdf", "]3", "I3"),
"C" : ("C", "c", "(", "<", "\xa2", "{", "\xa9"),
"D" : ("D", "d", "|)", "I)", "|>", "I>", "]>", "[>", "cl", "cI"),
"E" : ("E", "e", "3", "\x80", "&", "[-"),
"F" : ("F", "f", "|=", "I=", "}", "]=", "(=", ")="),
"G" : ("G", "g", "6", "9", "(_+", "cj"),
"H" : ("H", "h", "|-|", "#", "]-[", "[-]", ")-(", "(-)", ":-:" "}{", "}-{"),
"I" : ("I", "i", "1", "!", "|", ";"),
"J" : ("J", "j", "_|", "_/", "]", "\xbf", "</", "_)"),
"K" : ("K", "k", "X", "|<", "I<", "]<", "|X", "|{"),
"L" : ("L", "l", "|", "|_", "\xa3", "1", "7", "\xac"),
"M" : ("M", "m", "|V|", "|v|", "/\\/\\", "|\\/|", "^^", "nn", "(V)", "(v)",
"(\\/)", "/|\\", "/|/|", ".\\\\", "/^^\\", "/V\\", "|^^|"),
"N" : ("N", "n", "|\|", "/|/", "]\\[", "//"),
"O" : ("O", "o", "0", "()", "[]", "\xa4", "<>", "@"),
"P" : ("P", "p", "|o", "|*", "\xb0", "|>", "|?", "|7", "q", "\xfe", "\xb6"),
"Q" : ("Q", "q", "p", "O_", "0,", "(,)", "9", "\xb6", "O,"),
"R" : ("R", "r", "|2", "/2", "I2", "I^", "|^", "lz", "Iz", "|z", "l2"),
"S" : ("S", "s", "Z", "z", "5", "$", "\xa7"),
"T" : ("T", "t", "7", "+", "-|-", "1", "\x86"),
"U" : ("U", "u", "|_|", "(_)", "\\_/", "\\_\\", "/_/", "]_[", "\xb5"),
"V" : ("V", "v", "\\/"),
"W" : ("W", "w", "\\/\\/", "vv", "VV", "uu", "UU", "'//", "\\\\'", "\\^/",
"(n)", "\\X/", "\\|/", "\\_|_/", "\\_:_/"),
"X" : ("X", "x", "><", "}{", "*", ")("),
"Y" : ("Y", "y", "\xa5", "\xd7", "j", "`/", "\xff"),
"Z" : ("Z", "z", "2", "~/_", "7_", "%")
}
LEET_LENGTH = 5
LEET_DECODE = dict()
for key, values in LEET_ENCODE.iteritems():
for value in values:
LEET_DECODE[value] = key
def encode(text):
leet = []
for char in text:
try:
leet.append(random.choice(LEET_ENCODE[char.upper()]))
except KeyError:
leet.append(char)
return "".join(leet)
def decode(leet):
text = []
index = 0
while index < len(leet):
for size in xrange(LEET_LENGTH):
chunksize = LEET_LENGTH - size
chars = leet[index:index + chunksize]
if chars in LEET_DECODE:
text.append(LEET_DECODE[chars])
break
elif chunksize == 1:
text.append(chars)
index += chunksize
return "".join(text)
Genaugenommen prüfe ich ob die längst Zeichenkette ein Buchstabe existiert und dann werde ich kleiner, damit habe ich aber einfach nur eine "hohe" Warscheinlichkeit das es zumindest Lesbar wird

Andere Ansätze, Ideen oder Verbesserungen ?