Обсуждение:Ruby/Подробнее о массивах

Материал из Викиучебника — открытых книг для открытого мира
Перейти к навигации Перейти к поиску

А куда делся сборник задач? --TweeKane 17:42, 14 августа 2008 (UTC)

Решение задач про массивы by YankovskyAndrey 13:30, 7 ноября 2008 (UTC)

Содержание

Одномерные[править]

Вывести индексы массива в том порядке, в котором соответствующие им элементы образуют возрастающую последовательность.[править]

Возможное решение:

array=[1,-2,-6,4,2,8,-6,8,2,-1]
p (0...array.size).to_a.sort_by{|v| array[v]}
85.172.118.16 22:32, 13 января 2009 (UTC)GaGar1n 95.25.53.167 15:59, 21 сентября 2009 (UTC) 95.25.53.167 15:59, 21 сентября 2009 (UTC)

91.103.73.83 13:15, 6 октября 2009 (UTC)

Возможное решение:

m = [1,2,3,4,5,-1,-3,-5,-6]
m.sort.each { |i| p m.index(i) }
r3nya 21:45, 22 августа 2011 (UTC)r3nya

не работает с повторяющимися значениями элементов 77.243.97.11 20:30, 5 ноября 2011 (UTC)

Возможное решение:

class Array
	def map_with_index
		a=Array.new
		self.each_with_index{|o,i|
			p=yield o,i
			a.push(p)
		}
		return a
	end
end

a.map_with_index{|o,i| [o,i]}.sort{|a,b| a[0]<=>b[0]}.map{|a| a[1]}

46.39.224.21 20:05, 9 сентября 2012 (UTC) 20:07, 9 сентября 2012 (UTC)

Слегка модифицированный вариант предыдущего способа с использованием версии 1.9:

p a.map.with_index{|o,i| [o,i]}.sort.transpose[1]

BlindMan (обсуждение) 21:27, 24 сентября 2012 (UTC)


Ипользуя each_with_index

arr = [55, 66, 43, 48, -300, 42]
arr.each_with_index do |elem, index|
 arr.sort
 puts index
 end

--188.162.36.102 17:10, 7 апреля 2013 (UTC)

====В численном массиве найти сумму отрицательных элементов.====

Возможное решение:

array=[1,-2,-6,4,2,8,-6,8,2,-1]
p array.find_all{|v| v<0}.inject(0){|v,result| result+v}


Возможное решение:

array=[-1,-2,-3,-4,1,2,3,4]
p array.inject(0){ |res,elem| elem < 0? res + elem : res}

--213.109.95.90 05:40, 16 сентября 2012 (UTC) Ruby beginner

Возможное решение:

array = [1, -2, -6, 4, 2, 8, -6, 8, 2, -1]
array_negative, array_positive = array.partition{ |elem| elem < 0 }
p array_negative.inject(0){ |result, elem| result + elem }

Deslaim (обсуждение) 18:47, 24 августа 2014 (UTC)

Найти все индексы, по которым располагается максимальный элемент.[править]

Возможное решение:

array=[1,-2,-6,4,2,8,-6,8,2,-1]
max=array.max
array.each_index{|x| if array[x]==max then puts "#{x}" end}

или

array=[1,-2,-6,4,2,8,-6,8,2,-1] 
p (0...array.size).find_all{|x| array[x]==array.max}
78.107.55.122 07:37, 4 января 2009 (UTC) Azadi | 91.200.47.156 08:06, 20 апреля 2010 (UTC) deGreeZ

В массиве переставить в начало элементы, стоящие на чётной позиции, а в конец — стоящие на нечётной.[править]

Возможное решение:

array=[1,-2,-6,4,2,8,-6,8,2,-1]
even,odd=Array.new,Array.new
array.each_with_index do |element, index|
  ar = index % 2 == 0 ? even : odd
  ar << element
end
p odd+even
array=[1,-2,-6,4,2,8,-6,8,2,-1]
(0..array.size-1).inject(:odd=>[], :even=>[]) do |s,i|
	(array[i] % 2 == 0 ? s[:odd] : s[:even]) << array[i]
	s
