- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
def rotate_array(arr, i)
i = i%arr.size
return arr if i == 0
left = arr[0...i].reverse
right = arr[i..arr.size].reverse
arr = left + right
arr.reverse
end
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
def rotate_array(arr, i)
i = i%arr.size
return arr if i == 0
left = arr[0...i].reverse
right = arr[i..arr.size].reverse
arr = left + right
arr.reverse
end
https://knaidu.gitbooks.io/problem-solving/content/arrays/rotate_array.html
вообще не понял зачем reverse
http://ideone.com/9fVLsq
> arr = left + right
Возможно, я что-то не понимаю в ваших рубях, но на первый взгляд тут противоречие.
Автор кода вроде как хочет поиграть в иммутабельность и вернуть новый массив, но его мега оптимизация с if i == 0 ломает всю семантику: вернётся не новый массив, а ссылка на входной аргумент. Последующие модификации результата rotate могут менять (или не менять) оригинальный массив в зависимости от того, чему равнялось i. Удачной отладки.