Учитывая минимальное целочисленное и максимальное целое число, я хочу создать массив, который рассчитывает от минимума максимум до два, затем обратно вниз (снова два, повторяя максимальное количество).
Например, если минимальное число равняется 1, и максимум равняется 9, я хочу [1, 3, 5, 7, 9, 9, 7, 5, 3, 1]
.
Я пытаюсь быть максимально кратким, который является, почему я использую остроты.
В Python я сделал бы это:
range(1, 10, 2) + range(9, 0, -2)
В Ruby, который я только начинаю изучать, все, которое я придумал до сих пор:
(1..9).inject([]) { |r, num| num%2 == 1 ? r << num : r }.reverse.inject([]) { |r, num| r.unshift(num).push(num) }
Который работает, но я знаю, что должен быть лучший путь.Что это?
(1..9).step(2).to_a + (1..9).step(2).to_a.reverse
Но короче было бы
Array.new(10) { |i| 2 * [i, 9-i].min + 1 }
, если бы мы играли в гольф по кодексу :)