end
82.131.7.162 22:29, 15 января 2009 (UTC)
array = [1, 2, 3, -2, 3, 2, -3, -1]
 p (0...array.size).to_a.partition{|i| i.odd? }.flatten.map{|i| array[i]}

193.239.216.162 08:35, 14 мая 2009 (UTC) Bill

95.135.17.65 01:02, 10 ноября 2009 (UTC)добавлено reverse перед flatten т.к. чётные элементы массива, это нечётные индексы массива.

~~Commandos~~

p (0...a.size).find_all{|x| x.even?}.map{|i| a[i]}+(0...a.size).find_all{|x| x.odd?}.map{|i| a[i]}

90.155.142.2 20:15, 2 ноября 2010 (UTC) Dpoke

BlackKOT 14:24, 17 января 2012 (UTC)
array = [1, 5, 8, 10, -20, -21, 23, 3]
p array.each_index.to_a.sort_by{|a| a % 2}.map{|b| array[b]}
=> [1, 23, 8, -20, 10, -21, 5, 3]

188.32.158.4 20:12, 1 августа 2012 (UTC)

arr=[1,10,-5,17,-30,2,17,-30,2,7]
arr_ind=(0...arr.size).to_a
arr_odd=arr_ind.find_all{|e| e.odd?}
arr_odd_num=arr_odd.map{|e| arr[e]}
arr_odd.find_all{|e| arr[e]=nil}
p arr.compact+arr_odd_num #=>[1, -5, -30, 17, 2, 10, 17, 2, -30, 7]

79.164.108.243 20:13, 19 марта 2013 (UTC)

a=[0,1,2,3,4,5,6,7,8,9]
(a.partition.with_index{|e,i| i.even?}).flatten #=> [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]

--Evgeny.V.Orlov (обсуждение) 08:27, 15 мая 2013 (UTC)

a=[-2,-4,7,1,3,-9,6,7]
p a.partition{ |x| a.index(x).even?}.flatten
SP3k7eRx (обсуждение) 18:44, 29 июля 2014 (UTC)

Одномерные целочисленные[править]

Найти все элементы, большие среднего арифметического элементов.[править]

Возможное решение:

array=[1,-2,-6,4,2,8,-6,8,2,-1]
average=array.inject(0.0){|v,sum| sum+v.to_f}/array.size
p array.find_all{|v| v>average}

62.16.92.86 08:36, 31 июля 2009 (UTC)hensh

array=[1,-2,-6,4,2,8,-6,8,2,-1]
avg=(arr.inject(0){|x,y| x+y}).to_f/arr.size
p arr.find_all{|x| x>avg}

evgueniy.g@gmail.com

array=[1,-2,-6,4,2,8,-6,8,2,-1]
p array.find_all{ |enum| enum > (array.inject(0){ |x, y| x + y} / array.size)}

borodulind@gmail.com

К чётным элементам прибавить первый элемент, а к нечётным — последний. Первый и последний элемент не изменять.[править]

Возможное решение:

array=[1,-2,-6,4,2,8,-6,8,2,-1]
(1..array.size-2).each do |index|
  array[index]+= index[0].zero? ?  array[-1] : array[0]
end
p array

кто-то из нас неправильно понял задачу... если проверять ЭЛЕМЕНТ на четность, то решение должно иметь вид:

array=[1,-2,-6,4,2,8,-6,8,2,-1]
(1..array.size-2).each do |index|
  array[index]+= (array[index])[0].zero? ?  array[0] : array[-1]
end
p array
78.107.55.122 11:09, 4 января 2009 (UTC)


Второй вариант

a=(0..10).to_a.sort(rand)     #=> [10, 6, 1, 7, 3, 8, 5, 9, 4, 2]
b=Array.new; a[1..-2].each{|x| if x[0].zero? then b.push(x+a[0]) else b.push(x+a[-1]) end}; b.push(a[-1]); b.unshift(a[0])    #=>  [10, 16, 3, 9, 5, 18, 7, 11, 14, 2]


