Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 29.10.2015, 09:26
Профессор
Отправить личное сообщение для Brook Посмотреть профиль Найти все сообщения от Brook
 
Регистрация: 13.04.2012
Сообщений: 210

laimas, ну я бы не сказал что нужна НО рекурсия работает быстрее чем цикл - и в моем случае больше подходит именно она...
И должен уточнить что это если не ошибаюсь это единственный алгоритм который правильно работает с шагом (с разным шагом!!!) = у Рони было хорошее решение пока я не посчитал кооличество циклов)))) - 4 это уж слишком))
Так же мне нужна была адекватная работа с переменными (идем от простого = чем проще тем лучше) - в примерах рони было просто оочень много новых переменных особенно порадовало создание массива в перевом цикле (2го примера - см. выше)... за это отдельное СПАСИБО, РОНИ потому как я бы наверное так не ухитрился бы сделать так что это было хорошим "уроком"...
Вам тоже СПАСИБО, но больше за дискут нежели за код - так как я все равно не согласен с применением slice в данном вопросе ))))
Если я найду еще вариант решения задачи - обязательно отпишусь - если нет - закрою тему. ))))
Ответить с цитированием
  #32 (permalink)  
Старый 29.10.2015, 10:38
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Brook
НО рекурсия работает быстрее чем цикл
Классно!

А если еще раз подумать нужна ли она там, где задачей предписано смещаться (нет в массивах отступов, есть смещения) на одинаковую размерность вниз и в ширину?

алгоритм который правильно работает с шагом (с разным шагом!!!)

slice() может получать срезы любой размерности и что замечательно, о чем не должна болеть голова, это то, что он вернет остаток, если размерность указана больше его.

Чтобы обойти массив по вашим условиям не нужно никакой рекурсии и более того, чем больше заданная размерность смещения, тем меньше проходов в цикле будет требоваться.

так как я все равно не согласен с применением slice в данном вопросе

Вольному воля, мне все равно, хоть с карандашом в руках решайте. ) Но стоит заметить, и также о применении рекурсии, где она де-факто как стандарт и очень вредный, это получение дерева из базы. В этой задаче все наоборот - из данных лежащих в навал нужно получить на выходе упорядоченный массив. А ведь рекурсия в данном случае тоже совсем не нужна.
Ответить с цитированием
  #33 (permalink)  
Старый 29.10.2015, 11:44
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от laimas
Классно!
да, почитав, что он тут пишет, я понимаю, почему у него отрицательная репутация

1. я сделал "через" рекурсию потому, что хотел реализовать с помощью нее (спортивный интерес)
2. нужна ли здесь рекурсия? Нет, не нужна
3. быстрее ли работает рекурсия? Нет, не быстрей
Сообщение от Brook
Так же мне нужна была адекватная работа с переменными (идем от простого = чем проще тем лучше) - в примерах рони было просто оочень много новых переменных
4. был у меня более-менее нормальный код, а ты из него абвгдейку сделал
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #34 (permalink)  
Старый 29.10.2015, 12:52
Профессор
Отправить личное сообщение для Brook Посмотреть профиль Найти все сообщения от Brook
 
Регистрация: 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)
Ответить с цитированием
  #35 (permalink)  
Старый 29.10.2015, 12:54
Профессор
Отправить личное сообщение для Brook Посмотреть профиль Найти все сообщения от Brook
 
Регистрация: 13.04.2012
Сообщений: 210

Цитата:
да, почитав, что он тут пишет, я понимаю, почему у него отрицательная репутация
по мне так репутация вообще роли не играет - если вы мне "плюсанете" моя репутация станет овер 2 тасячи так что.... это не показатель(ну по мне так)
З.Ы. - а так же из-за того что я задавал много (на сегодня уже тупых) вопросов, когда только начанал изучать js, так что не считаю это трагедией
З.З.Ы - плюс ко всему у меня соотношение вопрос\ответ наверное 50\1 тагда как у вас наверное 1\1000 ))))

Последний раз редактировалось Brook, 29.10.2015 в 13:03.
Ответить с цитированием
  #36 (permalink)  
Старый 29.10.2015, 13:59
Профессор
Отправить личное сообщение для Brook Посмотреть профиль Найти все сообщения от Brook
 
Регистрация: 13.04.2012
Сообщений: 210

сравнил скорости.... мда...:
http://jsperf.com/matrix-reader-with-index-offset
Ответить с цитированием
  #37 (permalink)  
Старый 29.10.2015, 14:15
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Brook
однако должен заметить что код laimas не справляется с поставленной задачей если сменить размер смещения например с 2 на 3 , код падает:
Полная чушь, ибо нужно головой думать, а не копировать как есть то, что является просто концепцией.
Ответить с цитированием
  #38 (permalink)  
Старый 29.10.2015, 15:28
Профессор
Отправить личное сообщение для Brook Посмотреть профиль Найти все сообщения от Brook
 
Регистрация: 13.04.2012
Сообщений: 210

laimas,
так написали бы псевдокод - зачем людей вводить в замешательство, и подписали бы что это концепция - и все счасливы все думаю головой и доводят концепт до ума...
как я уже говрил я благодарен за дискут, но слушать о том что я не думую головой это уже крайность, что бы использовать ваш "концепт" его надо в корне переделать - могли просто остановить на первой версии коцепта который вы предложили
Цитата:
array.slice()
- не обязательно писать готовый код, но считаю что если вы предлагаете идею то она должна законченной а не оборванной на полуслове а законченная лишь на половину она теряет всякий смысл

Последний раз редактировалось Brook, 29.10.2015 в 15:35.
Ответить с цитированием
  #39 (permalink)  
Старый 29.10.2015, 15:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Информация к размышлению: не существует в природе готовой функции slice(), забыли, это в принципе как то радикально изменит концепцию получения необходимых элементов массива?
Ответить с цитированием
  #40 (permalink)  
Старый 20.10.2016, 10:49
Профессор
Отправить личное сообщение для Brook Посмотреть профиль Найти все сообщения от Brook
 
Регистрация: 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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите к js коду, написать html код Modrih Элементы интерфейса 8 16.06.2015 18:08
Перебор массива кнопкой Giyas Элементы интерфейса 14 28.01.2015 23:00
Сортировка массива по возрастанию другого массива. vas88811 Events/DOM/Window 4 12.01.2014 10:31
Перебор массива - вложенный цикл SWin Общие вопросы Javascript 35 27.12.2013 05:06
Перебор массива объектов Триви jQuery 12 26.08.2011 09:22