(備忘録)AtCoderをやって 1

問題文

黒板に N 個の正の整数 A 1 ​ ,...,A N ​ が書かれています.

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

黒板に書かれている整数すべてを,2 で割ったものに置き換える. すぬけ君は最大で何回操作を行うことができるかを求めてください.

自分の回答(動きません)

n = gets.chomp.to_i
*a = gets.chomp.split(" ").map(&:to_i)
cnt = 0
while a[n].even?
  a[n] << a[n] % 2
  cnt += 1
end
puts cnt

とりあえず一つだったらこうやる?みたいなの考えながらやっていたけど全てが偶数ならという条件、元の配列にどうやって割った数を入れるかというのが分からず

参考回答(自分が理解しやすかったやつ)

n = gets.chomp.to_i
hoge = gets.split(' ').map(&:to_i)
count = 0

while hoge.count{|h| h.even?} == n
  hoge = hoge.map! {|i| i / 2}
  count += 1
end
puts count

全てが偶数ならという条件・・・hoge.count{|h| h.even?} == n 元の配列に2で割った数を入れる・・・ hoge = hoge.map! {|i| i / 2}

n = gets.to_i
numbers = gets.chomp.split(' ').map(&:to_i)
count = 0

while numbers.all?{|number| number % 2 == 0} do
  numbers.map!{|number| number / 2}
  count += 1
end

puts count

全てが偶数ならという条件・・・numbers.all?{|number| number % 2 == 0} 元の配列に2で割った数を入れる・・・ numbers.map!{|number| number / 2}