· 8 years ago · Jan 23, 2018, 04:28 PM
1#!/usr/bin/env python
2"""(c) gorlum0 [at] gmail.com"""
3import re
4import string
5from math import log
6from sys import stdin
7
8def int2base(x, base, digits = '0123456789abcdefghijklmnopqrstuvwxyz'):
9 '''inverse of int(x, base), 2 <= base <= 36'''
10 if x < 0:
11 sign = -1
12 elif x==0:
13 return '0'
14 else:
15 sign = 1
16
17 x *= sign
18 number = []
19 while x:
20 number.append(digits[x % base])
21 x /= base
22 if sign < 0:
23 number.append('-')
24 number.reverse()
25 return ''.join(number)
26
27def sum_geom(b1, q, n):
28 return b1 * (q**n - 1) // (q - 1)
29
30def main():
31 trantab1 = string.maketrans(
32 (string.digits + string.lowercase)[:26],
33 string.uppercase)
34 trantab2 = string.maketrans(
35 string.uppercase,
36 (string.digits + string.lowercase)[:26])
37
38 t = int(stdin.readline())
39 for line in stdin:
40 # exclusive
41 m1 = re.match(r'\s*R(\d+)C(\d+)\s*$', line)
42 m2 = re.match(r'\s*([A-Z]+)([0-9]+)\s*$', line)
43
44 if m1:
45 r, c = m1.groups()
46 c = int(c) - 1
47 k = int(log(25*c + 1, 26))
48 c -= sum_geom(1, 26, k) - 1
49
50 c = int2base(c, 26)
51 c = c.translate(trantab1)
52
53 print '%s%s' % (c.rjust(k, 'A'), r)
54
55 if m2:
56 c, r = m2.groups()
57 c = c.translate(trantab2)
58 c = int(c, 26) + 1 + sum_geom(1, 26, len(c)) - 1
59
60 print 'R%sC%d' % (r, c)
61
62if __name__ == '__main__':
63 main()