Dado un entero mínimo y máximo entero, quiero crear una matriz que cuente del mínimo al máximo en dos, luego retroceda (nuevamente en dos , repitiendo el número máximo).Cómo crear una lista de números y anexarla inversamente de manera eficiente en Ruby
Por ejemplo, si el número mínimo es 1 y el máximo es 9, quiero [1, 3, 5, 7, 9, 9, 7, 5, 3, 1]
.
Estoy tratando de ser lo más conciso posible, razón por la cual estoy usando one-liners.
En Python, me gustaría hacer esto:
range(1, 10, 2) + range(9, 0, -2)
En Rubí, que estoy empezando a aprender, todo lo que he encontrado hasta el momento es:
(1..9).inject([]) { |r, num| num%2 == 1 ? r << num : r }.reverse.inject([]) { |r, num| r.unshift(num).push(num) }
Qué funciona, pero sé que hay debe ser una mejor manera. ¿Qué es?
Oh, cómo podría olvidar 'Range # step'! –
El intervalo # paso parece [esperar un bloqueo] (http://ruby-doc.org/core/classes/Range.html#M000695) - el primer ejemplo, mientras que de otro modo era exactamente lo que esperaba, arroja un error para mi. ('no hay bloque dado (LocalJumpError)') – Kiwi
@Kiwi: Estás usando Ruby 1.8.6. Actualice a 1.8.7+ o 'incluya" backports "' –