Задать вопрос
  • Как проверить что запрос выполняется дольше Х секунд?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    См. параметр timeout в настройках jQuery.ajax:


    timeout
    Type: Number
    Set a timeout (in milliseconds) for the request. A value of 0 means there will be no timeout. This will override any global timeout set with $.ajaxSetup(). The timeout period starts at the point the $.ajax call is made; if several other requests are in progress and the browser has no connections available, it is possible for a request to time out before it can be sent. In jQuery 1.4.x and below, the XMLHttpRequest object will be in an invalid state if the request times out; accessing any object members may throw an exception. In Firefox 3.0+ only, script and JSONP requests cannot be cancelled by a timeout; the script will run even if it arrives after the timeout period.
    Ответ написан
    Комментировать
  • Алгоритм переворота строки как реализовать?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. не нужно два цикла, достаточно одного;
    2. в JS нельзя записать в строку символ через array access, типа str[i] = "x" Так можно только читать.

    Поэтому предлагаю создать временную переменную, в которую собирать строку по символу, в обратном порядке:

    function reverse(str) {
      var i, len = str.length, result = "";
      for (i = len - 1;  i >= 0; i--) result += str[i];
      return result;
    }
    Ответ написан
    Комментировать
  • Как дописать значение к массиву если его надо получить промисом или задержкой?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Что-то типа такого:
    function getWithImages(result) {
    	return new Promise((res, rej) => {
    		
    		const elPromises = [];
    		
    		for (let key in result) {
    		  if (!result.hasOwnProperty(key)) continue;
    		  const element = result[key];
    		  element.introtext = h2p(element.introtext);
    		  element.fulltext = h2p(element.fulltext);
    		                  
    		  elPromises.push(
    		  	clientGI.search(element.title)
    			  .then(images => {
    			    element.images = images.map(image => [image.url, image.thumbnail]);
    			  });
    		  );
    		}
    		
    		Promise.all(elPromises).then(function() {
    			// все готовы
    			res(result);
    		});
    	});
    }
    
    const gotImagesPromise = getWithImages(results[0]);
    Ответ написан
    Комментировать
  • Как мне получить сначало число, потом пару букв?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    /**
     * Разбивает строку на три части: цифры, две буквы, две буквы.
     * Возвращает либо массив из трех элементов,
     * либо undefined
     */
    function getParts(str) {
      const re = /^(\d+)(\S{2})(\S{2})$/;
      const match = str.match(re);
      if (match) return match.slice(1);
    }
    
    getParts("5дмсм") // ["5", "дм", "см"]
    Ответ написан
    Комментировать
  • Как найти связные области в 3D?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Вроде бы, тут почти нечего читать по теме.
    Представьте кубик Рубика 3х3х3 со всеми внутренними кубиками.
    Каждый кубик это 1 или 0.

    Надо найти индексы связанных областей ("островов") из единичек.

    на пальцах
    Для плоского 2D и размера 5х5 например это могло бы выглядеть так:
    YX| 0 1 2 3 4
    --|-----------
    0 | 0 1 0 0 1
    1 | 1 1 0 1 1
    2 | 1 0 1 1 0
    3 | 0 1 1 0 0
    4 | 0 0 1 0 0


    Ячейки считать связанными, если не по диагонали, а точно сверху, снизу, справа или слева есть еще одна с 1. На примере выше две области связанны (нумерация слева направо и сверху вниз):
    [(1,0), (0,1), (1,1), (0,2)],
    [(4,0), (3,1), (4,1), (2,2), (3,2), (1,3), (2,3), (2,4)]


    В 3D добавляется третье измерение, третья ось для поиска соседей, третья координата.

    Про двухмерный поиск связных областей на Хабре.
    Адаптация к 3D, алгоритм маппинга координат в одномерный массив и оптимизация – на вашей совести.
    Ответ написан
    3 комментария
  • Почему при многократном вызове функции нет многократно возвращаемых значений?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    В консоли отображается последнее возвращённое значение.
    Функция вернула значение все 10 раз, но с ним ничего не делали. А консоль показала последнее.
    Еще пример
    >> 1, 2, 3, 4, 5;
    <– 5


    Во втором примере всё то же. Возвращенное значение ниже: undefined.
    Но перед этим 10 раз выполнился вывод в консоль через console.log().
    Ответ написан
    3 комментария
  • Как в javascript превратить 2 слова строки (если их 2), разделенных пробелом в camelCase?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    function camelCase(str) {
      return str
      .trim()
      .split(' ')
      .map((w, i, a) => {
        if (i === 0) return w.toLowerCase();
        return w.substr(0, 1).toUpperCase() + w.substr(1).toLowerCase();
      })
      .join('')
    }
    
    
    function test() {
      const testIn = ['Good Day', 'good night', 'Good Evening', 'Sleep', 'Go'];
      const testOut = ['goodDay', 'goodNight', 'goodEvening', 'sleep', 'Go'];
      for (let i = 0; i < testIn.length; i++) {
        const input = testIn[i];
        const output = camelCase(input);
        if (testOut[i] === output) console.log("Test passed: %s => %s", input, output);
        else console.error("Test failed: %s => %s", input, output);
      }
    }
    
    test();


    Фейлит только на "Go", который у вас противоречит "Sleep"
    Ответ написан
    Комментировать
  • Алгоритм поиска пустых прямоугольников?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Вроде бы, всё просто. Никакой NP-полноты.
    1. Разбить, как вы и описали, по гайдам на мелкие. Это максимальное число полигонов.
    2. Взять любой, и начать присоединять к нему смежные, насколько возможно.
    3. Взять следующий пустой не затронутый.
    4. Процесс останавливается, когда больше ни к одному 4-угольнику нельзя присоединить еще один.

    Поверхностно кажется, что так получится наименьшее возможное число. Хотя не гарантируется максимизация площадей. Хотя, пожалуй, такой подход может не найти оптимальный вариант, когда границы нескольких исходных блоков легли точно на одной линии. Тогда выиграет вариант, захватывающий обе пустоты. Представьте силуэт буквы «Т». Его можно замостить всего двумя прямоугольниками. Но алгоритм может прозевать такую возможность и предложить 3 блока.

    Представьте себе Г-образный набор блоков. Как ни крути, там не менее 2 в итоге получится. Заметьте, что в обоих вариантах у вас получилось по 9 прямоугольников.

    П.2 подробнее. Тут возможны разные стратегии. В частности:
    • Можно от блока «пойти» в одну сторону, присоединяя соседей, пока не упрётся в непустую область. Затем попытаться расшириться во вторую сторону всеим набранными блоками, до упора. Затем в третью и четвертую.
    • Можно идти спиралью. 1 шаг наверх, 1 шаг вправо, 1 шаг вниз, 1 шаг влево и т.д. пока подряд 4 шага ни один не даст прироста.
    Ответ написан
  • Конфликт rotate и scale?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Говорят, что операции в transform() выполняются справа налево.

    Попробуйте поменять местами scale() и rotate()
    Ответ написан
    2 комментария
  • Как оптимизировать данный код?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    В код вникать не хочется, но оптимизировать можно вот, что:
    1. не перебирать все возможные комбинации. Если отсортировать входной массив по возрастанию, можно остановиться на трёх подряд элементах, превышающих суммой лимит. Если в переборе пробуете менять наибольший элемент, а сумма уже превышена, искать правее уже не нужно.
    2. отбросить сразу крайние случаи вроде t == 0 или t < наименьшего из элементов - подумайте, какие ещё;


    Upd. я такое решение сделал, прошло. Не оптимизировал, полный перебор идёт.
    spoiler
    function chooseBestSum(t, k, ls) {
    
      /**
       * make next combination of N on bits in a 32-bit integer
       */
      function nextPerm(x) {
        // via https://stackoverflow.com/questions/506807/creating-multiple-numbers-with-certain-number-of-bits-set
        if (x === 0) return 0;
        const smallest     = (x & -x);
        const ripple       = x + smallest;
        const new_smallest = (ripple & -ripple);
        const ones         = ((new_smallest/smallest) >> 1) - 1;
        return ripple | ones;
      }
    
      let bestSum = null, bestN;
      const len = ls.length;
      if (len > 31) throw "Too many (over 31) options for this algorithm";
      const maxmask = (1 << len) - 1;
      
      if (len < k) return null; // not enough distances
      
      ls.sort((a, b) => a - b); // todo: skip checking rest of combinations once solid selection of elements exceeds t
    
      let mask = (1 << k) - 1; // initial mask value with k less significant bits on
      
      let sum, pos, n;
      while(true) {
        for(sum = 0, n = 0, pos = 0; pos < 32; pos++) {
          if (mask & (1 << pos)) {
            sum += ls[pos];
            if (++n === k) break;
          }
        }
    
        if (sum > bestSum && sum <= t) {
          bestSum = sum;
          bestN = mask;
        }
        
        mask = nextPerm(mask);
        
        if (mask > maxmask) break;
        if (mask < 0) break;
      }
      
      return bestSum;
    }
    Ответ написан
    Комментировать
  • Как узнать номер элемента массива в php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Как вы удаляете элементы? Если через unset() или array_filter(), индексы сохраняются.
    Ответ написан
    5 комментариев
  • Как реализовать алгорим задачи о сумме подмножеств?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Необязательно же искать оптимальный (кратчайший) набор, дающий нужную сумму?

    Предлагаю от простого к сложному двигаться:
    1. проверить каждое из N на остаток деления S % n = 0 Вдруг, найдётся число, которое надо просто повторить m раз, чтобы получить S
    2. проверить каждую пару чисел из N на разницу: если найдётся разница в 1, можно получить любое число через эти два
    3. проверить каждую тройку чисел из N Подзадача та же, получить 1. Есть 1 – есть любое целое.
    Ответ написан
    2 комментария
  • Как webpack'ом минифицировать не-модульный JS?

    sergiks
    @sergiks Автор вопроса
    ♬♬
    Решение: нужен специальный loader: script-loader

    Установить:
    npm install --save-dev script-loader

    Использовать:
    import exec from 'script-loader!./script.js';
    Ответ написан
    Комментировать
  • Заключение переменных в двойные кавычки, нормально или грех?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    В некоторых IDE подсветка синтаксиса не работает для случая переменной-в-строке. Для меня лично это основная причина избегать такого стиля.

    А вообще это «нормально».
    Ответ написан
    6 комментариев
  • Определить самое длинное число в строке?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    function find(str) {
      const matches = str.match(/\d+/g);
      return matches ? matches.reduce((p,c) => c.length > p.length ? c : p, '') : '';
    }
    
    find("abc 34 def 456 gggggggg 000000001 fggg 333399")
    // 000000001
    Ответ написан
    Комментировать
  • Отложенный постинг в сообщество Вконтакте?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Сервисы, как правило, не нарушают правил ВК, постят через API, белыми методами.
    Если действительно можете – можете написать скрипт самостоятельно. Зачем платить сервисам, раз так.

    В чем конкретно ваш вопрос?
    Ответ написан
    Комментировать
  • С помощью какого языка программирования/программы можно изменять холст изображения на компьютере автоматически?

    Можно записать Action в Photoshop и автомагически сконвертить, скажем, целую папку с изображениями.
    Можно на любом языке программирования (в т.ч. PHP, Python, JavaScript) написать нехитрый скрипт.
    Ответ написан
  • Зачем давать право выбора машине?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Эксперимент Машины Морали – пока чисто теоретический, и имеет больше отношения к исследованию общества, чем к воплощению в железе.

    Поэтому прямой ответ: машине выбор никто и не даёт.
    Ответ написан
    Комментировать
  • Почему я получаю такой слабый сигнал со звукоснимателя?

    Пассивный звукосниматель даёт уровень сигнала как микрофон. В карту втыкаете, наверное, не в микрофонный, а в линейный вход.

    Нужен предусилитель или микрофонный вход на карте или пульте или втыкайтесь в микрофонный вход в буке.

    upd. в описании карты пишут, в ней есть микрофонный предусилитель, но не понятно, как он включается: сам как-то определяет, что воткнули или через драйвер настраивается, или ждёт XLR разъём для микрофона..

    p.s. хороший паркет!
    Ответ написан
  • Вопрос по Javascript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Открытый блок запоминать где-то. Слушать document.body на событие клика и закрывать блок из переменной.

    Сделайте песочницу с именно вашей задачей.
    Ответ написан
    Комментировать