29.10.2015, 09:26
|
Профессор
|
|
Регистрация: 13.04.2012
Сообщений: 210
|
|
laimas, ну я бы не сказал что нужна НО рекурсия работает быстрее чем цикл - и в моем случае больше подходит именно она...
И должен уточнить что это если не ошибаюсь это единственный алгоритм который правильно работает с шагом (с разным шагом!!!) = у Рони было хорошее решение пока я не посчитал кооличество циклов)))) - 4 это уж слишком))
Так же мне нужна была адекватная работа с переменными (идем от простого = чем проще тем лучше) - в примерах рони было просто оочень много новых переменных особенно порадовало создание массива в перевом цикле (2го примера - см. выше)... за это отдельное СПАСИБО, РОНИ потому как я бы наверное так не ухитрился бы сделать так что это было хорошим "уроком"...
Вам тоже СПАСИБО, но больше за дискут нежели за код - так как я все равно не согласен с применением slice в данном вопросе ))))
Если я найду еще вариант решения задачи - обязательно отпишусь - если нет - закрою тему. ))))
|
|
29.10.2015, 10:38
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Brook
|
НО рекурсия работает быстрее чем цикл
|
Классно!
А если еще раз подумать нужна ли она там, где задачей предписано смещаться (нет в массивах отступов, есть смещения) на одинаковую размерность вниз и в ширину?
алгоритм который правильно работает с шагом (с разным шагом!!!)
slice() может получать срезы любой размерности и что замечательно, о чем не должна болеть голова, это то, что он вернет остаток, если размерность указана больше его.
Чтобы обойти массив по вашим условиям не нужно никакой рекурсии и более того, чем больше заданная размерность смещения, тем меньше проходов в цикле будет требоваться.
так как я все равно не согласен с применением slice в данном вопросе
Вольному воля, мне все равно, хоть с карандашом в руках решайте. ) Но стоит заметить, и также о применении рекурсии, где она де-факто как стандарт и очень вредный, это получение дерева из базы. В этой задаче все наоборот - из данных лежащих в навал нужно получить на выходе упорядоченный массив. А ведь рекурсия в данном случае тоже совсем не нужна.
|
|
29.10.2015, 11:44
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от laimas
|
Классно!
|
да, почитав, что он тут пишет, я понимаю, почему у него отрицательная репутация
1. я сделал "через" рекурсию потому, что хотел реализовать с помощью нее (спортивный интерес)
2. нужна ли здесь рекурсия? Нет, не нужна
3. быстрее ли работает рекурсия? Нет, не быстрей
Сообщение от Brook
|
Так же мне нужна была адекватная работа с переменными (идем от простого = чем проще тем лучше) - в примерах рони было просто оочень много новых переменных
|
4. был у меня более-менее нормальный код, а ты из него абвгдейку сделал
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
29.10.2015, 12:52
|
Профессор
|
|
Регистрация: 13.04.2012
Сообщений: 210
|
|
Цитата:
|
был у меня более-менее нормальный код, а ты из него абвгдейку сделал
|
... ну спорить не буду = это так,
однако, должен прояснить ситуацию - мне нужено было решение для с++(наверное зря не сказал раньше, но не думал что такая "шумиха" поднимится), поэтому и выбрал рекурсию, если отойти от этого факта тогда да slice вполне можно было бы использовать, однако должен заметить что код laimas не справляется с поставленной задачей если сменить размер смещения например с 2 на 3 , код падает:
var a = [
['01', '02', '03', '04'],
['05', '06', '07', '08'],
['09', '10', '11', '12'],
['13', '14', '15', '16']
], b = [], i, s = [B]2[/B];
for(i = 0; i<a.length; i += s) {
b.push([a[i].slice(0, s), a[i+1].slice(0, s)], [a[i].slice(s), a[i+1].slice(s)])
}
console.log(b)
|
|
29.10.2015, 12:54
|
Профессор
|
|
Регистрация: 13.04.2012
Сообщений: 210
|
|
Цитата:
|
да, почитав, что он тут пишет, я понимаю, почему у него отрицательная репутация
|
по мне так репутация вообще роли не играет - если вы мне "плюсанете" моя репутация станет овер 2 тасячи так что.... это не показатель(ну по мне так)
З.Ы. - а так же из-за того что я задавал много (на сегодня уже тупых) вопросов, когда только начанал изучать js, так что не считаю это трагедией
З.З.Ы - плюс ко всему у меня соотношение вопрос\ответ наверное 50\1 тагда как у вас наверное 1\1000 ))))
Последний раз редактировалось Brook, 29.10.2015 в 13:03.
|
|
29.10.2015, 13:59
|
Профессор
|
|
Регистрация: 13.04.2012
Сообщений: 210
|
|
|
|
29.10.2015, 14:15
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Brook
|
однако должен заметить что код laimas не справляется с поставленной задачей если сменить размер смещения например с 2 на 3 , код падает:
|
Полная чушь, ибо нужно головой думать, а не копировать как есть то, что является просто концепцией.
|
|
29.10.2015, 15:28
|
Профессор
|
|
Регистрация: 13.04.2012
Сообщений: 210
|
|
laimas,
так написали бы псевдокод - зачем людей вводить в замешательство, и подписали бы что это концепция - и все счасливы все думаю головой и доводят концепт до ума...
как я уже говрил я благодарен за дискут, но слушать о том что я не думую головой это уже крайность, что бы использовать ваш "концепт" его надо в корне переделать - могли просто остановить на первой версии коцепта который вы предложили
- не обязательно писать готовый код, но считаю что если вы предлагаете идею то она должна законченной а не оборванной на полуслове а законченная лишь на половину она теряет всякий смысл
Последний раз редактировалось Brook, 29.10.2015 в 15:35.
|
|
29.10.2015, 15:46
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Информация к размышлению: не существует в природе готовой функции slice(), забыли, это в принципе как то радикально изменит концепцию получения необходимых элементов массива?
|
|
20.10.2016, 10:49
|
Профессор
|
|
Регистрация: 13.04.2012
Сообщений: 210
|
|
Готовое решение с for:
var arr = [],
step = 5, // offset between choosen positions
size = 11; // grid size ~ 11x11
for(i = 0; i < size; i++) { // fill array
arr.push([]);
var str = '';
for(j = 0; j < size; j++) {
arr[i][j] = i * size + j;
str+=addZero(''+arr[i][j], 3)+', ';
}
console.log(str); // draw array
}
for( i = 0 ; i + size * step < arr.length * size; i+=step) { // use ' i+=step' to start from last X pos (ex. 0-1, 1-2), else use ' i+=step+1' to reduce repetition (ex. 0-1, 2-3)
var row = Math.floor(i / size),
column = Math.floor(i % size);
if( row == Math.floor((i + step) / size) && row % step == 0) {
console.log(
'-----'+
arr[row][column]+","+
arr[row][column + step]+","+
arr[row + step][column]+","+
arr[row + step][column + step]
);
}
}
function addZero(str,length) { // add 0 to fill str length
while(str.length < length) {
str = '0'+str;
}
return str;
}
Последний раз редактировалось Brook, 20.10.2016 в 14:31.
|
|
|
|