CodeIQの「挑戦者求む!【ウチに来ない?】《ピッグデータ》に負けないで! by The Essence of Programming」に挑戦していたのですが、結局、解けずに時間切れでした…。
小さいデータでは解けるのに、大きい(ピッグ)データになると、実行時間がかかりすぎるということは、工夫が足りないんでしょうね。
以下は、問題をそのまま書き下した解けないサンプルです…。
pigdata.rb
# -*- coding: utf-8 -*- require 'digest/sha1' def getdata(index) q, r = index.divmod(10) sha1 = Digest::SHA1.hexdigest(q.to_s) d = sha1.unpack("a2" * (sha1.length/2)).map(&:hex) d[2*r] * 256 + d[2*r+1] end def getsign(count, skips) ret = 0 sorted = [*0...count].map{|n| getdata(n) }.sort 0.step(count - 1, skips) {|idx| ret += sorted[idx] } ret end # 小さいデータだと計算出来ますが、 p getsign(100, 10) # ピッグデータになると…。 # p getsign(107374182400, 1677721)