2021年10月9日土曜日

211009

Ruby


Stirling number

第1種スターリング数および第2種スターリング数を計算してみた。
第1種については
「数の本」、「コンピュータの数学」
にある通り、符号なしで出力してみる。

# 符号は無視
def stirling(n, k = 1)
  a = [1]
  p [0, a]
  (1..n).each{|i|
    a << 0
    b = [0]
    (0..i - 1).each{|j|
      if k == 2
        b[j + 1] = a[j] + (j + 1) * a[j + 1]
      else
        b[j + 1] = a[j] + (i - 1) * a[j + 1]
      end
    }
    a = b
    p [i, a]
  }
end

n = 10
stirling(n)
p ""
stirling(n, 2)

出力結果
[0, [1]]
[1, [0, 1]]
[2, [0, 1, 1]]
[3, [0, 2, 3, 1]]
[4, [0, 6, 11, 6, 1]]
[5, [0, 24, 50, 35, 10, 1]]
[6, [0, 120, 274, 225, 85, 15, 1]]
[7, [0, 720, 1764, 1624, 735, 175, 21, 1]]
[8, [0, 5040, 13068, 13132, 6769, 1960, 322, 28, 1]]
[9, [0, 40320, 109584, 118124, 67284, 22449, 4536, 546, 36, 1]]
[10, [0, 362880, 1026576, 1172700, 723680, 269325, 63273, 9450, 870, 45, 1]]
""
[0, [1]]
[1, [0, 1]]
[2, [0, 1, 1]]
[3, [0, 1, 3, 1]]
[4, [0, 1, 7, 6, 1]]
[5, [0, 1, 15, 25, 10, 1]]
[6, [0, 1, 31, 90, 65, 15, 1]]
[7, [0, 1, 63, 301, 350, 140, 21, 1]]
[8, [0, 1, 127, 966, 1701, 1050, 266, 28, 1]]
[9, [0, 1, 255, 3025, 7770, 6951, 2646, 462, 36, 1]]
[10, [0, 1, 511, 9330, 34105, 42525, 22827, 5880, 750, 45, 1]]

2021年10月7日木曜日

211007

Ruby


37で割り切れるpandigital number

2016年JJMO予選の問題をプログラミングで解いてみた。
0を含めない場合についても考えてみた。

def A(m, n)
  ary = []
  (m..n).to_a.permutation{|i|
    if i[0] > 0
      j = i.join.to_i
      ary << j if j % 37 == 0
    end
  }
  ary
end

def show(ary, n)
  p ary.size
  # 小さいものをn個表示
  p ary[0..n - 1]
  # 大きいものをn個表示
  p ary[-n..-1]
end

n = 10
show(A(0, 9), n)
# もし1から9の数字だったら
show(A(1, 9), n)

出力結果
85104
[1023654987, 1023657984, 1023684957, 1023687954, 1023745896, 1023746895, 1023795846, 1023796845, 1023845796, 1023846795]
[9876142305, 9876145302, 9876302145, 9876305142, 9876342105, 9876345102, 9876412035, 9876415032, 9876432015, 9876435012]
9072
[123564978, 123568974, 123574968, 123578964, 123645897, 123647895, 123695847, 123697845, 123845697, 123847695]
[987263415, 987265413, 987413265, 987415263, 987463215, 987465213, 987532146, 987536142, 987542136, 987546132]