Guest User

Untitled

a guest
Apr 22nd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.80 KB | None | 0 0
  1. from bisect import bisect_right
  2.  
  3. digits = [(letter + digit) for letter in "ABCDEFIJKLMOPQRSTUVWYZ" for digit in "123456789"]
  4.  
  5. def next_id(old):
  6.     new = list(old.split("-"))
  7.     for radix in xrange(len(new)-1, -1, -1):
  8.         if new[radix] not in digits:
  9.             raise ValueError("crap input :(")
  10.     for radix in xrange(len(new)-1, -1, -1):
  11.         value = bisect_right(digits, new[radix]) % len(digits)
  12.         new[radix] = digits[value]
  13.         if value:
  14.             break
  15.     if not (value or radix):
  16.         new = [digits[0]] + new
  17.     if len(new) == 11:
  18.         raise ValueError("arbitrary 10-part limit exceeded, lol")
  19.     return "-".join(new)
  20.  
  21.  
  22. if __name__ == "__main__":
  23.     assert next_id("A9") == "B1"
  24.     assert next_id("Z9") == "A1-A1"
  25.     assert next_id("A1-Z9") == "A2-A1"
  26.  
  27.     try:
  28.         next_id("shit")
  29.         raise AssertionError
  30.     except ValueError:
  31.         pass
Add Comment
Please, Sign In to add comment