Qwerty013 20:57, 9 сентября 2009 (UTC)

Третий вариант

p (0...array.size).to_a.map{|i| i > 0 && i < array.size - 1 ? ((i % 2).zero? ? array[i] + array[-1] : array[i] + array[0]) : array[i] }

95.135.17.65 02:14, 10 ноября 2009 (UTC)третий вариант

Четвертый вариант

преследуемые цели: использовать только АУО, не заводить лишних переменных, получить "решение в одну строку"

require 'enumerator'
array = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
p array.enum_with_index.map { |e, i| [ [e+array[0], e+array[-1]][e%2 <=> 0], e ][ ([0, array.size-1].include?(i).to_s) <=> 'false' ] }
#=> [1, 3, 12, 5, 14, 7, 16, 9, 9]

P.S.: буду рад услышать коментарии и исправления

 DeGreeZ 11:40, 20 апреля 2010 (UTC)

Пятый вариант

sf = (10..20).to_a
(1...sf.size-1).to_a.each{ |x| sf[x] += ((sf[x] % 2).zero? ? sf[0] : sf[-1]) }; p sf
skywarp 19:44, 6 июля 2010 (UTC)

Шестой

(1...array.size-1).to_a.map do |elem|
  if array[elem].even?
    array[elem]+=array[0]
  else
     array[elem]+=array[array.size-1]
  end
end
p array

--95.220.193.56 16:45, 29 марта 2011 (UTC)

Седьмой в одну строку

[array[0],(1...array.size-1).map{|e| array[e] + array[-array[e][0]] },array[-1]].flatten
 194.88.206.172 22:13, 15 июня 2011 (UTC) Sitin

Заменить все положительные элементы на значение минимального.[править]

Возможное решение:

array=[1,-2,-6,4,2,8,-6,8,2,-1]
min=array.min
(0..array.size-1).each do |i|
  if array[i]>0
    array[i]=min
  end
end
p array

или

array = [1,-2,-6,4,2,8,-6,8,2,-1]
min = array.min
p array.map { |el| el > 0 ? min : el }

62.16.92.86 09:07, 31 июля 2009 (UTC)hensh

~

Найти произведение всех чётных элементов массива.[править]

Возможное решение:

array=[1,-2,-6,4,2,8,-6,8,2,-1]
product=1
p array.each_with_index{|v,i| if i[0].nonzero? then product*=v end}
p product


Выше приведено решение для четных индексов. В задаче речь идет о чётности именно элементов.

array=[1,-2,-7,4,3,8,-6,5,2,-1]
product=1
p array.each{|v| if v[0].zero? then product*=v end}
p product
85.172.118.16 23:17, 13 января 2009 (UTC)GaGar1n

вот еще вариант

array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
p array.inject(1) { |res, el|  res * (el.even? ? el : 1) }

62.16.92.86 09:16, 31 июля 2009 (UTC)hensh

Слегка модифицированный вариант

p array.inject(1){ |rez, el| el.even? ? rez * el : rez}

~~Commandos~~


предлагаю ещё вариант, используя именно функции, изложенные в данной теме.

p (0...array.size).find_all{ |v| (v % 2).nonzero? }.inject(1){ |prod, v| prod * array[v] }

91.196.95.17 15:24, 10 ноября 2009 (UTC)KolobocK

последний вариант, но короче:

p (0..array.size-1).inject(1){|k,x| (array[x]%2==0) ? (k*=array[x]) : k}


и самый простой вариант:

array.find_all{|z| z.even?}.inject{|x,y| x*y}

194.50.161.38 13:52, 27 октября 2010 (UTC)Sirko

Найти количество минимальных элементов.[править]

Возможное решение:

array=[1,-2,-6,4,2,8,-6,8,2,-1]
min=array.min
p array.find_all{|v| v==min}.size

Альтернатива:

array=[1,-2,-6,4,2,8,-6,8,2,-1]
p array.count(array.min)

~~Commandos~~

Вывести индексы элементов, меньших своего левого соседа.[править]

Возможное решение:

