2020年3月1日日曜日

200301(3)

Ruby


A332762

A322178 を元に、コードを書いた。

# d個とばし
def search(a, num, d, k, n)
  if num == 0
    @cnt += 1
  else
    # iはk * n - k以下、jはk * n - k + 1以下
    (k * n - k + 1).times{|i|
      if a[i] == 0
        (i + d + 1..k * n - k + 1).each{|j|
          if (k - 1) * j - (k - 2) * i < k * n
            if (1..k - 1).all?{|m| a[m * j - (m - 1) * i] == 0}
              (0..k - 1).each{|m| a[m * j - (m - 1) * i] = num}
              search(a, num - 1, j - i - 1, k, n)
              (0..k - 1).each{|m| a[m * j - (m - 1) * i] = 0}
            end
          end
        }
      end
    }
  end
end

def A(k, n)
  a = [0] * k * n
  @cnt = 0
  search(a, n, 0, k, n)
  @cnt
end

(2..7).each{|i| p [i, (0..6).map{|j| A(i, j)}]}

出力結果
[2, [1, 1, 5, 33, 329, 3825, 57293]]
[3, [1, 1, 4, 18, 124, 738, 7464]]
[4, [1, 1, 4, 16, 110, 544, 5444]]
[5, [1, 1, 4, 16, 104, 508, 5136]]
[6, [1, 1, 4, 16, 104, 484, 4968]]
[7, [1, 1, 4, 16, 104, 484, 4848]]

0 件のコメント:

コメントを投稿

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