Rubyの数字文字列の各数字の合計を取得する

まぁこちらcodewarsのkumiteでやったやつなんだけどさ。

たとえば、"123"という文字列の、各数字の合計を取得したい場合、わかりやすい書き方をするとしたら、

string.chars.map(&:to_i).sum

になるよね。

でも、Stringにはsumメソッドが存在する。
コードをドキュメントから拝借すると、文字列の次の数値を取得できるらしい。
https://docs.ruby-lang.org/ja/latest/method/String/i/sum.html

def sum(bits)
  sum = 0
  each_byte {|c| sum += c }
  return 0 if sum == 0
  sum & ((1 << bits) - 1)
end

ということはだよ、相当な桁数でないのであれば、次のようにすればstringのsumからそのまま答えを出してしまえる。

string.sum - string.size * 48

codewarsのページにベンチマーク載せているから是非見てくれ。めちゃくちゃ早い。
「Really?」と言う感じで改善版として載せられているコードは、間違った結果を返すので気にしなくてオッケー!

タイトルとURLをコピーしました