Hi,
the following code is too slow to get accepted in CENCRY although I use a dict of precalculated values. Can someone give me some hints to speed it up?
Thanks in advance
Daft
[bbone=python,434]""" 7696. Encryption. Problem code: CENCRY """
import sys
import collections
import psyco
psyco.full()
def encrypt(word, encs):
ccount = collections.defaultdict(int)
result = [''] * len(word)
for pos, c in enumerate(word):
ccount[c] += 1
k = ccount[c]
result[pos] = encs[c][1][(k-1) % encs[c][0]]
return ''.join(result)
def main():
encs = {
'a': (21,'bhntzgmsyflrxdkqwcjpv'),
'e': (21,'cjpvbhntzgmsyflrxdkqw'),
'i': (21,'dkqwcjpvbhntzgmsyflrx'),
'o': (21,'flrxdkqwcjpvbhntzgmsy'),
'u': (21,'gmsyflrxdkqwcjpvbhntz'),
'b': (5,'aeiou'),
'c': (5,'eioua'),
'd': (5,'iouae'),
'f': (5,'ouaei'),
'g': (5,'uaeio'),
'h': (5,'aeiou'),
'j': (5,'eioua'),
'k': (5,'iouae'),
'l': (5,'ouaei'),
'm': (5,'uaeio'),
'n': (5,'aeiou'),
'p': (5,'eioua'),
'q': (5,'iouae'),
'r': (5,'ouaei'),
's': (5,'uaeio'),
't': (5,'aeiou'),
'v': (5,'eioua'),
'w': (5,'iouae'),
'x': (5,'ouaei'),
'y': (5,'uaeio'),
'z': (5,'aeiou'),
}
cases = sys.stdin.read().split('\n')
results = []
for line in cases[1:-1]:
result = encrypt(line, encs)
results.append(result)
sys.stdout.writelines ('\n'.join(results))
sys.stdout.write('\n')
if name == 'main':
main()[/bbone]