My thanks to the coffee clutch mathematicians [1] for inspiring lesson plans around L337.[2]
You might think writing a decrypter would be easy, but I'm showing below why the simply one-for-one letter substitution idea won't work. I'd hesitate to use regular expressions. The idea of tokenizing, a subclass of parsing, rears its (not so ugly) head. So the code below, while perhaps motivational, is not (repeat not) a solution, as the test code clearly proves. Kirby [1] http://mathforum.org/kb/thread.jspa?threadID=1628625&tstart=0 [2] http://www.urbandictionary.com/define.php?term=L337 ==== # -*- coding: cp1252 -*- L337 = dict( A='4', B='B', C='(', D='|', E='3', F='Ph', G='6', H='(-)', I='1', J='j', K='K', L='!', M='/\\/\\', # escaping \ N='/\\/', O='Ø', P='P', Q='Q', R='r', S='$', T='7', U='()', V='\/', W='\/\/', X='xx', Y='¥', Z='Z') def reverse_dict(anydict): newdict = {} for thekey in anydict: newdict[anydict[thekey]] = thekey return newdict rev_L337 = reverse_dict(L337) def decrypt(c, permuter): p = [] for letter in c: p.append(permuter.get(letter,letter)) return ''.join(p) def test(): # NOTE: the test fails print decrypt('641|_ +|-|4<|<3|2y 5|_|x0|25.', rev_L337) if __name__ == '__main__': test() _______________________________________________ Edu-sig mailing list [email protected] http://mail.python.org/mailman/listinfo/edu-sig
