例えば文字列1251251252525について 25 -> aに変換し文字のカウントをし易くします。=> 1a1a1aaa 連続したaの個数は、(1, 1, 3) ですので、それぞれについて組合せ数を合計します。 s = gets.chomp s.gsub!(/25/, 'a') p = [] c = 0 0.upto(s.size - 1) do |i| if s[i] == 'a' c += 1 elsif c > 0 p.push(c) c = 0 end p.push(c) if i == s.size - 1 && c > 0 end sum = 0 0.upto(p.size - 1) do |i| sum += (1..p[i]).reduce{|a, b| a + b} end puts sum