- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−99
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
pushkoff 17.02.2017 14:37 # 0
guest 17.02.2017 14:39 # +1
roman-kashitsyn 17.02.2017 14:48 # +4
> arr = left + right
Возможно, я что-то не понимаю в ваших рубях, но на первый взгляд тут противоречие.
roman-kashitsyn 17.02.2017 14:53 # +4
Автор кода вроде как хочет поиграть в иммутабельность и вернуть новый массив, но его мега оптимизация с if i == 0 ломает всю семантику: вернётся не новый массив, а ссылка на входной аргумент. Последующие модификации результата rotate могут менять (или не менять) оригинальный массив в зависимости от того, чему равнялось i. Удачной отладки.
bormand 17.02.2017 19:04 # +2
guest 17.02.2017 21:00 # +2
Dr_Stertor 17.02.2017 21:42 # 0
Unnumbered 21.02.2017 11:34 # +2