sawine@3: """ sawine@3: Name: string_hash - a string hashing program sawine@3: Description: Basic string hashing program according to Theory I lecture. sawine@3: Author: Eugen Sawin sawine@3: """ sawine@3: sawine@3: def main(): sawine@3: args = parse_arguments() sawine@3: used = set() sawine@3: for key in args.values.split(): sawine@3: print "%s: %i" % (key, double_hash(int(key), used)) sawine@3: sawine@3: def double_hash(k, used): sawine@3: j = 0 sawine@3: code = (h(k) - s(j, k)) % 15 sawine@3: while code in used: sawine@3: j += 1 sawine@3: code = (h(k) - s(j, k)) % 15 sawine@3: used.add(code) sawine@3: return code sawine@3: sawine@3: def s(j, k): sawine@3: return j * h2(k) sawine@3: sawine@3: def h(k): sawine@3: return k % 15 sawine@3: sawine@3: def h2(k): sawine@3: return 1 + (k % 13) sawine@3: sawine@3: from argparse import ArgumentParser sawine@3: sawine@3: def parse_arguments(): sawine@3: parser = ArgumentParser(description="Returns the hash for given string using the double-hash technique.") sawine@3: parser.add_argument("values", help="values") sawine@3: return parser.parse_args() sawine@3: sawine@3: if __name__ == "__main__": sawine@3: main()