MapOfAlphaToNumber = 1.upto(26).inject([{}, 'A']) { |(hash, alpha), number|
[hash.merge(alpha => number), alpha.succ]
}[0]
def parse_excel_row_id(string)
string.split(//).inject(0) { |row_num, alpha|
raise 'Invalid Row ID' unless MapOfAlphaToNumber.has_key?(alpha)
row_num * 26 + MapOfAlphaToNumber[alpha]
}
end
printf "'A' --> %d", parse_excel_row_id('A')
puts
printf "'AA' --> %d", parse_excel_row_id('AA')
puts
printf "'ZZZ' --> %d", parse_excel_row_id('ZZZ')
puts
TWFwT2ZBbHBoYVRvTnVtYmVyID0gMS51cHRvKDI2KS5pbmplY3QoW3t9LCAnQSddKSB7IHwoaGFzaCwgYWxwaGEpLCBudW1iZXJ8CglbaGFzaC5tZXJnZShhbHBoYSA9PiBudW1iZXIpLCBhbHBoYS5zdWNjXQp9WzBdCgoKZGVmIHBhcnNlX2V4Y2VsX3Jvd19pZChzdHJpbmcpCglzdHJpbmcuc3BsaXQoLy8pLmluamVjdCgwKSB7IHxyb3dfbnVtLCBhbHBoYXwKCQlyYWlzZSAnSW52YWxpZCBSb3cgSUQnIHVubGVzcyBNYXBPZkFscGhhVG9OdW1iZXIuaGFzX2tleT8oYWxwaGEpCgoJCXJvd19udW0gKiAyNiArIE1hcE9mQWxwaGFUb051bWJlclthbHBoYV0KCX0KZW5kCgoKcHJpbnRmICInQScgICAtLT4gJWQiLCBwYXJzZV9leGNlbF9yb3dfaWQoJ0EnKQpwdXRzCnByaW50ZiAiJ0FBJyAgLS0+ICVkIiwgcGFyc2VfZXhjZWxfcm93X2lkKCdBQScpCnB1dHMKcHJpbnRmICInWlpaJyAtLT4gJWQiLCBwYXJzZV9leGNlbF9yb3dfaWQoJ1paWicpCnB1dHMK