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 * ','}]
ってのが気に入りました.