# HG changeset patch # User Eugen Sawin # Date 1308082339 -7200 # Node ID b3a61fa4c8d768784b2ff4d4b202135a60e4c0ac # Parent aa4e1ccda9ab0e9ae7c93388d74537c059c4365d Added double hash. diff -r aa4e1ccda9ab -r b3a61fa4c8d7 src/double_hash.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/double_hash.py Tue Jun 14 22:12:19 2011 +0200 @@ -0,0 +1,39 @@ +""" +Name: string_hash - a string hashing program +Description: Basic string hashing program according to Theory I lecture. +Author: Eugen Sawin +""" + +def main(): + args = parse_arguments() + used = set() + for key in args.values.split(): + print "%s: %i" % (key, double_hash(int(key), used)) + +def double_hash(k, used): + j = 0 + code = (h(k) - s(j, k)) % 15 + while code in used: + j += 1 + code = (h(k) - s(j, k)) % 15 + used.add(code) + return code + +def s(j, k): + return j * h2(k) + +def h(k): + return k % 15 + +def h2(k): + return 1 + (k % 13) + +from argparse import ArgumentParser + +def parse_arguments(): + parser = ArgumentParser(description="Returns the hash for given string using the double-hash technique.") + parser.add_argument("values", help="values") + return parser.parse_args() + +if __name__ == "__main__": + main()