diff options
-rwxr-xr-x | rfc1982_serial_number.py | 24 | ||||
-rwxr-xr-x | test.py | 9 |
2 files changed, 22 insertions, 11 deletions
diff --git a/rfc1982_serial_number.py b/rfc1982_serial_number.py index 39fc414..ae34167 100755 --- a/rfc1982_serial_number.py +++ b/rfc1982_serial_number.py @@ -39,16 +39,13 @@ class Serial: def __str__(self): return f"{int(self):{len(str(self.modulus))}d}" -def step(start, finish): +def find_intermediate(start, finish): if start < finish: - return start, finish + return None else: - midpoint = start + ((Serial.modulus >> 1) - 2) - assert start < midpoint and midpoint < finish - return start, midpoint, finish - -def show(steps): - print(" => ".join(str(s) for s in steps)) + wrap = start + ((Serial.modulus >> 1) - 2) + assert start < wrap and wrap < finish + return wrap def main(): from argparse import ArgumentParser @@ -58,7 +55,16 @@ def main(): ap.add_argument("finish", type = Serial) args = ap.parse_args() - show(step(args.start, args.finish)) + wrap = find_intermediate(args.start, args.finish) + + print(f"Start at {args.start!s}") + + if wrap is None: + print("No step needed") + else: + print(f"Step via {wrap!s}") + + print(f"End at {args.finish!s}") if __name__ == "__main__": main() @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -from rfc1982_serial_number import Serial, step, show +from rfc1982_serial_number import Serial, find_intermediate from random import randint for test in range(10000): @@ -12,4 +12,9 @@ for test in range(10000): (i1 > i2 and not (i1 < i2)) or \ int(i1) & int(i2) == Serial.modulus >> 1 - show(step(i1, i2)) + step = [i1, i2] + wrap = find_intermediate(i1, i2) + if wrap is not None: + step.insert(1, wrap) + + print(" => ".join(str(s) for s in step)) |