2015年4月5日日曜日

150405

Ruby


Self-descriptive number

一昨日Self-descriptive numberを高速に求める方法を
スタック・オーバーフローで質問してみた。
(http://ja.stackoverflow.com/questions/8696/10%E6%A1%81%E3%81%BE%E3%81%A7%E3%81%AEself-descriptive-number%E3%81%AE%E6%B1%82%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
そして、昨日h2so5さんのコードを用いて少しばかり高速化してみた。

def sdn(len, l = 0, m = 0, x = [])
  a = []
  if l == len
    if (0..len - 1).all?{|i| x.count(i) == x[i]}
      a << x.join.to_i
    end
  elsif m <= len
    s = l > 0 ? 0 : 1
    (s..len - 1).each{|n| a += sdn(len, l + 1, m + n, x + [n])}
  end
  a
end

N = 10
(1..N).each{|b|
  sdn(b).each{|n| p n}
}

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。