Skip to content

Instantly share code, notes, and snippets.

@fluency03
Forked from bhelx/base_62_converter.py
Created May 25, 2016 09:26
Show Gist options
  • Select an option

  • Save fluency03/a3f6e762cd6b13fe9de99d7277af643c to your computer and use it in GitHub Desktop.

Select an option

Save fluency03/a3f6e762cd6b13fe9de99d7277af643c to your computer and use it in GitHub Desktop.

Revisions

  1. @bhelx bhelx revised this gist Jan 20, 2011. 1 changed file with 4 additions and 4 deletions.
    8 changes: 4 additions & 4 deletions base_62_converter.py
    Original file line number Diff line number Diff line change
    @@ -28,9 +28,9 @@ def true_ord(char):

    if char.isdigit():
    return ord(char) - DIGIT_OFFSET
    elif char >= 'A' and char <= 'Z':
    elif 'A' <= char <= 'Z':
    return ord(char) - UPPERCASE_OFFSET
    elif char >= 'a' and char <= 'z':
    elif 'a' <= char <= 'z':
    return ord(char) - LOWERCASE_OFFSET
    else:
    raise ValueError("%s is not a valid character" % char)
    @@ -42,9 +42,9 @@ def true_chr(integer):
    """
    if integer < 10:
    return chr(integer + DIGIT_OFFSET)
    elif integer >= 10 and integer <= 35:
    elif 10 <= integer <= 35:
    return chr(integer + UPPERCASE_OFFSET)
    elif integer >= 36 and integer < 62:
    elif 36 <= integer < 62:
    return chr(integer + LOWERCASE_OFFSET)
    else:
    raise ValueError("%d is not a valid integer in the range of base %d" % (integer, BASE))
  2. @bhelx bhelx revised this gist Jan 14, 2011. 1 changed file with 69 additions and 71 deletions.
    140 changes: 69 additions & 71 deletions base_62_converter.py
    Original file line number Diff line number Diff line change
    @@ -1,8 +1,8 @@
    #!/usr/bin/env python

    #
    # Converts any integer into a base [BASE] number. I have chosen 62
    # as it is meant to represent the integers using all the alphanumeric
    # Converts any integer into a base [BASE] number. I have chosen 62
    # as it is meant to represent the integers using all the alphanumeric
    # characters, [no special characters] = {0..9}, {A..Z}, {a..z}
    #
    # I plan on using this to shorten the representation of possibly long ids,
    @@ -21,83 +21,81 @@
    DIGIT_OFFSET = 48

    def true_ord(char):
    """
    Turns a digit [char] in character representation
    from the number system with base [BASE] into an integer.
    """

    if char.isdigit():
    return ord(char) - DIGIT_OFFSET
    elif char >= 'A' and char <= 'Z':
    return ord(char) - UPPERCASE_OFFSET
    elif char >= 'a' and char <= 'z':
    return ord(char) - LOWERCASE_OFFSET
    else:
    raise ValueError("%s is not a valid character" % char)
    """
    Turns a digit [char] in character representation
    from the number system with base [BASE] into an integer.
    """
    if char.isdigit():
    return ord(char) - DIGIT_OFFSET
    elif char >= 'A' and char <= 'Z':
    return ord(char) - UPPERCASE_OFFSET
    elif char >= 'a' and char <= 'z':
    return ord(char) - LOWERCASE_OFFSET
    else:
    raise ValueError("%s is not a valid character" % char)

    def true_chr(integer):
    """
    Turns an integer [integer] into digit in base [BASE]
    as a character representation.
    """
    if integer < 10:
    return chr(integer + DIGIT_OFFSET)
    elif integer >= 10 and integer <= 35:
    return chr(integer + UPPERCASE_OFFSET)
    elif integer >= 36 and integer < 62:
    return chr(integer + LOWERCASE_OFFSET)
    else:
    raise ValueError("%d is not a valid integer in the range of base %d" % (integer, BASE))
    """
    Turns an integer [integer] into digit in base [BASE]
    as a character representation.
    """
    if integer < 10:
    return chr(integer + DIGIT_OFFSET)
    elif integer >= 10 and integer <= 35:
    return chr(integer + UPPERCASE_OFFSET)
    elif integer >= 36 and integer < 62:
    return chr(integer + LOWERCASE_OFFSET)
    else:
    raise ValueError("%d is not a valid integer in the range of base %d" % (integer, BASE))


    def saturate(key):
    """
    Turn the base [BASE] number [key] into an integer
    """
    int_sum = 0
    reversed_key = key[::-1]
    for idx, char in enumerate(reversed_key):
    int_sum += true_ord(char) * int(math.pow(BASE, idx))
    return int_sum
    """
    Turn the base [BASE] number [key] into an integer
    """
    int_sum = 0
    reversed_key = key[::-1]
    for idx, char in enumerate(reversed_key):
    int_sum += true_ord(char) * int(math.pow(BASE, idx))
    return int_sum


    def dehydrate(integer):
    """
    Turn an integer [integer] into a base [BASE] number
    in string representation
    """

    # we won't step into the while if integer is 0
    # so we just solve for that case here
    if integer == 0:
    return '0'

    string = ""
    while integer > 0:
    remainder = integer % BASE
    string = true_chr(remainder) + string
    integer /= BASE
    return string


    """
    Turn an integer [integer] into a base [BASE] number
    in string representation
    """

    # we won't step into the while if integer is 0
    # so we just solve for that case here
    if integer == 0:
    return '0'

    string = ""
    while integer > 0:
    remainder = integer % BASE
    string = true_chr(remainder) + string
    integer /= BASE
    return string

    if __name__ == '__main__':

    # not really unit tests just a rough check to see if anything is way off
    if sys.argv[1] == '-tests':
    passed_tests = True
    for i in xrange(0, 1000):
    passed_tests &= (i == saturate(dehydrate(i)))
    print passed_tests
    else:
    user_input = sys.argv[2]
    try:
    if sys.argv[1] == '-s':
    print saturate(user_input)
    elif sys.argv[1] == '-d':
    print dehydrate(int(user_input))
    else:
    print "I don't understand option %s" % sys.argv[1]
    except ValueError as e:
    print e

    if sys.argv[1] == '-tests':
    passed_tests = True
    for i in xrange(0, 1000):
    passed_tests &= (i == saturate(dehydrate(i)))
    print passed_tests
    else:
    user_input = sys.argv[2]
    try:
    if sys.argv[1] == '-s':
    print saturate(user_input)
    elif sys.argv[1] == '-d':
    print dehydrate(int(user_input))
    else:
    print "I don't understand option %s" % sys.argv[1]
    except ValueError as e:
    print e

  3. @bhelx bhelx revised this gist Jan 14, 2011. 1 changed file with 57 additions and 57 deletions.
    114 changes: 57 additions & 57 deletions base_62_converter.py
    Original file line number Diff line number Diff line change
    @@ -1,8 +1,8 @@
    #!/usr/bin/env python

    #
    # Converts any integer into a base [BASE] number. I have chosen 62
    # as it is meant to represent the integers using all the alphanumeric
    # Converts any integer into a base [BASE] number. I have chosen 62
    # as it is meant to represent the integers using all the alphanumeric
    # characters, [no special characters] = {0..9}, {A..Z}, {a..z}
    #
    # I plan on using this to shorten the representation of possibly long ids,
    @@ -21,83 +21,83 @@
    DIGIT_OFFSET = 48

    def true_ord(char):
    """
    Turns a digit [char] in character representation
    from the number system with base [BASE] into an integer.
    """
    if char.isdigit():
    return ord(char) - DIGIT_OFFSET
    elif char >= 'A' and char <= 'Z':
    return ord(char) - UPPERCASE_OFFSET
    elif char >= 'a' and char <= 'z':
    return ord(char) - LOWERCASE_OFFSET
    else:
    raise ValueError("%s is not a valid character" % char)
    """
    Turns a digit [char] in character representation
    from the number system with base [BASE] into an integer.
    """

    if char.isdigit():
    return ord(char) - DIGIT_OFFSET
    elif char >= 'A' and char <= 'Z':
    return ord(char) - UPPERCASE_OFFSET
    elif char >= 'a' and char <= 'z':
    return ord(char) - LOWERCASE_OFFSET
    else:
    raise ValueError("%s is not a valid character" % char)

    def true_chr(integer):
    """
    Turns an integer [integer] into digit in base [BASE]
    as a character representation.
    """
    if integer < 10:
    return chr(integer + DIGIT_OFFSET)
    """
    Turns an integer [integer] into digit in base [BASE]
    as a character representation.
    """
    if integer < 10:
    return chr(integer + DIGIT_OFFSET)
    elif integer >= 10 and integer <= 35:
    return chr(integer + UPPERCASE_OFFSET)
    return chr(integer + UPPERCASE_OFFSET)
    elif integer >= 36 and integer < 62:
    return chr(integer + LOWERCASE_OFFSET)
    return chr(integer + LOWERCASE_OFFSET)
    else:
    raise ValueError("%d is not a valid integer in the range of base %d" % (integer, BASE))
    raise ValueError("%d is not a valid integer in the range of base %d" % (integer, BASE))


    def saturate(key):
    """
    Turn the base [BASE] number [key] into an integer
    """
    int_sum = 0
    reversed_key = key[::-1]
    for idx, char in enumerate(reversed_key):
    int_sum += true_ord(char) * int(math.pow(BASE, idx))
    """
    Turn the base [BASE] number [key] into an integer
    """
    int_sum = 0
    reversed_key = key[::-1]
    for idx, char in enumerate(reversed_key):
    int_sum += true_ord(char) * int(math.pow(BASE, idx))
    return int_sum


    def dehydrate(integer):
    """
    Turn an integer [integer] into a base [BASE] number
    in string representation
    """
    # we won't step into the while if integer is 0
    # so we just solve for that case here
    if integer == 0:
    return '0'
    string = ""
    while integer > 0:
    remainder = integer % BASE
    """
    Turn an integer [integer] into a base [BASE] number
    in string representation
    """

    # we won't step into the while if integer is 0
    # so we just solve for that case here
    if integer == 0:
    return '0'

    string = ""
    while integer > 0:
    remainder = integer % BASE
    string = true_chr(remainder) + string
    integer /= BASE
    return string



    if __name__ == '__main__':

    # not really unit tests just a rough check to see if anything is way off
    if sys.argv[1] == '-tests':
    passed_tests = True
    if sys.argv[1] == '-tests':
    passed_tests = True
    for i in xrange(0, 1000):
    passed_tests &= (i == saturate(dehydrate(i)))
    passed_tests &= (i == saturate(dehydrate(i)))
    print passed_tests
    else:
    user_input = sys.argv[2]
    user_input = sys.argv[2]
    try:
    if sys.argv[1] == '-s':
    print saturate(user_input)
    elif sys.argv[1] == '-d':
    print dehydrate(int(user_input))
    else:
    print "I don't understand option %s" % sys.argv[1]
    if sys.argv[1] == '-s':
    print saturate(user_input)
    elif sys.argv[1] == '-d':
    print dehydrate(int(user_input))
    else:
    print "I don't understand option %s" % sys.argv[1]
    except ValueError as e:
    print e

    print e

  4. @bhelx bhelx revised this gist Jan 14, 2011. 1 changed file with 56 additions and 56 deletions.
    112 changes: 56 additions & 56 deletions base_62_converter.py
    Original file line number Diff line number Diff line change
    @@ -1,8 +1,8 @@
    #!/usr/bin/env python

    #
    # Converts any integer into a base [BASE] number. I have chosen 62
    # as it is meant to represent the integers using all the alphanumeric
    # Converts any integer into a base [BASE] number. I have chosen 62
    # as it is meant to represent the integers using all the alphanumeric
    # characters, [no special characters] = {0..9}, {A..Z}, {a..z}
    #
    # I plan on using this to shorten the representation of possibly long ids,
    @@ -21,83 +21,83 @@
    DIGIT_OFFSET = 48

    def true_ord(char):
    """
    Turns a digit [char] in character representation
    from the number system with base [BASE] into an integer.
    """

    if char.isdigit():
    return ord(char) - DIGIT_OFFSET
    elif char >= 'A' and char <= 'Z':
    return ord(char) - UPPERCASE_OFFSET
    elif char >= 'a' and char <= 'z':
    return ord(char) - LOWERCASE_OFFSET
    else:
    raise ValueError("%s is not a valid character" % char)
    """
    Turns a digit [char] in character representation
    from the number system with base [BASE] into an integer.
    """
    if char.isdigit():
    return ord(char) - DIGIT_OFFSET
    elif char >= 'A' and char <= 'Z':
    return ord(char) - UPPERCASE_OFFSET
    elif char >= 'a' and char <= 'z':
    return ord(char) - LOWERCASE_OFFSET
    else:
    raise ValueError("%s is not a valid character" % char)

    def true_chr(integer):
    """
    Turns an integer [integer] into digit in base [BASE]
    as a character representation.
    """
    if integer < 10:
    return chr(integer + DIGIT_OFFSET)
    """
    Turns an integer [integer] into digit in base [BASE]
    as a character representation.
    """
    if integer < 10:
    return chr(integer + DIGIT_OFFSET)
    elif integer >= 10 and integer <= 35:
    return chr(integer + UPPERCASE_OFFSET)
    return chr(integer + UPPERCASE_OFFSET)
    elif integer >= 36 and integer < 62:
    return chr(integer + LOWERCASE_OFFSET)
    return chr(integer + LOWERCASE_OFFSET)
    else:
    raise ValueError("%d is not a valid integer in the range of base %d" % (integer, BASE))
    raise ValueError("%d is not a valid integer in the range of base %d" % (integer, BASE))


    def saturate(key):
    """
    Turn the base [BASE] number [key] into an integer
    """
    int_sum = 0
    reversed_key = key[::-1]
    for idx, char in enumerate(reversed_key):
    int_sum += true_ord(char) * int(math.pow(BASE, idx))
    """
    Turn the base [BASE] number [key] into an integer
    """
    int_sum = 0
    reversed_key = key[::-1]
    for idx, char in enumerate(reversed_key):
    int_sum += true_ord(char) * int(math.pow(BASE, idx))
    return int_sum


    def dehydrate(integer):
    """
    Turn an integer [integer] into a base [BASE] number
    in string representation
    """

    # we won't step into the while if integer is 0
    # so we just solve for that case here
    if integer == 0:
    return '0'

    string = ""
    while integer > 0:
    remainder = integer % BASE
    """
    Turn an integer [integer] into a base [BASE] number
    in string representation
    """
    # we won't step into the while if integer is 0
    # so we just solve for that case here
    if integer == 0:
    return '0'
    string = ""
    while integer > 0:
    remainder = integer % BASE
    string = true_chr(remainder) + string
    integer /= BASE
    return string



    if __name__ == '__main__':

    # not really unit tests just a rough check to see if anything is way off
    if sys.argv[1] == '-tests':
    passed_tests = True
    if sys.argv[1] == '-tests':
    passed_tests = True
    for i in xrange(0, 1000):
    passed_tests &= (i == saturate(dehydrate(i)))
    passed_tests &= (i == saturate(dehydrate(i)))
    print passed_tests
    else:
    user_input = sys.argv[2]
    user_input = sys.argv[2]
    try:
    if sys.argv[1] == '-s':
    print saturate(user_input)
    elif sys.argv[1] == '-d':
    print dehydrate(int(user_input))
    else:
    print "I don't understand option %s" % sys.argv[1]
    if sys.argv[1] == '-s':
    print saturate(user_input)
    elif sys.argv[1] == '-d':
    print dehydrate(int(user_input))
    else:
    print "I don't understand option %s" % sys.argv[1]
    except ValueError as e:
    print e
    print e

  5. @bhelx bhelx revised this gist Jan 13, 2011. 1 changed file with 21 additions and 26 deletions.
    47 changes: 21 additions & 26 deletions base_62_converter.py
    Original file line number Diff line number Diff line change
    @@ -57,7 +57,7 @@ def saturate(key):
    int_sum = 0
    reversed_key = key[::-1]
    for idx, char in enumerate(reversed_key):
    int_sum += true_ord(char) * int(math.pow(BASE, idx))
    int_sum += true_ord(char) * int(math.pow(BASE, idx))
    return int_sum


    @@ -67,42 +67,37 @@ def dehydrate(integer):
    in string representation
    """

    # we won't step into the while if integer is 0
    # so we just solve for that case here
    # we won't step into the while if integer is 0
    # so we just solve for that case here
    if integer == 0:
    return '0'
    return '0'

    string = ""
    while integer > 0:
    remainder = integer % BASE
    string = true_chr(remainder) + string
    integer /= BASE
    return string
    string = ""
    while integer > 0:
    remainder = integer % BASE
    string = true_chr(remainder) + string
    integer /= BASE
    return string



    if __name__ == '__main__':
    # not really unit tests just a rough check to see if anything is way off

    # not really unit tests just a rough check to see if anything is way off
    if sys.argv[1] == '-tests':
    passed_tests = True
    for i in xrange(0, 1000):
    passed_tests &= i == saturate(dehydrate(i))
    print passed_tests
    passed_tests &= (i == saturate(dehydrate(i)))
    print passed_tests
    else:
    user_input = sys.argv[2]

    try:
    if sys.argv[1] == '-s':
    result = saturate(user_input)
    print result
    elif sys.argv[1] == '-d':
    result = dehydrate(int(user_input))
    print result
    else:
    print "I don't understand option %s" % sys.argv[1]

    try:
    if sys.argv[1] == '-s':
    print saturate(user_input)
    elif sys.argv[1] == '-d':
    print dehydrate(int(user_input))
    else:
    print "I don't understand option %s" % sys.argv[1]
    except ValueError as e:
    print e


  6. @bhelx bhelx revised this gist Jan 13, 2011. 1 changed file with 10 additions and 15 deletions.
    25 changes: 10 additions & 15 deletions base_62_converter.py
    Original file line number Diff line number Diff line change
    @@ -92,22 +92,17 @@ def dehydrate(integer):
    else:
    user_input = sys.argv[2]

    if sys.argv[1] == '-s':
    try:
    result = saturate(user_input)
    print result
    except ValueError as e:
    print e

    elif sys.argv[1] == '-d':
    try:
    try:
    if sys.argv[1] == '-s':
    result = saturate(user_input)
    print result
    elif sys.argv[1] == '-d':
    result = dehydrate(int(user_input))
    print result
    except ValueError as e:
    print e

    else:
    print "I don't understand option %s" % sys.argv[1]

    else:
    print "I don't understand option %s" % sys.argv[1]

    except ValueError as e:
    print e


  7. @bhelx bhelx revised this gist Jan 13, 2011. 1 changed file with 4 additions and 1 deletion.
    5 changes: 4 additions & 1 deletion base_62_converter.py
    Original file line number Diff line number Diff line change
    @@ -66,6 +66,9 @@ def dehydrate(integer):
    Turn an integer [integer] into a base [BASE] number
    in string representation
    """

    # we won't step into the while if integer is 0
    # so we just solve for that case here
    if integer == 0:
    return '0'

    @@ -80,7 +83,7 @@ def dehydrate(integer):

    if __name__ == '__main__':


    # not really unit tests just a rough check to see if anything is way off
    if sys.argv[1] == '-tests':
    passed_tests = True
    for i in xrange(0, 1000):
  8. @bhelx bhelx revised this gist Jan 13, 2011. 1 changed file with 9 additions and 9 deletions.
    18 changes: 9 additions & 9 deletions base_62_converter.py
    Original file line number Diff line number Diff line change
    @@ -67,15 +67,15 @@ def dehydrate(integer):
    in string representation
    """
    if integer == 0:
    return '0'

    digit = integer
    string = ""
    while digit > 0:
    remainder = digit % BASE
    string = true_chr(remainder) + string
    digit /= BASE
    return string
    return '0'

    string = ""
    while integer > 0:
    remainder = integer % BASE
    string = true_chr(remainder) + string
    integer /= BASE
    return string



    if __name__ == '__main__':
  9. @bhelx bhelx revised this gist Jan 13, 2011. 1 changed file with 19 additions and 50 deletions.
    69 changes: 19 additions & 50 deletions base_62_converter.py
    Original file line number Diff line number Diff line change
    @@ -11,7 +11,6 @@
    # saturate() takes the base 62 key, as a string, and turns it back into an integer
    # dehydrate() takes an integer and turns it into the base 62 string
    #

    import math
    import sys

    @@ -55,12 +54,10 @@ def saturate(key):
    """
    Turn the base [BASE] number [key] into an integer
    """
    idx = 0
    int_sum = 0
    reversed_key = key[::-1]
    for char in reversed_key:
    for idx, char in enumerate(reversed_key):
    int_sum += true_ord(char) * int(math.pow(BASE, idx))
    idx += 1
    return int_sum


    @@ -69,7 +66,6 @@ def dehydrate(integer):
    Turn an integer [integer] into a base [BASE] number
    in string representation
    """
    # the loop below doesn't work for 0 so let's just check here
    if integer == 0:
    return '0'

    @@ -83,59 +79,32 @@ def dehydrate(integer):


    if __name__ == '__main__':


    # slightly amusing tests
    # could use more tests
    if sys.argv[1] == '-tests':
    passed_tests = True
    for i in xrange(0, 1000):
    passed_tests &= i == saturate(dehydrate(i))
    print passed_tests

    user_input = sys.argv[2]

    if sys.argv[1] == '-s':
    try:
    result = saturate(user_input)
    print result
    except ValueError as e:
    print e

    elif sys.argv[1] == '-d':
    try:
    result = dehydrate(int(user_input))
    print result
    except ValueError as e:
    print e

    else:
    print "I don't understand option %s" % sys.argv[1]



    if sys.argv[1] == '-tests':
    passed_tests = True
    for i in xrange(0, 1000):
    passed_tests &= i == saturate(dehydrate(i))
    print passed_tests

    user_input = sys.argv[2]
    user_input = sys.argv[2]

    if sys.argv[1] == '-s':
    try:
    result = saturate(user_input)
    print result
    except ValueError as e:
    print e

    elif sys.argv[1] == '-d':
    try:
    result = dehydrate(int(user_input))
    print result
    except ValueError as e:
    print e
    if sys.argv[1] == '-s':
    try:
    result = saturate(user_input)
    print result
    except ValueError as e:
    print e

    elif sys.argv[1] == '-d':
    try:
    result = dehydrate(int(user_input))
    print result
    except ValueError as e:
    print e

    else:
    print "I don't understand option %s" % sys.argv[1]
    else:
    print "I don't understand option %s" % sys.argv[1]



  10. @bhelx bhelx revised this gist Jan 13, 2011. 1 changed file with 0 additions and 84 deletions.
    84 changes: 0 additions & 84 deletions base_62_converter.py
    Original file line number Diff line number Diff line change
    @@ -64,90 +64,6 @@ def saturate(key):
    return int_sum


    def dehydrate(integer):
    """
    Turn an integer [integer] into a base [BASE] number
    in string representation
    """
    if integer == 0:
    return '0'

    digit = integer
    string = ""
    while digit > 0:
    remainder = digit % BASE
    string = true_chr(remainder) + string
    digit /= BASE
    return string


    if __name__ == '__main__':
    #!/usr/bin/env python

    #
    # Converts any integer into a base [BASE] number. I have chosen 62
    # as it is meant to represent the integers using all the alphanumeric
    # characters, [no special characters] = {0..9}, {A..Z}, {a..z}
    #
    # I plan on using this to shorten the representation of possibly long ids,
    # a la url shortenters
    #
    # saturate() takes the base 62 key, as a string, and turns it back into an integer
    # dehydrate() takes an integer and turns it into the base 62 string
    #

    import math
    import sys

    BASE = 62

    UPPERCASE_OFFSET = 55
    LOWERCASE_OFFSET = 61
    DIGIT_OFFSET = 48

    def true_ord(char):
    """
    Turns a digit [char] in character representation
    from the number system with base [BASE] into an integer.
    """

    if char.isdigit():
    return ord(char) - DIGIT_OFFSET
    elif char >= 'A' and char <= 'Z':
    return ord(char) - UPPERCASE_OFFSET
    elif char >= 'a' and char <= 'z':
    return ord(char) - LOWERCASE_OFFSET
    else:
    raise ValueError("%s is not a valid character" % char)

    def true_chr(integer):
    """
    Turns an integer [integer] into digit in base [BASE]
    as a character representation.
    """
    if integer < 10:
    return chr(integer + DIGIT_OFFSET)
    elif integer >= 10 and integer <= 35:
    return chr(integer + UPPERCASE_OFFSET)
    elif integer >= 36 and integer < 62:
    return chr(integer + LOWERCASE_OFFSET)
    else:
    raise ValueError("%d is not a valid integer in the range of base %d" % (integer, BASE))


    def saturate(key):
    """
    Turn the base [BASE] number [key] into an integer
    """
    idx = 0
    int_sum = 0
    reversed_key = key[::-1]
    for char in reversed_key:
    int_sum += true_ord(char) * int(math.pow(BASE, idx))
    idx += 1
    return int_sum


    def dehydrate(integer):
    """
    Turn an integer [integer] into a base [BASE] number
  11. @bhelx bhelx revised this gist Jan 13, 2011. 1 changed file with 115 additions and 1 deletion.
    116 changes: 115 additions & 1 deletion base_62_converter.py
    Original file line number Diff line number Diff line change
    @@ -82,7 +82,121 @@ def dehydrate(integer):


    if __name__ == '__main__':

    #!/usr/bin/env python

    #
    # Converts any integer into a base [BASE] number. I have chosen 62
    # as it is meant to represent the integers using all the alphanumeric
    # characters, [no special characters] = {0..9}, {A..Z}, {a..z}
    #
    # I plan on using this to shorten the representation of possibly long ids,
    # a la url shortenters
    #
    # saturate() takes the base 62 key, as a string, and turns it back into an integer
    # dehydrate() takes an integer and turns it into the base 62 string
    #

    import math
    import sys

    BASE = 62

    UPPERCASE_OFFSET = 55
    LOWERCASE_OFFSET = 61
    DIGIT_OFFSET = 48

    def true_ord(char):
    """
    Turns a digit [char] in character representation
    from the number system with base [BASE] into an integer.
    """

    if char.isdigit():
    return ord(char) - DIGIT_OFFSET
    elif char >= 'A' and char <= 'Z':
    return ord(char) - UPPERCASE_OFFSET
    elif char >= 'a' and char <= 'z':
    return ord(char) - LOWERCASE_OFFSET
    else:
    raise ValueError("%s is not a valid character" % char)

    def true_chr(integer):
    """
    Turns an integer [integer] into digit in base [BASE]
    as a character representation.
    """
    if integer < 10:
    return chr(integer + DIGIT_OFFSET)
    elif integer >= 10 and integer <= 35:
    return chr(integer + UPPERCASE_OFFSET)
    elif integer >= 36 and integer < 62:
    return chr(integer + LOWERCASE_OFFSET)
    else:
    raise ValueError("%d is not a valid integer in the range of base %d" % (integer, BASE))


    def saturate(key):
    """
    Turn the base [BASE] number [key] into an integer
    """
    idx = 0
    int_sum = 0
    reversed_key = key[::-1]
    for char in reversed_key:
    int_sum += true_ord(char) * int(math.pow(BASE, idx))
    idx += 1
    return int_sum


    def dehydrate(integer):
    """
    Turn an integer [integer] into a base [BASE] number
    in string representation
    """
    # the loop below doesn't work for 0 so let's just check here
    if integer == 0:
    return '0'

    digit = integer
    string = ""
    while digit > 0:
    remainder = digit % BASE
    string = true_chr(remainder) + string
    digit /= BASE
    return string


    if __name__ == '__main__':

    # slightly amusing tests
    # could use more tests
    if sys.argv[1] == '-tests':
    passed_tests = True
    for i in xrange(0, 1000):
    passed_tests &= i == saturate(dehydrate(i))
    print passed_tests

    user_input = sys.argv[2]

    if sys.argv[1] == '-s':
    try:
    result = saturate(user_input)
    print result
    except ValueError as e:
    print e

    elif sys.argv[1] == '-d':
    try:
    result = dehydrate(int(user_input))
    print result
    except ValueError as e:
    print e

    else:
    print "I don't understand option %s" % sys.argv[1]



    if sys.argv[1] == '-tests':
    passed_tests = True
    for i in xrange(0, 1000):
  12. @bhelx bhelx created this gist Jan 13, 2011.
    111 changes: 111 additions & 0 deletions base_62_converter.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,111 @@
    #!/usr/bin/env python

    #
    # Converts any integer into a base [BASE] number. I have chosen 62
    # as it is meant to represent the integers using all the alphanumeric
    # characters, [no special characters] = {0..9}, {A..Z}, {a..z}
    #
    # I plan on using this to shorten the representation of possibly long ids,
    # a la url shortenters
    #
    # saturate() takes the base 62 key, as a string, and turns it back into an integer
    # dehydrate() takes an integer and turns it into the base 62 string
    #

    import math
    import sys

    BASE = 62

    UPPERCASE_OFFSET = 55
    LOWERCASE_OFFSET = 61
    DIGIT_OFFSET = 48

    def true_ord(char):
    """
    Turns a digit [char] in character representation
    from the number system with base [BASE] into an integer.
    """

    if char.isdigit():
    return ord(char) - DIGIT_OFFSET
    elif char >= 'A' and char <= 'Z':
    return ord(char) - UPPERCASE_OFFSET
    elif char >= 'a' and char <= 'z':
    return ord(char) - LOWERCASE_OFFSET
    else:
    raise ValueError("%s is not a valid character" % char)

    def true_chr(integer):
    """
    Turns an integer [integer] into digit in base [BASE]
    as a character representation.
    """
    if integer < 10:
    return chr(integer + DIGIT_OFFSET)
    elif integer >= 10 and integer <= 35:
    return chr(integer + UPPERCASE_OFFSET)
    elif integer >= 36 and integer < 62:
    return chr(integer + LOWERCASE_OFFSET)
    else:
    raise ValueError("%d is not a valid integer in the range of base %d" % (integer, BASE))


    def saturate(key):
    """
    Turn the base [BASE] number [key] into an integer
    """
    idx = 0
    int_sum = 0
    reversed_key = key[::-1]
    for char in reversed_key:
    int_sum += true_ord(char) * int(math.pow(BASE, idx))
    idx += 1
    return int_sum


    def dehydrate(integer):
    """
    Turn an integer [integer] into a base [BASE] number
    in string representation
    """
    if integer == 0:
    return '0'

    digit = integer
    string = ""
    while digit > 0:
    remainder = digit % BASE
    string = true_chr(remainder) + string
    digit /= BASE
    return string


    if __name__ == '__main__':

    if sys.argv[1] == '-tests':
    passed_tests = True
    for i in xrange(0, 1000):
    passed_tests &= i == saturate(dehydrate(i))
    print passed_tests

    user_input = sys.argv[2]

    if sys.argv[1] == '-s':
    try:
    result = saturate(user_input)
    print result
    except ValueError as e:
    print e

    elif sys.argv[1] == '-d':
    try:
    result = dehydrate(int(user_input))
    print result
    except ValueError as e:
    print e

    else:
    print "I don't understand option %s" % sys.argv[1]