Задать вопрос
  • Как объединить одинаковые данные элемента с одним отличающимся значением?

    pLavrenov
    @pLavrenov
    Разработка сайтов
    foreach ($list as $item)
    {
        if ($arList[$item["ID"]])
        {
            $arNums[] = $item["PHONE_NUMBER"];
            $arList[$item["ID"]]["PHONE_NUMBER"] = $arNums;
            continue;
        }
        $arList[$item["ID"]] = $item;
    }


    Опишу логику.
    1) Нужно вставить Else чтобы было так: если в итогом массиве есть Итем с таким ID то добавляем в этот Итем (в итоговом массиве) телефон, если нет то добавляем в итоговый массив новый итем целиком.
    (сейчас получается что если ИД есть то добавлем в него телефон, и всеравно вставляем в конец массива этот Итем)
    2) $arNums[] = $item["PHONE_NUMBER"]; можно проследить что это вообще балласт и не используется
    3) На всякий случай добавить проверку есть ли в Итеме итогового массива такой номер телефона и если нет то добавляем, как проверить
    4) continue - читаем документация, он тут вообще не к месту.
    Ответ написан
    Комментировать
  • Как лучше сделать такой круглый вырез в блоке?

    Ankhena
    @Ankhena Куратор тега Вёрстка
    Нежно люблю верстку
    Обычный радиальный градиент
    Ответ написан
    Комментировать
  • Как заставить бота ожидать ввода следующей строки?

    @ultraevs
    Student
    Вам необходим register_next_step_handler

    @bot.message_handler(chat_id=[], commands=['msg'])
    def admin_rep(message):
        if message.text == '/msg':
            bot.send_message(message.chat.id, 'Введите сообщение')
            bot.register_next_step_handler(message, step)
    
    
    def step(message):
        text = message.text
        bot.send_message(message.chat.id, text)


    почитать про него можно тут: https://github.com/eternnoir/pyTelegramBotAPI/blob...
    Ответ написан
    1 комментарий
  • Как передать параметр в message_handler?

    AKotenko
    @AKotenko Автор вопроса
    None
    Решил вопрос использованием FSM
    Ответ написан
    Комментировать
  • Как с помощью grid сделать такое?

    Seasle
    @Seasle Куратор тега CSS
    Ответ написан
    Комментировать
  • Как fill принимает массив умноженный на long long?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Арифметика указателей. Это получается указатель на за-последним элементом массива, как ::end() у коллекций.
    Ответ написан
    Комментировать
  • В чем разница между delete и nullptr?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    g = nullptr не удалаят память, оно просто записывает в переменную g значение со смыслом - "указатель вникуда". Память при этом остается нетронутой и к ней можно обращаться, что вы и делаете, запомнив указатель в другой переменной.

    delete[] же освобождает память, а значит, все последующие обращения к ней, что при помощи g, что при помощи gg - будут вызывать UB
    Ответ написан
    Комментировать
  • Как многоуровневые элементы DOM неизвестного уровня вложенности преобразовать в JSON?

    profesor08
    @profesor08 Куратор тега JavaScript
    Вот пример рекурсии, которая разберет все html элементы и создаст из них json.

    const ul = document.querySelector("ul");
    
    const flatAttributes = (attributes) => {
      return Array.from(attributes).reduce((acc, attr) => {
        acc[attr.nodeName] = attr.nodeValue;
    
        return acc;
      }, {});
    };
    
    const toJson = (element) => {
      const node = {
        type: element.nodeName,
        props: flatAttributes(element.attributes),
        children: Array.from(element.children).map(toJson),
      };
    
      return node;
    
    };
    
    console.log(toJson(ul));


    Но стоит отметить, что твою задачу решать надо другим путем. У тебя уже должен быть какой-то json, и работать ты должен с ним. Вносить в него изменения и отображать их в браузере, отправлять на сервер и тд. После перестановок перестраивать json, определять что было переставлено и переставлять.
    Ответ написан
    2 комментария
  • Обязательно ли читать книгу по языку/технологии что бы быть тру и продвинутым кодером?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Вы не найдёте ни одного авторитетного программиста с мировой известностью, который бы утверждал, что курсы и видео-уроки лучше книг. Обычно это утверждают либо профаны, оправдывающие своё нежелание читать, либо авторы курсов, делающие деньги на лентяях и глупцах. И я лично за 18 лет в отрасли встретил множество программистов, но ни одного хорошего, выучившегося по курсам и видео-урокам.

    Видеокурс может запилить любой дурак. Чтобы написать книгу, нужно иметь авторитет достаточный для издательства. Кроме того, текст пройдёт редактуру нескольких профессионалов. Поэтому знания в книгах качественные и систематизированные. Для начинающего это очень важные качества.

    К тому же, после достижения профессионального уровня достаточного чтобы называться специалистом, вы обнаружите, что необходимые на этом уровне знания можно почерпнуть только из документации. То есть всё равно придётся читать. Много и часто.

    Наконец, постоянная практика чтения неизбежно приводит к увеличению скорости чтения. И наступает момент когда прочитать учебник будет в 10 и более раз быстрее, чем просмотреть видеокурсы по той же теме и в том же объёме.

    Кроме того, чтение развивает абстрактное мышление - основной инструмент разработчика.
    Ответ написан
    16 комментариев
  • Как из c++ выполнить python?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала нужно решить, нет ли возможности оставить две программы отдельно, связав их через стандартный ввод/вывод, файлы или сокеты? Пусть одна запускает другую просто как дочерний процесс, это проще всего.

    Если это категорически должна быть одна программа, то нужно решить, кто будет "главным".

    Если главным будет Питон, который должен вызывать код на C/C++ (оформленный в виде DLL), то может пригодиться модель ctypes. Альтернативно, можно написать модуль интерпретатора.

    Если главным будет C++, который должен выполнять код на питоне, то тут уже нужно читать про embedding python.
    Ответ написан
    Комментировать
  • Как разбить строку на определенное количество строк?

    0xD34F
    @0xD34F Куратор тега JavaScript
    function chunked(str, numChunks) {
      const chunkSize = Math.ceil(str.length / numChunks);
      return Array.from(
        { length: numChunks },
        (n, i) => str.slice(i * chunkSize, (i + 1) * chunkSize)
      );
    }

    или

    function chunked(str, numChunks) {
      return str.match(RegExp(`.{1,${Math.ceil(str.length / numChunks)}}`, 'g'));
    }

    или

    function chunked(str, numChunks) {
      return str.split(RegExp(`(.{${Math.ceil(str.length / numChunks)}})`)).filter(Boolean);
    }


    UPD. В комментариях докладывают:

    неаккуратненько как-то:
    chunked('test', 3) // [ "te", "st", "" ]

    Это поправимо. Наверное.
    const chunked = (str, numChunks) =>
      numChunks <= str.length
        ? Array.from(
            { length: numChunks },
            function(n, i) {
              return str.slice(i * this, i === numChunks - 1 ? str.length : (i + 1) * this);
            },
            str.length / numChunks | 0
          )
        : 'извини, столько непустых кусков нарезать нельзя';

    или

    function chunked(str, numChunks) {
      const chunkSize = str.length / numChunks | 0;
      const numLooseItems = str.length % numChunks;
    
      return Array.from(
        { length: numChunks },
        function(_, i) {
          return str.slice(this(i), this(i + 1));
        },
        i => i * chunkSize + Math.min(i, numLooseItems)
      );
    }

    Ответ написан
    4 комментария
  • Как правильно удалять параметры из url-строки в react-router-dom?

    0xD34F
    @0xD34F Куратор тега React
    const toggleSearchParams = params => {
      const newSearchParams = [...searchParams];
    
      for (const n of params) {
        const index = newSearchParams.findIndex(m => n[0] === m[0] && n[1] === m[1]);
        if (index === -1) {
          newSearchParams.push(n);
        } else {
          newSearchParams.splice(index, 1);
        }
      }
    
      setSearchParams(newSearchParams);
    };
    
    const handleChangeCheckBoxValue = e => {
      toggleSearchParams([ [ 'selected', e.target.value ] ]);
    };
    
    const handleDeleteParams = () => {
      toggleSearchParams(checkboxParams.map(n => [ 'selected', n ]));
    };
    Ответ написан
    Комментировать
  • Является ли порочной практика итеративных попыток сдачи тестировщикам сырых результатов работы?

    alexgp13
    @alexgp13
    Руководитель ИТ-проектов
    Это нормальная практика, когда тестировщик итеративно смотрит сырые варианты. В определенных ситуациях это лучше, чем сделать готовый вариант, отладив программистами все баги и понять, что надо то было совсем другое.

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

    И самое главное - все очень сильно зависит от уровня разработчиков в команде. К сожалению, часто в том же бэке не видят дальше своего носа, отсюда и проблемы в духе "купи молоко, если будут яйца, возьми десяток"...
    Ответ написан
    6 комментариев
  • Является ли порочной практика итеративных попыток сдачи тестировщикам сырых результатов работы?

    @Dmtm
    Android
    время тестировщика обычно намного дешевле времени разработчика, поэтому спамить ему сырой код -вполне допустимо, но вся логика и тз должны быть уже отработаны аналитиком до начала разработки и если тестировщик работает за аналитика, то в проекте проблемы с аналитиком
    Ответ написан
    4 комментария
  • Как это написать в виде регулярного выражения?

    @dodo512
    ^(?: (word1) | (word2) | ... )+
    После прохода по строке, проверяем какие из сохраняющих групп участвовали в совпадении.
    (?(id/name)yes-pattern|no-pattern) https://docs.python.org/3/library/re.html
    Ещё потребуется атомарная группировка (?>...), которая не поддерживается в Python, но её можно имитировать с помощью позитивной опережающей проверки (?=...)
    https://regex101.com/r/dbjy2E/1
    pattern = r"""
    (?xm)  
    ^
    (?=
      (
        (?: \b (?P<a> белый | серый | красные ) \b
          | \b (?P<b> бегемот[ы]? |гиппопотам[ы]? ) \b
          | \b (?P<c> дикий | злой ) \b
          | \w+
          | [^\w\n]+
        )+
      )
    )
    
    (?(a)|(?!))
    (?(b)|(?!))
    (?(c)(?!)|)
    """
    Ответ написан
    1 комментарий
  • Бесплатный питон-хостинг на своём домене?

    @maximsemin23
    Вот представь себе что ты владелец хостинга. Зачем тебе бесплатно предоставлять услуги? Только ради дурацких ловушек. И вообще, что за организация такая, что не могут выделить 300 рублей в месяц на хостинг?
    Ответ написан
    4 комментария
  • Как укоротить синстаксис деструктуризации?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Деструктуризацию долой, сделать массив имён свойств:

    const payload = {
      data: Object.fromEntries([
        'раз свойство',
        'два свойство',
        'три свойство',
      ].map(n => [ n, this[n] ])),
    };
    Ответ написан
    2 комментария
  • Как переопределить ToString для своего класса Date?

    freeExec
    @freeExec
    Участник OpenStreetMap
    public override string ToString()
    {
       return "Я не читаю документацию, хотя ссылку получил в предыдущем вопросе";
    }
    Ответ написан
    2 комментария
  • Чем заменить множество обращений к parentNode, nextElementSibling и childNodes?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Ответ написан
    Комментировать
  • Как решить задачу с перебором?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Самое простое решение для понимания - полный перебор. Тупо 3 цикла - сколько монет с номиналом 2 взяли, сколько монет с номиналом 3 и сколько монет с номиналом 5. Каждый цикл от 0 до <Сколько осталось набрать> / номинал. Потом проверяем, что сумма сошлась. Более того, можно последний цикл пропустить и просто проверить, что оставшееся можно набрать пятаками.

    bool CanExchange(int n, int have2, int have3, int have5) {
      for(int take2 = 0; take2 <= min(have2, n/2); ++take2) {
        int left2 = n - 2*take2;
        for (int take3 = 0; take3 < min(have3, left2/3); ++take3) {
          int left23 = left2 - take3*3;
          if (left23 % 5 == 0 && left23 / 5 <= have5) {
            return true;
          }
        }
      }
      return false;
    }


    Но это для данной конкретной задачи, где всего 3 типа монет. В общем случае нужно писать рекурсивную функцию вместо вложенных циклов, которая будет принимать сколько осталось собрать и какой тип монет перебирать.

    Самое быстрое решение - динамическое программирование.

    F(n,k) - можно ли набрать число n первыми k типами монет.

    F(0.0) = 1
    F(*, 0) = 0
    F(n,k) = Sum(i = 0..have[k]) F(n-i*value[k], k-1)

    Фактически, это тот же рекурсивный перебор, только с мемоизацией. Можно переписать это двумя циклами и соптимизировать по памяти до O(n).
    Ответ написан
    Комментировать