AtCoder Beginners SelectionにRubyで挑戦 #3

AtCoder初心者がやるべき問題集、AtCoder Beginners Selectionに挑戦。

各問題の制約や入出力例などは引用元リンク(AtCoderのサイト)へ。

ABC081B - Shift only

問題文
黒板に N 個の正の整数 A1,...,AN が書かれています.
すぬけ君は,黒板に書かれている整数がすべて偶数であるとき,次の操作を行うことができます.

  • 黒板に書かれている整数すべてを,2 で割ったものに置き換える.

すぬけ君は最大で何回操作を行うことができるかを求めてください.

入力
入力は以下の形式で与えられる。
N
A1 A2 ... AN

入力例
3
8 12 40

出力例
2

ABC081B - Shift only

提出コード

m = gets
numbers = gets.split.map(&:to_i)
ans = 0
while numbers.all? { |n| n.even? }
  numbers = numbers.map { |n| n / 2 }
  ans += 1
end
puts ans

結果:AC(正解) 実行時間:56 ms

ちょっと難しかった。変数名をややこしくしてしまって反省。

all?は、配列などの各要素をブロックで評価し、全ての要素について真であればtrueを返すメソッド。

Enumerable#all? (Ruby 2.7.0 リファレンスマニュアル)

全ての要素が偶数(even)である間while節を回すようにして、各要素を2で割っていき、最後にその回数を出力。