JSFiddle - React, Tailwind, and code Playground

by Timar

JavaScript

const charMap = {
    A: 1,
    B: 2,
    C: 3,
    D: 4,
    E: 5,
    F: 6,
    G: 7,
    H: 8,
    I: 9,
    J: "A",
    K: "B",
    L: "C",
    M: "D",
    N: "E",
    O: "F",
    P: "G",
    Q: "H",
    R: "I",
    S: "J",
    T: "K",
    U: "L",
    V: "M",
    W: "N",
    X: "O",
    Y: "P",
    Z: "Q",
  };

  
  function columnToNumber(column){
    const isDoubleDigit = column.length > 1
    const map =  charMap
    const base25 = column.split('').map(char=> map[char]).join('')
    //console.log(column,'base25:',base25)
    const columnNumber = parseInt(base25, 26)
    // on double digit columns reduce by 1
    return  columnNumber -1
  }
  

  function test(column, expected){
    console.log(`Column:${column} = ${columnToNumber(column) == expected ? '✅' : '❌'}, result: ${columnToNumber(column)}, expected:${expected}`)
  }
  test('A', 0)
  test('B', 1)
  test('C', 2)
  test('J', 9)
  test('X', 23)
  test('Y', 24)
  test('Z', 25)
  test('AA', 26)
  test('AB', 27)
  test('FF', 161)
  test('YY', 674)
  test('ZZ', 701)
  test('ZA', 676)

//   console.log(columnToNumber('YZ'), 'expecting:', 675)


// AA => 11
// AAA => 111
// Z => 10
// ZZ => 110
// AZ = > 20

// console.log(parseInt('P', 26), 'p', 25) // Y
// console.log(parseInt('10', 26), 'p', 26) // Z
// console.log(parseInt('11', 26), "AA",27) // AA
// console.log(parseInt('110', 26), 'ZZ', 702) // ZZ
// console.log(parseInt('20', 26), "AZ",52) // AA
// console.log(parseInt('30', 26), "BZ",78) // AA
// console.log(parseInt('B0', 26), "JZ",286) // AA
// console.log(parseInt('AB0', 26), "JZ",962) // AA