アルファベットの繰り上がり

30分プログラム、その149。アルファベットの繰り上がり

Excelの桁表示は 1桁目はA、2桁目はB、以下C、D、 E…とすすみ、Zの次はAA AB AC…と続きます。AZの次はBAです。
この表記法で1から100までを表示してください。出力結果は下記のサンプルの「...」の部分に適切な文字列を埋めたものになります。
A, B, C, ... CU, CV

まあ、これだけなら

puts ('A'..'ZZ').to_a[0,100]

で十分なんだけど、がんばって任意の整数からアルファベットに変換できるようにしてみよう。

使い方

$ ruby alpha.rb
A,B,C,....,CU,CV

ソースコード

思いついたので、ちょっと変ったmapを定義してみた。まあ、問題の本質とは関係ない。

#! /opt/local/bin/ruby -w
# -*- mode:ruby; coding:utf-8 -*-
#
# alpha.rb -
#
# Copyright(C) 2007 by mzp
# Author: MIZUNO Hiroki <hiroki1124@gmail.com> 
# http://mzp.sakura.ne.jp/
#
# Timestamp: 2007/10/04 09:02:05
#
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Ruby itself.
class Integer
  Alpha = [*'A'..'Z']
  def to_alpha
    if self > Alpha.size then
      (self/Alpha.size).to_alpha +
        (self % Alpha.size).to_alpha
    else
      Alpha[self-1]
    end
  end
end

module Enumerable
  alias_method :_map_,:map

  def map(sym=nil,&f)
    raise 'not specify both symbol and proc' if f and sym
    proc = f || lambda{|n| n.send sym }
    self._map_(&proc)
  end
end

puts((1..100).map(:to_alpha).join(','))