Skip to content

Instantly share code, notes, and snippets.

@dtuominen
Created October 26, 2012 20:27
Show Gist options
  • Save dtuominen/3961285 to your computer and use it in GitHub Desktop.
Save dtuominen/3961285 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
from string import lowercase
from collections import defaultdict
def coded_vals():
for i, l in enumerate(lowercase):
yield l, i+1
def make_map(code_map):
d = defaultdict(int)
for k,v in code_map:
d[k] += v
return d
def alpha_to_num(letters, mapping):
return [num for num in (''.join(map(str, [mapping[l] for l in letters])))]
def gen_pairs(numbers, mapping):
pairs = []
for i, l in enumerate(numbers):
if i == (len(numbers) - 1):
pairs.append(l)
break
else:
pairs.append((numbers[i], numbers[i+1]))
return [''.join(p) for p in pairs]
def check_pairs(numbers, mapping, pairs):
for pair in pairs:
pair = int(pair)
if pair < 27:
for k,v in mapping.items():
if pair == v:
#print k
yield k
elif pair >= 27:
pair = [num for num in map(str, [pair])]
for i, n in enumerate(pair):
for k,v in mapping.items():
if pair[i] == v:
yield k
if __name__ == '__main__':
letters = 'hello'
mapping = make_map(coded_vals())
numbers = alpha_to_num(letters,mapping)
trans = gen_pairs(numbers, mapping)
checker = ''.join([n for n in check_pairs(numbers, mapping, trans)])
print 'Original letters: {}\nCoded: {}\n'.format(letters, numbers)
print 'Coded numbers translated to alpha: {}\n'.format(checker)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment