ABC002

D問題。全通りが不可能じゃないスケールなのですごく愚直に書いても通るは通る。

def combination_array(array,num)
  array.combination(num).map{|a|a}
end
max = 1
unless input_edges.empty?
  max = 2
end
(3..n).each do |i|
  combination_array((1..12).to_a,i).each do |c_a|
    if (combination_array(c_a,2) - input_edges).empty?
      max = i
      next
    end
  end
end

bitを使っての云々というのが最初ピンとこなかったけど、要するにちょうど指で2進数をカウントするときのように、立っているbitを参加するメンバーと捉えて、おそらく一つ一つの自然数を組み合わせと見立てて、bitが立っている桁数で組み合わせを作成するみたいなことをやってるっぽい。

N.times.select { |j| <自然数> >> j & 1 == 1 }

これでいけるらしい

>>は右シフトで一個ずつずらして& 1で右端bitが1かどうか確かめる。それを満たす要素をselectするという感じ。なるほどなー。

combinationとかいう便利関数(?)を知れたのは良かった。しかし返り値がarrayじゃないのは不思議な感じする。