Exercismとは
Exercismは、無料でできるプログラミング練習問題サイトです。 言語ごとに100種類近い練習問題が用意されており、ちょっとした文法の練習に最適です。 (文法だけ読んでると退屈なので、これで遊んで覚えます)
Exercismでの問題を解く流れは次の通りです。
- 練習問題をコピー
- 自分で解く
- 提出
- 他の人の回答が見られたり、レビューを受けられたりする
今回Rubyが久々ということもあって、人の回答を見る中で「そういうのもあるんか!」と思ったものが多々ありました。そこで、個人的に気になったものを随時この記事にまとめていこうと思います。
学んだこと
Integer#digits
登場回:Armstrong Numbers
base を基数として self を位取り記数法で表記した数値を配列で返します。 base を指定しない場合の基数は 10 です。class Integer (Ruby 3.0.0 リファレンスマニュアル)
ナルシシスト数の導出のために、与えられた数値を桁ごとに区切る必要があったのですが、自分の回答では、以下のように一旦文字列に置換してから分割処理を実施していました。
Integer#digits
であれば文字列を介さずに、分割することが可能でした。ただし、1のくらいから順に格納されるので、中身は同じですが、順番が異なる配列が完成することに注意です。
e
冪乗の登場回:Gigasecond
これはRubyというよりも数学的なところですが、10の冪乗はe
を使っても表せるようです。
浮動小数点になることに注意が必要ですね。
参考
Rubyで等比数列
登場回:Grain
Rubyで等比数列を作る場合、以下のように記述できるようです。
参考:【Ruby】等差数列・等比数列を作成する1番シンプルな処理 - Qiita
new(size) {|index| … } -> Array
長さ size の配列を生成し、各要素のインデックスを引数としてブロックを実行し、各要素の値をブロックの評価結果に設定します。
ブロックは要素毎に実行されるので、全要素をあるオブジェクトの複製にすることができます。
Array.new (Ruby 3.0.0 リファレンスマニュアル)
余談:このGrainという問題は、「Wheat and chessboard problem」といって、歴史ある数学的問題のようです。