アルファベットの繰り上がり
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(','))