ikuma-t.

登壇 登壇 検索

Exercism(Ruby)で学んだこと

Exercismとは

Exercismは、無料でできるプログラミング練習問題サイトです。 言語ごとに100種類近い練習問題が用意されており、ちょっとした文法の練習に最適です。 (文法だけ読んでると退屈なので、これで遊んで覚えます)

Exercismでの問題を解く流れは次の通りです。

  1. 練習問題をコピー
  2. 自分で解く
  3. 提出
  4. 他の人の回答が見られたり、レビューを受けられたりする

今回Rubyが久々ということもあって、人の回答を見る中で「そういうのもあるんか!」と思ったものが多々ありました。そこで、個人的に気になったものを随時この記事にまとめていこうと思います。

学んだこと

Integer#digits

登場回:Armstrong Numbers

base を基数として self を位取り記数法で表記した数値を配列で返します。 base を指定しない場合の基数は 10 です。class Integer (Ruby 3.0.0 リファレンスマニュアル)

ナルシシスト数の導出のために、与えられた数値を桁ごとに区切る必要があったのですが、自分の回答では、以下のように一旦文字列に置換してから分割処理を実施していました。

irb
153.to_s.chars
#=>["1", "5", "3"]

Integer#digitsであれば文字列を介さずに、分割することが可能でした。ただし、1のくらいから順に格納されるので、中身は同じですが、順番が異なる配列が完成することに注意です。

irb
>> 153.digits
#=> [3, 5, 1]

冪乗のe

登場回:Gigasecond

これはRubyというよりも数学的なところですが、10の冪乗はeを使っても表せるようです。 浮動小数点になることに注意が必要ですね。

irb
>> 1e9
#=> 1000000000.0

参考

Rubyで等比数列

登場回:Grain

Rubyで等比数列を作る場合、以下のように記述できるようです。

geometric.rb
# num: 初項
# ratio: 公比
# length: 数列の長さ
def geometric_sequence(num, ratio, length)
Array.new(length) { |n| num * ratio**n }
end

参考:【Ruby】等差数列・等比数列を作成する1番シンプルな処理 - Qiita

new(size) {|index| … } -> Array
長さ size の配列を生成し、各要素のインデックスを引数としてブロックを実行し、各要素の値をブロックの評価結果に設定します。
ブロックは要素毎に実行されるので、全要素をあるオブジェクトの複製にすることができます。
Array.new (Ruby 3.0.0 リファレンスマニュアル)


余談:このGrainという問題は、「Wheat and chessboard problem」といって、歴史ある数学的問題のようです。

ikuma-t

ikuma-t

about

9割笑顔、1割 (´・ω・)