• Какая сложность данного алгоритма?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Сложность: простой.

    Если вам нужна ассимптотическая временная сложность - то O(n).
    Эта сложность меряется в зависимости от размера входных данных. Какие у вас входные данные-то? Строка slug, url.

    Эти данные конкатенируются (O(n)) и передаются библиотеке. До 10 раз. Библиотека их парсит, делает dns запрос, открывает сетевое подключение к web серверу, получает данные, парсит ответ. Там тоже есть линейная, видимо, зависимость от длины строки. Ее надо распарсить, записать в сетевой сокет и так далее. Вот получение данных по уже установленному http соединению от длины строки не зависит, поэтому в сложности алгоритма не учавствует.
    Ответ написан
    1 комментарий
  • Websocket с чего начать изучение?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Webhook - это принцип работы через запросы к твоему http-серверу, а не через вебсокеты.

    Т.е. тебе не надо для этой задачи изучать вебсокеты. Тебе надо изучать создание веб-сервера. А лучше - основы программирования, что такое сервер, http протокол и т.д. Но, в первую очередь, всё же стоит изучить задачу.
    Ответ написан
    1 комментарий
  • Круглые кавычки Regex, что изменить?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    $re = '/(?P<shortcode>\[(?P<name>[\w\-]{3,})(?:\s+(?P<attrs>[\w\d,\s="\'\-+#%!~`&.:\/()?|]+))?\](?:(?P<content>[\w\d\s,!@#$%^&*(\\)="\'\-+&.:\/?|<>]+)(?:\[\/[\w\-\_]+\]))?)/m';

    Значится где-то вооо-о-о-о-ооо так!
    Ответ написан
    1 комментарий
  • Как практиковаться в программировании?

    DevMan
    @DevMan
    да берешь и делаешь.
    походу разгребаешь возникшие проблемы/вопросы.

    волшебных кнопки/рецептов не существует.
    Ответ написан
    Комментировать
  • Возможно ли в PHP по заголовкам точно определить устройство и Браузер?

    И да и нет.
    Вернее не совсем.
    В 100% случаев это не определить, тк содержимое заголовка клиент может менять
    Но если это исключить, то большинство случаев обработать можно, и такую задачу уже много раз решали.
    Ответ написан
    Комментировать
  • Как структурировать бд?

    RNSNS
    @RNSNS
    Symfony Backend developer
    Попробуйте создать ещё одну таблицу, которая будет называться product_coutry
    В ней должно быть только 2 поля product_id и country_id
    Так и создаются связи M2M (ManyToMany)
    Ответ написан
  • Как структурировать бд?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Отношение Many-to-Many строится через промежуточную таблицу связи, поля которой ссылаются на две основные таблицы.
    products_countries (product_id, country_id)
    Ответ написан
  • Есть ли способ добавить свои методы не трогая модель в laravel?

    RNSNS
    @RNSNS
    Symfony Backend developer
    На самом деле это очень легко

    #src/Model/ProductProxy.php
    <?php
    
    namespace App\Model;
    
    use ВашПакет\Product;
    
    class ProductProxy extends Product
    {
        public function newMethod(): void
        {
            echo "Hello World!";
        }
    }
    Ответ написан
    Комментировать
  • Как правильно назвать pivot-таблицу при отношении многие ко многим в laravel?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Правильный, с точки зрения ларавел, вариант указан в документации, которую ты почему-то не стал читать.
    Ответ написан
    7 комментариев
  • Почему спидтест дает 100mbit/s а bittorrent 1.3?

    @rPman
    Спидтест нужно смотреть, выбрав другую страну.
    Торенты - одни из самых нестабильных (слабо прогнозируемых) методов проверки скорости.

    Но главное - в подавляющем большинстве случаев интернет можно поделить на три зоны - твой город/область, страна, мир. Скорость до узлов (сидов загружаемого торента) в этих зонах отличается с понижением, самая быстрая (обычно 100мбит или максимум от провайдера) это город/область, заметно медленнее - несколько десятков мегабит это страна, и считанные мегабиты - мир.

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

    Само собой все сложнее, есть еще личные ограничения сидеров, текущая нагрузка на линиях между провайдерами и куча других условий, но чаще выглядит все как сказано выше.
    Ответ написан
    Комментировать
  • Как оптимизировать reduce?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Массив дат можно вынести наружу, что
    1) не будет пересоздавать переменную каждый раз.
    2) сделает решение более гибким
    let a =  [
       {
          "code":"CL",
          "tnved10":"7318158100",
          "2019":"33",
          "2020":"0.00",
          "2021":"0.00"
       },
       {
          "code":"CN",
          "tnved10":"7318158100",
          "2019":"7540001.66",
          "2020":"8164813.34",
          "2021":"20980774.64"
       }]
    let b = a.reduce((acc, current) => {
      [2019, 2020, 2021].forEach(i => acc[i] += Number(current[i]))
      return acc
    }, {'2019': 0, '2020': 0, '2021': 0});
    console.log(b)


    Типа так:
    const years = [2019, 2020, 2021]
    let b = a.reduce((acc, current) => {
      years.forEach(i => acc[i] += Number(current[i]))
      return acc
    }, {'2019': 0, '2020': 0, '2021': 0});


    Можно ещё сократить, но уже в ущерб читаемости.
    Или можно убрать инициализацию начального значения аккумулятора, перенеся проверку ключа на то, что это год внутрь. Правда это несколько увеличит код внутри reduce, но сделает более гибким код.
    Ответ написан
    Комментировать
  • Как в laravel построить сложную логику?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Бизнес-логике - не место в контроллере.

    AppServiceProvider
    public function boot(){
    Validator::extend('count_books', function($attribute, $value, $parameters) {
            $count = IssueBook::where('client_id', $value)->where('is_returned', false)->count()
            return $count < 2;
    });
    }
    
    StoreRequest
    public function rules()
      {
        return [
          'category_id' => 'exists:App\Category,id',
          'client_id' => 'exists:App\Client,id|count_books',
          'book_id' => 'exists:App\Book,id',
          'days_issued' => 'nullable|string',
          'is_returned' => 'nullable|boolean',
          'return_date' => 'nullable|date',
        ];
      }
    Ответ написан
  • Как улучшить код, который проверяет наличие элемента в массиве и его значение?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Тут вопрос не столько в сокращении сколько в осмысленности.

    И ответ зависит от двух вводных, которые мы не знаем:
    1. по какой причине элемент 'test' может отсутствовать
    2. какие ещё значения могут быть у $arr['test']

    Если совсем всё равно на всё и пишем говнокод-стайл лишь бы покороче, то, как правильно написано в соседнем ответе - empty().

    Если элемент обязательно должен присутствовать, то либо убираем проверку на isset совсем, либо - если это интерактивное приложение - выносим отдельно, и при отсутствии элемента сообщаем об ошибке. Пусть даже и тупо 400 кодом.

    Если у $arr['test'] не могут быть другие значения, кроме true, то тоже проверить, и выбросить ошибку, если значение какое-то другое.
    Ответ написан
    Комментировать
  • Как найти 3 одинаковых числа, идущих подряд в массиве js?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Задания запрещены правилами.
    Вариантов решений куча.
    Например, можно использовать счётчик совпадений. Надо хранить предыдущее значение и сравнивать его с текущим. Если они равны, то счётчик увеличить, иначе сбросить.
    Если счётчик равен 3, то выход true
    Ответ написан
    Комментировать
  • Как найти 3 одинаковых числа, идущих подряд в массиве js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    для первой версии решения учебного задания можно и «на пальцах»:
    сравнивать с двумя предыдущими
    const has3 = arr => {
      for (let i = 2; i < arr.length; i++) {
        if (arr[i] === arr[i - 1] && arr[i] === arr[i - 2]) {
          return true;
        }
      }
      return false;
    }
    
    has3([1,2,3,3,4,5,5,5,6]) // true
    has3([1,2,3,3,4,5,5,6,6]) // false


    Подумайте, как можно сделать решение более универсальным, чтобы задавать параметром необходимое число идущих подряд, которое ищем.
    Ответ написан
    9 комментариев
  • Как использовать сессию для всех клиентов одновременно?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Единственно правильный ответ - никак.

    Такой вопрос можно задать только от безграмотности. От непонимания того, как работают сессии.
    Потому что сессия в обязательном порядке блокирует файл с данными на время работы с ним. И именно отсюда возникают многочисленные вопросы "а почему у меня долгий процесс в одной вкладке блокирует сайт во всех остальных вкладках?". А теперь представим, что один и тот же файл блокирует не один юзер, а все по очереди. Таймаут будет постепенно накапливаться, и в итоге сайт у всех пользователей сначала начнет ощутимо подтормаживать, а потом и вовсе встанет колом.
    Поэтому такая вещь, как "сессия сразу для всех пользователей" заведомо является бессмыслицей.

    Если под "сессией" имелось в виду общее хранилище для всех пользователей, то оно называется "база данных". И в этом смысле "БД не предлагать" выглядит беспочвенным капризом. Как правильно заметил N в комментарии, такое заявление звучит как "Как кушать суп? Ложку не предлагать."
    Такие заявления надо всегда подробно обосновывать. И в этом случае вам либо действительно подскажут, как обойтись без БД, либо объяснят, что это просто блажь.

    Если хранилище не нужно, то есть значение переменной не меняется со временем, то, как правильно сказано в соседнем ответе, просто делается константа в конфигурационном файле, который по умолчанию включается во все скрипты.
    Ответ написан
    Комментировать
  • Почему выдает ошибку #1050 - Table 'users' already exists?

    paran0id
    @paran0id
    Умный, но ленивый
    CREATE TABLE IF NOT EXISTS users (
    Ответ написан
    Комментировать
  • Как написать такой SQL запрос?

    rozhnev
    @rozhnev Куратор тега SQL
    Fullstack programmer, DBA, медленно, дорого
    select d.DEPARTMENT_ID, d.DEPARTMENT_NAME, COUNT(e.EMPLOYEE_ID)
    from departments d
    left join employees e on d.DEPARTMENT_ID = e.DEPARTMENT_ID
    group by d.DEPARTMENT_ID, d.DEPARTMENT_NAME;


    SQL online editor
    Ответ написан
    Комментировать
  • Как написать такой SQL запрос?

    iMedved2009
    @iMedved2009
    Не люблю людей
    select 
      departments.id, 
      departments.department, 
      count(*) as count 
    from departments 
    join employees on employees.department_id = departments.id 
    group by departments.id, departments.name;


    В случае если нам нужны департаменты у которых нет сотрудников inner join меняем на left join

    select 
      departments.id, 
      departments.department, 
      count(*) as count 
    from departments 
    left join employees on employees.department_id = departments.id 
    group by departments.id, departments.name;
    Ответ написан
    4 комментария