花札シャッフル
ACM ICPCのこのページの問題文を参考にして書いてみた。
部分配列を連結してるから、もっとマシな書き方があるはず。
def getDatasets(lines) sets = [] while !(lines.empty?) set = {'n' => 0, 'cuts' => []} line = lines[0].split(' ') set['n'] = line[0].to_i r = line[1].to_i lines.delete_at(0) r.times do cut = {} line = lines[0].split(' ') cut['p'] = line[0].to_i cut['c'] = line[1].to_i lines.delete_at(0) set['cuts'] << cut end sets << set end return sets end def shuffle(set) n = set['n'] fuda = Array.new(n){|i| n - i} set['cuts'].each do |cut| p = cut['p'] c = cut['c'] tmp_c = fuda[p-1, c] tmp_p = fuda[0, p-1] rest = fuda[p, 51] fuda = tmp_c + tmp_p + rest end fuda[0] end sets = [] filename = ARGV[0] lines = nil open(filename) do |f| lines = f.readlines end sets = getDatasets(lines) sets.each do |set| result = shuffle(set) p result unless result == nil end
べ、、別に某社のインターンの問題に出されたと聞いて、練習でプログラム書いてみたってことじゃないんだからねっ!
あとでいい書き方を考えてみよう。