Snippets

cia_rana 今週のお題:回数指定のじゃんけん2

Created by cia_rana last modified
def combination(n, k)
  k = n - k if k * 2 > n
  return 1 if k == 0
  ((n - k + 1)..n).reduce(&:*)/(1..k).reduce(&:*)
end

def calc_pattern(m, n)
  (0..(k = n - m)/(n - 2)).reduce(0) { |s, i| s + [1, -1][i % 2] * combination(m, i) * combination(m + k - 1 - (n - 2) * i, m - 1) }
end

# rps = rock, paper, scissors
def calc_rps_pattern n
   3 + (n == 0 ? 0 : calc_pattern(3, n + 2))
end

m, n = gets.split.map(&:to_i)

p (n-2).times.inject(Array.new(m - 2, 3) + [calc_rps_pattern(m-2)]){|a, _|
  (m-1).times.map{|i|
    calc_rps_pattern(i) * a[i] + a[i+1...m-1].reduce(0, :+)*3
  }
}.reduce(:+)*3

Comments (1)

  1. cia_rana

    ニューラルネットのイメージ
    m-1個のノードがn-1層あって,出力でm-1個のノードの値を合計して3を乗じる

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.