アスキーコードから文字Xがアルファベットの24番目であることを割り出す。D]の長さが2であることを割り出す。16224を保存する。D]を文字Fと配列[D]に分解する。アスキーコードから文字Fがアルファベットの6番目をであること割り出す。配列[D]の長さが1であることを割り出す。(再帰3)次に配列[D]の処理に移る。配列[D]を文字Dと配列[]に分解する。アスキーコードから文字Dがアルファベットの4番目をであること割り出す。配列[]の長さが0であることを割り出す。(再帰4)次に配列[]の処理に移る。配列の長さが0なので、これまでに計算した値の合計を求める。1638416384をXFDの列番号として呼び出し元に返す。1354(AZB)の場合アルファベットは全部で26文字であることを定数で表現する。(再帰1)1354を26で割った商とあまりを求める。2アスキーコードからあまりの2をアルファベットのBに変換する。(再帰2)商の52を26で割った商とあまりを求める。0アスキーコードからあまり0をアルファベットに変換するとAより小さい@になってしまう。そこであまりが0になる場合だけ、商を一つ減らし、あまりを26と考える。26アスキーコードからあまりの26をアルファベットのZに変換する。(再帰3)商の1を26で割った商とあまりを求める。1アスキーコードからあまりの1をアルファベットのAに変換する。(再帰4)商が0になったので、これまでに割り出したアルファベットを連結する。AZBAZBを1354の列名として呼び出し元に返す。文章で書くとかなりまどろっこしいですね。コードで見る方が早いと思います。それでは各言語で書いたプログラムを見ていきましょう。RubyまずはRubyで書いた場合。シンプルで読みやすいと思います。endendPerl次にPerlで書いた場合です。だいたいRubyと同じように書けますが、Rubyよりもちょっと冗長な感じがします。}}1;C#次にC#で書いた場合です。2.0です!2世代前のバージョンなのでちょっと古いです。#endregion}F#最後にF#で書いた場です合。短くなりますが、F#の知識がないと何がなんだか分からないかもしれません。実際に僕がプログラムを書いた順番はF#、C#、Perl、Rubyの順です。F#で最初にロジックを考えたり、プログラムを書いたりしたので、他の言語からするとちょっとトリッキーなところがあるかもしれません。F#だからトリッキー、というわけではありませんが、当時はF#の機能をできるかぎり取り込んでコードを短くしようと目論んでいたので、小難しいプログラムになったかもしれません。他の言語はそのF#のロジックに引きずられているので、「何もそんな書き方にしなくても」と思われるようなところがあるかもしれません。簡潔さと読みやすさのバランスが一番取れているのはRubyだと思いました。個人的な好みかもしれませんが、書いていて楽しいです。F#は関数型言語の機能を活用するとかなり短く書けるので、ある意味非常に面白いのですが、やりすぎると第三者にはさっぱり分からないプログラムができあがる危険性があるかもしれません。自己満足なプログラムには要注意です。(僕のプログラムのように・・・)簡潔さや読みやすさの観点からすると、Perlはちょっと中途半端な印象です。"@_"みたいな記号で引数を受け取るのもPerlに不慣れな人から見ると奇妙で、僕のように慣れていない人からするとちょっと書きにくいです。PerlとしてのRubyを使えばいいんじゃないかと思います。C#はこの程度の小さなプログラムでは構文の冗長さの方が強く目立ってしまい、ある意味かわいそうでした。コンパイル型言語はもう少し大規模なプログラムを書く時に、変数やメソッドにしょうもないスペルミスとかが混入していないことをコンパイルで確認できる、みたいなところがメリットになるんじゃないかと思います。いうわけで、個人的には書きやすくて読みやすいRubyと、黒魔術的なコードが書けて面白いF#が気に入りました。仕事で使っているのはC#とPerl、というのが何とも皮肉な現実なんですけどね・・・。あわせて読みたいExcel列名変換問題の元ネタはこちらのエントリです。try動的型付け言語(スクリプト言語)と静的型付け言語(コンパイル言語)を自分なり比較してみたエントリもあります。tryこのエントリで紹介したF#のプログラムを詳しく掘り下げて解説してみました。tryF#の本も書いている、いげ太さんの解答例。僕なんかよりもずっとエレガントなF#なプログラムです。先月、CodeIQにビンゴカード作成問題を出題しました。こちらもあわせてどうぞ。はてなブログPro株式会社ソニックガーデンで働くRubyプログラマ。2017年11月に「プロを目指す人のためのRuby入門」を出版。blog)はてなブログをはじめよう!JunichiItoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。