まぁこちら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?」と言う感じで改善版として載せられているコードは、間違った結果を返すので気にしなくてオッケー!