Ответы пользователя по тегу Алгоритмы
  • Формирования CSS-селектора для конкретного элемента DOM'а

    @yopopt
    Ваш вариант не далёк от истины, но я бы сделал как-то так:
    
    $(document).one('click', function(event) {
      var q = function (i, e) {
        if(e.tagName.toLowerCase() !== 'body') {
          if((!$(arr[0]).attr('id') && e.id) || $(e).length > 1 || i == -1)
            arr.push( 
              (e.id && "#"+e.id)
              || (e.className && e.tagName.toLowerCase()+"."+e.className) 
              || (e.tagName.toLowerCase() + ":eq(" + $(e).index() + ")")
            );
          if(e.id)
            return false;
        }
        else
          return false;
      }
      var arr = [];
      q(-1,event.target);
      $(event.target).parents().each(q);
      console.log(arr.reverse().join(' '));
    });


    Выдаёт максимально оптимизированный результат.
    Ответ написан
    Комментировать
  • Как найти уникальные последовательности символов в двух строках?

    @yopopt
    Набросал на javascript свой вариант конкретно для случая с подобными строками. Быть может пригодится.
    1. /**
    2. * strings - массив исходных строк
    3. * result - массив уникальные последовательности символов
    4. */
    5. var strings = [
    6.   'www.youtube.com/user/grickle#p/u/dasdas/0/tuhZuMl9StM',
    7.   'www.youtube.com/user/grickle#p/u/dasd as/3/hnvkIQHv0OQ',
    8.   'www.youtube.com/user/grickle#p/u/vcx bxcv/7/cjT2Huux34g',
    9.   'www.youtube.com/user/grickle#p/u/54354/2/Osex3fXi_OA'
    10.   ],
    11.   temp = [],
    12.   result = [],
    13.   repeat = {},
    14.   newStrings = {};
    15.   
    16.   /**
    17.    * Обходим исходный массив и разбиваем его по повторяющимся символам,
    18.    * здесь это слеши. Создаём объект с ключами из уникальных строк, а
    19.    * значения - индексы этих строк в разделённой оригинальной строке.
    20.    * одинаковые же части сохраняем в массив повторяющихся.
    21.    */
    22.   for(var i = 0; i<strings.length; i++) {
    23.     temp[i] = strings[i].split('/');
    24.     result[i] = '';
    25.     for(var j = 0; j<temp[i].length; j++) {
    26.       if(temp[i][j] in newStrings) {
    27.         repeat[temp[i][j]] = 1;
    28.       }
    29.       newStrings[temp[i][j]] = i;
    30.     }
    31.   }
    32.   
    33.   /**
    34.    * Склеиваем уникальные части строки в одну.
    35.    */
    36.   for(var key in newStrings) {
    37.     if(!(key in repeat))
    38.      result[newStrings[key]]+=(result[newStrings[key]]!=''?'/':'')+key;
    39.   }
    Ответ написан
    Комментировать