12

12

[Ruby] Excelの桁指定子文字列を生成するプログラム

2010.12.12(22:53)

Excelの桁指定子文字列のような、A,B,C,...Z,AA,AB,AC....という文字列を生成するプログラムを作ってください。

たとえば、文字が3種類(A,B,C) の場合

0.upto(100) { |n|
print "#{n} #{column_str(n,3)}\n"
}

を実行すると、

0 A
1 B
2 C
3 AA
4 AB
5 AC
6 BA
7 BB
8 BC
9 CA
10 CB
11 CC
12 AAA
13 AAB
14 AAC
15 ABA
16 ABB
17 ABC
18 ACA
19 ACB
20 ACC
21 BAA
22 BAB
23 BAC
...

が得られるような関数を作ってください。ぜひ解答例を見ずに解いてください。





ヒント:文字が3種類の場合、文字列が1桁になるのは3種類、2桁になるのは9種類、3桁になるのは27種類です。





解答例です。

def column_str(n, base=('Z'[0] - 'A'[0] + 1))
divs = 1
array = []
begin
array << (n / divs % base)
divs *= base
n -= divs
end until n < 0
array.reverse.map! { |n| (n + 'A'[0]).chr }.join
end


プロフィール

島敏博

Shima Toshihiro 島敏博
信州アルプスハイランド在住。HaskellとElixirが好き。組み込みソフトウェアアーキテクト、C++プログラマ、山歩き、美術館巡り、和食食べ歩き、日本赤十字社救急法指導員、インデックス投資、クラシック音楽、SESSAME会員、状態マシン設計、モデル駆動開発、ソフトウェアプロダクトライン、Rubyist、実践ビジネス英語

■ ツイッター
http://twitter.com/saltheads
■ Facebook
http://www.facebook.com/saltheads
■ Qiita
http://qiita.com/saltheads

印刷する場合は、ブラウザの印刷メニューではなく、このページの上から3cmくらいの青いところにある、「印刷」を押してみてください。少しうまく印刷できます。まだ完全ではないのですが、これで勘弁してください。


カテゴリ
最新記事
月別アーカイブ
最新コメント
検索フォーム
リンク
sessame
RSSリンクの表示