Havel, Hakimiの定理をRubyで

http://d.hatena.ne.jp/hakobe932/20060729
なんかネタを振られているような気がしてならないので,一応ボクがRubyで書いたそれを晒しておきます.

def hakimi(l)
  list = l.sort{|a,b| b <=> a}
  p list
  return false if list.select{|e| e < 0}.size > 0
  top = list.shift
  if top < 0
    return false
  elsif top == 0
    return true
  end
  top.times do |i|
    list[i] -= 1
  end
  hakimi(list)
end

list = ARGV.map{|e| e.to_i}

bool = hakimi(list)

puts "A graph can#{'\'t' unless bool} be made from [#{list * ','}]"

昨日hakobe932とだべってたときのに気持ち悪く手を加えてあります.
実行結果はこんな感じ.

$ ruby hakimi.rb 3 3 3 3 3 1
[3, 3, 3, 3, 3, 1]
[3, 2, 2, 2, 1]
[1, 1, 1, 1]
[1, 1, 0]
[0, 0]
A graph can be made from [3,3,3,3,3,1]

$ ruby hakimi.rb 3 3 3 3 1
[3, 3, 3, 3, 1]
[2, 2, 2, 1]
[1, 1, 1]
[1, 0]
[-1]
A graph can't be made from [3,3,3,3,1]


何気に,

[#{list * ','}]

ってのが気に入りました.