パナソニックプログラミングコンテスト2020

https://atcoder.jp/contests/panasonic2020
過去問。

A:Kth Term

ary = [1, 1, 1, 2, 1, 2, 1, 5, 2, 2, 1, 5, 1, 2, 1, 14, 1, 5, 1, 5, 2, 2, 1, 15, 2, 2, 5, 4, 1, 4, 1, 51]
puts ary[gets.to_i - 1]

B:Bishop

HかWが 1 の場合を忘れていた。

h, w = gets.split.map(&:to_i)
puts (h == 1) || (w == 1) ? 1 : (w * h * 1/2r).ceil

C:Sqrt Inequality

必要十分条件をちょっと勘違いしていた。

a, b, c = gets.split.map(&:to_i)
result = if c - a - b <= 0
           "No"
         else
           (4 * a * b < (c - a - b) ** 2) ? "Yes" : "No"
         end
puts result

D:String Equivalence

よくわからなかった。解説を見た。

n = gets.to_i

solve = ->(str, max_char) {
  if str.length == n
    puts str
  else
    ("a"..max_char).each do |c|
      next_max = (c == max_char) ? max_char.succ : max_char
      solve.(str + c, next_max)
    end
  end
}

solve.("", "a")