array=[1,-2,-6,4,2,8,-6,8,2,-1]
(1..array.size-1).each do |i|
  if array[i]<array[i-1] then p i
  end
end

еще вариант:

 array=[1,-2,-6,4,2,8,-6,8,2,-1]
p (1...array.size-1).find_all{ |v|  array[v]<array [v-1]}
88.85.186.105 20:02, 31 июля 2009 (UTC)Valery

46.39.224.21 18:38, 25 октября 2012 (UTC).

Двумерные[править]

Поменять первый и последний столбец массива местами.[править]

Возможное решение:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
array=array.transpose
array[0],array[-1]=array[-1],array[0]
p array.transpose

Возможное решение:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
elSize = array[0].size
p array.each{ |i| i[0] += i[elSize-1]; i[elSize-1] = i[0]-i[elSize-1]; i[0] -= i[elSize-1] }

80.68.6.248 07:10, 6 октября 2009 (UTC)Cheremencev

Возможное решение:

array=[[1,2],[3,4],[5,6]]
array[-1], array[0] = array[0], array[-1]
Janitor 19:17, 12 февраля 2011 (UTC)

Возможное решение:

array=[[1,2],[3,4],[5,6],[7,8]]
array=array.transpose
array[1..-2].push(array[0]).unshift(array[array.size-1]).transpose
194.226.240.200 08:05, 1 марта 2012 (UTC) JayDee

Возможное решение:

p [[1, 2, 3], [4, 5, 6]].transpose.tap{|e| e[0],e[-1]=e[-1],e[0]; }.transpose
84.42.23.118 15:03, 10 апреля 2012 (UTC) prog.devel

Возможное решение:

a=[[2,5,4],[7,3,9]]
p a.each{|x| x[0],x[-1]=x[-1],x[0]} #=> [[4, 5, 2], [9, 3, 7]]
sP3k7eRx (обсуждение) 18:02, 30 июля 2014 (UTC)

Упорядочить N-ый столбец.[править]

Возможное решение:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
N=2
p array
array=array.transpose
array[N].sort!
p array.transpose

Возможное решение:

array=[[1,-2,-6,74,2,8],[-6,4,2,8,44,33],[1,63,24,11,2,8]]
N=3
p array.transpose.tap{|i| i[n].sort!}.transpose

--178.54.126.195 19:04, 11 ноября 2012 (UTC)Kuznec

Упорядочить строки, содержащие максимальный элемент.[править]

Возможное решение:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
max = array.flatten.max
(0..array.size-1).each do |i|
  if array[i].include?(max) then array[i].sort!
  end
end
p array

немного короче.

b=[[-2,0,4],[7,-1,-5],[3,7,-3]]
p (0...b.size).to_a.map{|x| (b[x].include?(b.flatten.max)) ? b[x].sort!: b[x]} #=>[[-2, 0, 4], [-1, 5, 7], [-3, 3, 7]]

и еще короче:

a=[[-2,0,4],[7,-1,-5],[3,7,-3]]
max = a.flatten.max
p a.each{|x| if x.include?(max) then x.sort! end}
LUR 14:24, 30 марта 2010 (UTC)

И ещё вариант в одну строку:

test = [[1,-2,-6,74,2,8],[-6,4,2,8,44,33],[1,63,24,11,2,8]]
(0...test.size).each{|i| (test[i].sort! if test[i].max == test.flatten.max)}
Ivan.Feofanov (обсуждение) 06:18, 19 ноября 2014 (UTC)

Возможное решение:

array=[[1,-2,-6,74,2,8],[-6,4,2,8,44,33],[1,63,24,11,2,8]]
p array.map {|i| i.max==array.flatten.max ? i.sort! : i}

--178.54.126.195 19:26, 11 ноября 2012 (UTC)Kuznec

Упорядочить строки, если они не отсортированы и перемешать, если они отсортированы.[править]

Возможное решение:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
(0..array.size-1).each do |i|
  array[i]==array[i].sort ? array[i]=array[i].sort_by{rand} : array[i].sort!
end
p array


или вариант:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
array.each{|x| if x==x.sort then x.sort_by!{rand} else x.sort! end}

