rubymathnumerical

Generate letters to represent number using ruby?


I would like to generate a sequence of letters i.e. "A", "DE" "GJE", etc. that correspond to a number. The first 26 are pretty easy so 3 returns "C", 26 returns "Z", and 27 would return "AA", 28 "AB", and so on.

The thing I can't quite figure out is how to do this so it will handle any number passed in. So if I pass in 4123 I should get back some combination of 3 letters since (26 * 26 * 26) allows for up to +17,000 combinations.

Any suggestions?


Solution

  • class Numeric
      Alph = ("a".."z").to_a
      def alph
        s, q = "", self
        (q, r = (q - 1).divmod(26)); s.prepend(Alph[r]) until q.zero?
        s
      end
    end
    
    3.alph
    # => "c"
    26.alph
    # => "z"
    27.alph
    # => "aa"
    4123.alph
    # => "fbo"