Задать вопрос
  • Что подразумевается под поиском двух линий при создании контейнера?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    У вас есть куча вертикальных столбиков с заданными высотами. Вам надо взять 2 столбика так, чтобы между ними было больше всего воды. Они образуют загогулину вроде |____| - это и есть контейнер, в котором может быть вода (если мир двумерный). Например если в примере взять самый левый (1) и самый правый (7) столбики, то высота воды будет 1 (иначе она слева выльется), а ширина будет 8 - итого получается 1*8=8 единиц воды.

    Формально, вам надо найти такие i<j, что min(h[i],h[j])*(j-i) максимально.
    Ответ написан
    2 комментария
  • Как обновлять сертификаты в Docker Compose для Nginx с автоматическим перезапуском контейнера?

    @d-stream
    Готовые решения - не подаю, но...
    попросить nginx перечитать конфиги
    например nginx -t && nginx -s reload
    Ответ написан
    Комментировать
  • Как обновлять сертификаты в Docker Compose для Nginx с автоматическим перезапуском контейнера?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Можно попробовать Angie - он собирается с модулем http_acme - сервер сам себе выпустит сертификат и будет следить за его актуальностью.
    Ответ написан
    Комментировать
  • Как обновлять сертификаты в Docker Compose для Nginx с автоматическим перезапуском контейнера?

    @dronmaxman
    VoIP Administrator
    nginx:
      container_name: nginx_container
      image: nginx
      ports:
        - 80:80
        - 443:443
      networks:
        - private
        - public
      restart: always
      volumes:
        - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
        - ./nginx/conf.d/:/etc/nginx/conf.d/:ro
        - ./certbot/www:/var/www/certbot/:ro
        - ./certbot/conf/:/etc/nginx/ssl/:ro
      command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
    
    certbot:
      image: certbot/certbot
      volumes:
        - ./certbot/www/:/var/www/certbot/:rw
        - ./certbot/conf/:/etc/letsencrypt/:rw
      entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
    Ответ написан
    6 комментариев
  • Почему не срабатывает prototype reverse на строке?

    byte916
    @byte916
    Функция Array reverse не создаёт новый массив а изменяет исходный.
    Строки являются неизменяемым типом.
    Применение к строке этой функции пытается изменить порядок букв в строке и возникает исключение.
    Ответ написан
    Комментировать
  • В чем заключается суть бинарного поиска неотсортированного массива?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Ну ведь тут массив же отсортирован. Хоть и с приколом: он сдвинут. Можно тем же бинарным поиском найти, где там "разрыв" происходит, а после у вас 2 отсортированных куска. Или сразу модифицировать бинпоиск.
    Представьте, что у вас массив, где сначала идут 1, а потом 0. Можете найти в нем, где 1 переходит в 0?

    Или смотрите так: ищите вы x. Взяли значение a[m]. Можете, посмотрев на a[l], a[m], a[r] и x понять, в какой половине лежит x?

    Edit: ах, тут числа могут быть одинаковыми. Тогда бинпоиск тут не работает. Ибо может быть тест {1,1,1,2,1,1} - и тут можно 2 в любую позицию поставить. И, если вам надо эту 2 найти, то вам придется просмотреть все числа, иначе вы ее не найдете. Бинпоиск возможен, если первое и последнее числа разные.
    Ответ написан
    3 комментария
  • Как сделать "двойную" сортировку в массиве объектов?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Сортируем существующий массив:

    arr.sort((a, b) => (a.rooms - b.rooms) || (a.square - b.square));
    
    // или, в более общем виде
    
    const sort = (arr, ...keys) =>
      arr.sort((a, b) => {
        let diff = 0;
        keys.find(k => diff = a[k] - b[k]);
        return diff;
      });
    
    
    sort(arr, 'rooms', 'square');

    Создаём отсортированный новый:

    const sorted = (arr, keys) => arr
      .map(n => [ n ].concat(keys(n)))
      .sort((a, b) => {
        let diff = 0;
        for (let i = 0; ++i < a.length && !(diff = a[i] - b[i]);) ;
        return diff;
      })
      .map(n => n[0]);
    
    
    const sortedArr = sorted(arr, n => [ n.rooms, n.square ]);
    Ответ написан
    4 комментария
  • Как сделать проверку на корректную вложенность в скобки ((([])){})?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    /**
     * @param {string} s
     * @return {boolean}
     */
    var isValid = function (s) {
        //hash function for partheses
        let map = { "}": "{", "]": "[", ")": "(" };
        let temp = [];
    
    
    
        //Iterates
        for(i in s){
            //if a index that matches a closing bracket - continue
            if(s[i] in map){
                //if the temp isn't empty, and the top of the stack is that closing bracket - pop it
                if(temp.length > 0 && temp[temp.length-1] === map[s[i]]){
                    temp.pop();
                }
                //else we break it - return false
                else{
                    return false;
                }
            }
            //else we push the opening bracket onto the stack
            else{
                temp.push(s[i]);
            }
        }
        //else we return true if the temp is empty
        return temp.length === 0;
    };


    Прямо в литкоде есть решения, можно открыть Solutions, отфильтровать по языку и читать с описанием, можно перейти к all submissions и выбрать самое быстрое решение.
    Ответ написан
    5 комментариев
  • По какой логике работает типизация ListNode во вложенном массиве?

    в песочнице работает без ошибок
    А чего бы ему ошибаться? Песочница типы не проверяет, только компилирует TS в JS, чтобы его можно было исполнить.
    В итоге остаётся только это*:
    const lists = [[1,4,5],[1,3,4],[2,6]]
    
    function mergeKLists(lists) {
        if(lists.length) return lists.flat(Infinity)
        return null
    };
    
    console.log(mergeKLists(lists))

    А если уж совсем упростить, то вот это:
    [[1,4,5],[1,3,4],[2,6]].flat(Infinity)
    Тут падать нечему.

    А вот если в нормальной IDE такое написать, сразу видно, что у вас в lists ерунда содержится:
    662cd790d4dd1476028947.png
    Функция на вход ожидает массив, внутри которого содержится объект класса ListNode (или null), а вы передаёте массив массивов number, на что вам TS и указывает (но окольными путями).
    Ну и вернуть вы должны ListNode, а ваша реализация возвращает всё тот же массив из number.

    Задача, на самом деле, какая-то странная - непонятно откуда вообще вылез этот ListNode и зачем он. За скобками осталась важная часть про то, что вам нужно вдобавок реализовать сериализацию ListNode <-> массив. Хотя, по сгенерированной заготовке решения предполагается, что вам уже на вход придут данные в нужном виде и вернуть вам нужно объект ListNode - может, leetcode сам этот класс и его сериализацию-десериализацию реализует?

    * Класс тоже остаётся, но он никак в коде не используется, поэтому я его опустил.
    Ответ написан
    2 комментария
  • По какой логике bind принимает только первый контекст?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Метод bind возвращает новую функцию, которая уже игнорирует свой контекст и передаёт тот, который запомнила.
    Если в коде, то это примерно так работает:
    Function.prototype.bind = function bind(ctx, ...args) {
        const originalFunction = this;
        return function (...args2) {
            return originalFunction.apply(ctx, args.concat(args2));
        };
    }
    Как видите, возвращаемая функция уже никак не использует свой this.
    Соответственно второй вызов bind его будет передавать в пустоту, однако может добавить аргументы.
    Ответ написан
    4 комментария
  • Почему line-clamp для обрезания строк отображает текст ниже троеточия?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Padding уберите у параграфа. Используйте отступы на внешнем элементе, если необходимо.

    Кстати, попробуйте увеличить паддинг до больших значений (~50px), увидите как работает лайн-кламп.
    Ответ написан
    4 комментария
  • В чем заключается суть оптимизации скорости обновления компонентов через useReducer?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега React
    Почему мои поиски в попытках найти логику хука провалились
    Кто ж вас знает ¯\_(ツ)_/¯

    как выйти на след
    Я поиском по репе на Гитхабе воспользовался: https://github.com/facebook/react/blob/6f18664b82b...
    Ответ написан
    2 комментария
  • Как nest/тайпскрипт реализует IoC в компиляторе?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Ответ написан
    Комментировать
  • По какому принципу декораторы работают в Node JS?

    SagePtr
    @SagePtr
    Еда - это святое
    Это синтаксис TypeScript, а не NodeJS: https://www.typescriptlang.org/docs/handbook/decor...
    Ответ написан
    Комментировать
  • Как правильно задать тип события мыши?

    @luxurypluxury
    const divRef = useRef<HTMLDivElement | null>(null);
    
    
    function scroll(event: MouseEvent<HTMLDivElement>) { ... }
    Ответ написан
    Комментировать
  • Как выполнить команды гита для вложенного репозитория?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    Удалить папку .git в папке project и не страдать ерундой
    Ответ написан
    1 комментарий
  • Как выполнить команды гита для вложенного репозитория?

    Daemon23RUS
    @Daemon23RUS
    git submodule же ...
    добавьте в свой project репозиторий субмодули server, client, db Работайте в каждой папке как в независимом репозитории. Есть ньюанс, после коммита/пуша субмодуля, надо коммиттить/пушить основной репозиторий.
    К сожалению мало сценариев использовал, всего несколько раз настроил и работал, уже и не упомню всех нюансов.
    Надеюсь что коллеги, кто в теме, дополнят большей информацией.
    P.S. git clone --recurse-submodules Развернет ваш проект со всеми вложенными репозиториями
    Ответ написан
    Комментировать
  • Как выполнить команды гита для вложенного репозитория?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Команды гита уже всегда применяются к текущему вложенному репозиторию. Но если выполнить команду git init внутри рабочего каталога существующего репозитория, то ничего не произойдет. Так что скорее всего эти вложенные репозитории у вас не создались.

    Если инициализировать репозиторий в другой папке где-то вовне репозитория, а потом её перенести внутрь project, тогда получите желаемое.

    Но общий репозиторий будет игнорировать подкаталог вложенного репозитория. Это для вас наверное станет неожиданностью тоже.
    Ответ написан
    Комментировать
  • Как выполнить команды гита для вложенного репозитория?

    vhood
    @vhood
    Не забывайте отмечать решения
    Если project тоже является проектом, у которого должен быть свой репозиторий, то вложенные проекты нужно добавить в .gitignore
    /server/
    /client/
    /db/

    Если вложенные папки уже отслеживаются гитом, нужно так же удалить их для гита
    git rm -r --cached server
    git rm -r --cached client
    git rm -r --cached db
    
    git add .
    Ответ написан
    Комментировать
  • С какого количества записей индексация имеет смысл?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Делать индексацию ради индексации - плохая затея.
    На малом количестве записей она либо заметна не будет, либо планировщик просто не будет его (индекс) использовать.
    Когда и на что делать индексы лучше определять:
    - Это основной юз. кейс приложения - например поиск нужного документа по номеру ФЗ
    - Объемное тестирование показало большую деградацию производительности

    Также меня интересует само индексированное поле. Если это просто имя пользователя (Иван, Алексей, Елена), то:
    1. Индекс лучше не строить, т.к. селективность будет большой и индекс будет редко использоваться
    2. Создать индекс на нормализованное имя - CREATE INDEX name_idx ON users (lower(name));

    Но если это username/login (т.е. неизменяемый логин пользователя), то в принципе нормально.
    Ответ написан
    Комментировать