194.50.161.38 08:16, 28 октября 2010 (UTC)Sirko


ещё можно так.

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
p array.map{|e| (e==e.sort)? e.sort_by{rand}:e.sort()}

Erliz 06:37, 26 сентября 2011 (UTC)

Упорядочить строки массива по значению элемента главной диагонали в каждой из строк (в исходном массиве).[править]

Возможное решение:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
mainDiagonal=Array.new
(0..array.size-1).each do |i|
  mainDiagonal<<array[i][i]
end
indixes = (0..array.size-1).sort_by { |v| mainDiagonal[v] }
p indixes
result = Array.new
indixes.each do |index|
result << array[index]
end
p result

немного короче.

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
diag=(0...array.size).map{|i| array[i][i]}
(0...diag.size).sort_by{|i| diag[i]}.map{|i| array[i]}

ещё покороче:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
n=-1
p array.sort_by{|e| n+=1; e[n]}

Erliz 14:03, 23 сентября 2011 (UTC)

Или вот так:

a = [[-2,0,4],[7,-1,-5],[3,7,-3]]
p (0...a.size).sort_by{|n| a[n][n]}.map{|n| a[n]}

195.112.118.245 04:11, 25 января 2012 (UTC)

А вот еще чуток короче(Ruby v.1.9):

p a.sort_by.with_index {|elem, i| elem[i]}

BlindMan (обсуждение) 22:14, 24 сентября 2012 (UTC)

Или как вариант:

p array.sort_by!{|a| a[array.index(a)]}

--159.224.112.84 07:29, 1 сентября 2015 (UTC)Pashka

Найти номера строк, элементы которых упорядочены по возрастанию.[править]

Возможное решение:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
for i in 0..array.size-1
  if (array[i]==array[i].sort) then p i
  end
end

или так:

array.each_with_index{|v,i| if v == v.sort then p i end}
LUR 10:22, 31 марта 2010 (UTC)

как вариант:

puts (0...a.size).to_a.find_all{|x| a[x]==a[x].sort}

а вот мой вариант 90.155.225.248 19:25, 14 июля 2013 (UTC)PaRRoT

array=[[-2,0,4],[7,-1,-5],[3,7,-3],[1,2,3]]
p array.map.with_index{|elem,i| elem==elem.sort ? i : nil }.compact

194.50.161.38 15:09, 2 ноября 2010 (UTC)Sirko

и еще вариант покороче :

p array.find_all { |e| e == e.sort }

--159.224.118.87 12:20, 23 февраля 2014 (UTC)mcio

Двумерные целочисленные[править]

Найти максимальный элемент для каждого столбца, а затем получить произведение этих элементов.[править]

Возможное решение:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
array.transpose
product=1
(0..array.size-1).each do |i|
  product*=array[i].max
end
p product

У Вас здесь ошибка, метод transpose - он ведь не изменяет массив, т.е. надо

 array=array.transpose

а в вашем коде находятся максимумы строк, не столбцов. в коде который следует за этим, такая же ошибка, максимумы строк а не столбцов ищете.

возможно верный код:

b=[[90,90,90],[7,-1,5],[3,7,-3]] 
b=b.transpose
p (0...b.size).inject(1){|x,y| x*=b[y].max} #=> 729000, что, кстати, равно 90**3

вот, а в следующем примере надо просто транспоуз сделать. я решил оставить ошибки, для наглядности обучения.

warnabas 13:11, 25 января 2010 (UTC) i'm

или

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
maxis = array.map { |obj| obj.max }
p maxis
p maxis.inject(1) { |res, el| res * el }

62.16.92.86 09:39, 31 июля 2009 (UTC)hensh

Короткая версия правильного решения:

p array.transpose.inject(1) { |res,v| res * v.max }
LUR 10:46, 31 марта 2010 (UTC)

Найти минимум в двумерном массиве.[править]

Возможное решение:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
p (array.map {|v| v.min}).min

Возможное решение:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
p array.flatten.min

Найти произведение положительных элементов.[править]

Возможное решение:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
p array.flatten.find_all{|v| v>0}.inject{|v,product| v*product}

