読者です 読者をやめる 読者になる 読者になる

麻雀わかんね

解いた
makeplex salon:あなたのスキルで飯は食えるか? 史上最大のコーディングスキル判定 (1/2) - ITmedia エンタープライズ
所要時間はなんと3時間オーバー。重複対策と文字列出力時間かけ過ぎた。

def akagi(str)
  a = str.split(//).map{|l| l.to_i}
  strs = []
  for n in 1..9
    res = []
    hoge((a + [n]).sort,res) if 
    res.each{|l| strs += a2s(l, n)}
  end
  strs.uniq
end

def cheat(a,res)
  (a.count/2).times{|i| return false if a[i/2] != a[i/2+1]}
  true
end

def a2s(a, n)
  strs = []
  a.each do |b|
    if b.include?(n)
      str = ''
      u = a.clone
      u.delete_at(u.index(b))
      u.each{|c|str += '(' + c.join('') + ')'}
      u = b.clone
      u.delete_at(u.index(n))
      strs << str + '[' + u.join('') +']'
    end
  end
  strs.uniq
end

def huga(a, b, res)
  if a.count == 0
    res << b
    return
  end

  #3こそろったやつ探す
  if a[0] == a[1] && a[1] == a[2]
    u = a.slice(3..a.count)
    huga(u, b + [[a[0]]*3], res)
  end

  #3これんぞくのやつ探す
  if a[0] < 8 && a.include?(a[0] + 1) && a.include?(a[0] + 2)
    u = a.clone
    3.times{|i| u.delete_at(u.index(a[0] + i))}
    huga(u, b + [[a[0], a[0]+1, a[0]+2]],res)
  end
end

#2こそろったやつ探す
def hoge(a,res)
  a.uniq.each do |l|
    if a.select{|x| x == l}.count >= 2
      u = a.clone
      u.delete_at(u.index(l))
      u.delete_at(u.index(l))
      huga(u, [[l,l]], res)
    end
  end
end
puts akagi(ARGV[0]).join(',')