Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from bisect import bisect_right
- digits = [(letter + digit) for letter in "ABCDEFIJKLMOPQRSTUVWYZ" for digit in "123456789"]
- def next_id(old):
- new = list(old.split("-"))
- for radix in xrange(len(new)-1, -1, -1):
- if new[radix] not in digits:
- raise ValueError("crap input :(")
- for radix in xrange(len(new)-1, -1, -1):
- value = bisect_right(digits, new[radix]) % len(digits)
- new[radix] = digits[value]
- if value:
- break
- if not (value or radix):
- new = [digits[0]] + new
- if len(new) == 11:
- raise ValueError("arbitrary 10-part limit exceeded, lol")
- return "-".join(new)
- if __name__ == "__main__":
- assert next_id("A9") == "B1"
- assert next_id("Z9") == "A1-A1"
- assert next_id("A1-Z9") == "A2-A1"
- try:
- next_id("shit")
- raise AssertionError
- except ValueError:
- pass
Add Comment
Please, Sign In to add comment