или без find_all

p array=Array.new(5){Array.new(3){rand(10)-5}}
p array.flatten.inject(1){|val,e| val*= e>0? e : 1}

--Erliz 06:58, 26 сентября 2011 (UTC)

Найти сумму положительных элементов, больших К.[править]

Возможное решение:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
k=gets.chomp.to_i
p array.flatten.find_all{|v| v>0&&v>k}.inject(0){|v,sum| sum+v}

Возможное решение:

x=[[1,2,17­],[22,11,-­2],[55,1,1­1]]
k=10 
p x.fla­tten.injec­t(0){|r,e|­r+=(0<e)&(e>k)? e:0}

--178.151.238.232 11:09, 8 марта 2015 (UTC)

Вычислить сумму и среднее арифметическое элементов главной диагонали.[править]

Возможное решение:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
sum,average=0,1
(0..array.size-1).each do |i|
  sum+=array[i][i]
  average*=array[i][i]
end
puts "average = #{average}, sum = #{sum}"

"В математике и статистике сре́днее арифмети́ческое (или просто среднее) набора чисел — это сумма всех чисел в этом наборе делённая на их количество..." ru.wikipedia.org

b=[[90,90,90,1],[7,-1,5,14,41,4,1],[3,7,-3,3,54,5,1],[3,1,3,1,3,1]]
x=0
(0...b.size).inject(0){|x,y| x+=b[y][y] }
print x," ", x/b.size
warnabas 18:20, 25 января 2010 (UTC)

Как вариант (возможно немного более ruby-шное решение, Ruby v.1.9):

a=[[90,90,90,1],[7,-1,5,14,41,4,1],[3,7,-3,3,54,5,1],[3,1,3,1,3,1]]
diag = a.map.with_index{|row, i| row[i]}
p sum = diag.inject(:+)
p mean = sum / a.length

BlindMan (обсуждение) 22:38, 24 сентября 2012 (UTC)

Возможное решение:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
p (0...array.size).to_a.each.inject(0) {|res,i| res+array[i][i]}.tap{|i| print "sr.arefm.="+(i/array.size).to_s+" summ="}
array=[[-2,0,4],[7,-1,-5],[3,7,-3]] ~~~~
p sum = (0...array.size).to_a.inject(0){|sum, num| sum+array[num][num]}, sum.to_f/array.size

--178.54.126.195 21:31, 11 ноября 2012 (UTC)Kuznec

Возможное решение (учитывая что у матрицы по определению n строк и m столбцов):

a=[[3,-5,7,9],[2,2,-6,8],[-9,5,1,3],[1,7,-9,2],[1,8,-6,0]]
p s=a.map.with_index{|e,i| e[i]}.inject(0){|r,e| r+= (e==nil)? 0 : e}, s/a[0].size
sP3k7eRx (обсуждение) 18:44, 4 августа 2014 (UTC)

Найти номера строк, все элементы которых — нули.[править]

Возможное решение:

array=[[-2,0,4],[7,-1,-5],[3,7,-3]]
(0..array.size-1).each do |i|
if array[i].all?{|v| v==0} then p i end
end

95.135.17.65 03:00, 10 ноября 2009 (UTC)

Конструкция "0..array.size-1" записывается короче через многоточие "0...array.size"

Вот так короче:

(0...array.size).find_all{|x| array[x].all?{|v| v==0}}

BesS 15:46, 2 июня 2010 (UTC)

Или в обратном порядке:

(a.map{|v| v.all? {|e| e==0}}).map.with_index {|e,i| p i if e}

--Evgeny.V.Orlov (обсуждение) 09:40, 15 мая 2013 (UTC)

Возможне решение:

a=[[3,-5,7,9],[0,0,0,0],[2,2,-6,8],[-9,5,1,3],[1,7,-9,2],[0,0,0,0]]
p a.map.with_index{|e,i| (e.all?{|x| x==0})? i : nil}.compact #=> [1, 5]
sP3k7eRx (обсуждение) 06:15, 7 августа 2014 (UTC)