Programming.org.za

  1. Blog
  2. Competition
  3. 2009
  4. 1c
LINE_BREAK = '\n'

file = open('A-large-practice.in')
lines = list(file)

CASE_COUNT = int(lines.pop(0))

output_file = open('A-large-practice.out', 'w')

m = {
    0: ')',
    1: '!',
    2: '@',
    3: '#',
    4: '$',
    5: '%',
    6: '^',
    7: '&',
    8: '*',
    9: '(',
    'a': '~',
    'b': '`',
    'c': '-',
    'd': '_',
    'e': '=',
    'f': '+',
    'g': '\'',
    'h': '|',
    'i': '[',
    'j': '{',
    'k': ']',
    'l': '}',
    'm': ';',
    'n': ':',
    'o': '\'',
    'p': '"',
    'q': ',',
    'r': '<',
    's': '.',
    't': '>',
    'u': '/',
    'v': '?',
}

n = {
    0: 1,
    1: 0,
    2: 2,
    3: 3,
    4: 4,
    5: 5,
    6: 6,
    7: 7,
    8: 8,
    9: 9,
    10: 'a',
    11: 'b',
    12: 'c',
    13: 'd',
    14: 'e',
    15: 'f',
    16: 'g',
    17: 'h',
    18: 'i',
    19: 'j',
    20: 'k',
    21: 'l',
    22: 'm',
    23: 'n',
    24: 'o',
    25: 'p',
    26: 'q',
    27: 'r',
    28: 's',
    29: 't',
    30: 'u',
    31: 'v',
}

for z in range(0, CASE_COUNT):
    input = lines.pop(0).strip(LINE_BREAK)

    input_list = list(input)
    unique = set(input_list)
    unique_len = len(unique)
    unique_list = []

    i = 1
    val = -1
    l = []
    #print unique_len
    for x in range(0, unique_len):
        l.append(n[x])

    for k, v in enumerate(input_list):
        for kk, vv in enumerate(unique):
            if v == vv:
                unique_list.append(vv)
                unique.remove(vv)
                break
    # do conversion
    c = input
    #print l
    for k, v in enumerate(l):
        c = c.replace(unique_list[k], m[v])
    #print c
    for k, v in enumerate(m):
        print 'replace: ' + m[v] + ' with ' + str(v)
        c = c.replace(m[v], str(v))

    #print c

    j = 2

    while j <= 36:
        # go through all the bases
        try:
            new = int(c, j)
            if new < val or val == -1:
                val = new
        except:
            pass

        j += 1

    line_break = LINE_BREAK

    if (z + 1) == CASE_COUNT:
        line_break = ''

    output_file.write('Case #' + str(z + 1) + ': ' + str(val) + line_break)