• Как записать условие?

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

    есть_столбец_с_нулями = ложь
    Для каждого столбца j
      количество_нулей = ПодсчитатьКоличествоНулейВСтолбце(j)
      если количество_нулей >= 2 то
        есть_столбец_с_нулями = истина
    
    Если есть_столбец_с_нулями
      НайтиСуммуЭлементовНадДиаганалью();


    Функция для подсчета нулей в столбце простая - пройдитесь циклом по всем элементам столбца (по строкам). Если текущий элемент ноль - то увеличивайте счетчик.

    Можно не писать отдельную функцию а просто воткнуть вложенный цикл.
    Ответ написан
    1 комментарий
  • Как реализовать такую кастомизацию telegram клиента (desktop)?

    fenrir1121
    @fenrir1121
    Начни с документации
    Формат "дёшево и сердито"
    Представлять доступ через один из консольных клиентов телеги 63c9765c301b9420910504.jpeg
    Ответ написан
    1 комментарий
  • Причем здесь in()?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Потому-что так банально компактнее при том-же результате.
    Даже в случае с двумя значениями требуется конструкция вида (просто сравните ее с приведенным кодом):
    len(pin) == 4 or len(pin) == 6
    А представьте, что требуется подобным образом проверить пять/шесть значений. Или требуется проверить произвольное количество значений.
    Ответ написан
    1 комментарий
  • Почему символы света, звука и т.п. видны в игре?

    @Alex_Schultz Автор вопроса
    Я уже нашёл решение. Удалять вопрос не буду, вдруг кому-то поможет. Крч в режиме игры надо выключить Gizmos (он находится справа сверху)
    Ответ написан
    Комментировать
  • Запустить flask без порта?

    includedlibrary
    @includedlibrary
    Можно поменять порт на 80, но тогда придётся запускать от рута. Также можно поставить nginx и настроить прокси с 80 порта на ваш 3001.
    Ответ написан
    3 комментария
  • Насколько сложно устроиться во Frontend начинающему в 2023?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Как уже и ответили так же как в 2022, 2021, 2020, 2019 ...
    По своему опыту отвечу что большинство моих успешных коллег уже на 2-3 курсе работали по профильной специальности, кто в университете на кафедре, что давало нехилый буст при сдаче предметов, кто в серьезных фирмах.

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

    @deliro
    Давай по буковкам читать как в детском саду:

    икс равно нулю
    пока икс меньше десяти, печатай икс

    Икс всегда равно нулю, ты это нигде не меняешь, а ноль всегда меньше десяти. Выхода из цикла не планируется, по крайней мере, в пределах нашей вселенной
    Ответ написан
    Комментировать
  • Как записать условие?

    NikFaraday
    @NikFaraday
    Student full-stack Developer
    int sum = 0;
    for (int i = 0; i < N; i++)
    {
       sum += A[i][i];
    }

    Вам ведь нужно найти сумму элементов на диагонали, там индексы строк и столбцов совпадают

    По поводу второго вопрос, там скорее всего идёт проход не по строкам, а по столбцам (Имею ввиду о первом цикле)
    Ответ написан
    1 комментарий
  • Нужно ли подключать все необходимые заголовки если они подтягиваются из других заголовков?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    В контексте использования директивы #include есть два важных принципа.
    Важный из этих двух сейчас - это принцип Include What You Use.

    Суть сводится к тому, что файлы исходного кода формирующие модуль трансляции должны в правильном порядке подключать все заголовки, объявления которых используют. Транзитивные включения не считаются. Методология соответствия IWYU включает в себя и правило перечисления подключаемых заголовков - от общих к частным. Именно таким образом должна обеспечиваться оптимальная скорость формирования модуля трансляции.
    И с этим связано несколько проблем. Основные я опишу ниже.
    Наивное следование IWYU в сложных проектах.

    В обычном проекте считается что один файл исходного кода соответствует одному модулю трансляции. В более сложных проектах, где используется SCU/Unity Build, один модуль трансляции уже представлен несколькими файлами исходного кода. Но IWYU требует соблюдать правила только для модуля трансляции, а не для файлов исходного кода.
    Эта ситуация обозначает одну из проблем соответствия IWYU, которую не замечают многие разработчики, кто пользуется IWYU и SCU одновременно. Дублирование директив, нарушение порядка от общего к частному и доступность директив для всего нижележащего кода других файлов исходного кода сводит на нет весь принцип IWYU.
    Простейшей ошибкой наивного следования IWYU при использовании SCU является простой забытый инклуд, который присутствует в другом файле исходного кода, размещенном модуле трансляции выше по коду. SCU формируются динамически, на базе определенного алгоритма. Сегодня ошибки нет, а завтра исходный код попадет в другой модуль трансляции, где выше по коду уже не будет нужного инклуда и трансляция пойдет прахом. Особой пикантности данной ситуации добавляют разные сценарии SCU для разработчиков и систем CI. В этом случае ошибку с потерянным инкудом искать будут очень долго и не в одно лицо. Такие ситуации реально существовали у меня на работе. Особую пикантность такой ситуации добавляет и то, что на этой работе люди особо активно пропагандировали IWYU, говоря о безмерной пользе принципа вместе с использованием SCU.
    Решением же является понимание несовместимости использования SCU и IWYU в одном проекте.

    Излишне детальное следование IWYU.

    Принцип IWYU говорит включать только то, чем пользуешься. Что это означает в деталях?
    Когда заголовочный файл использует какое-то объявление, он должен сперва подключить соответствующий заголовок. Когда исходный код использует какое-то объявление, он должен сперва подключить соответствующий заголовок.
    Код не пишется в вакууме, код пишется в составе библиотек и систем, в рамках которых код связывается между собой. На более мелком уровне код пишется в составе подсистем и модулей, а подсистемы и модули уже формируют более глобальные системы и библиотеки. В рамках всех этих единиц агломерации кода сам код является тесно связанным между собой. Заголовки одной подсистемы редко не будут перекрестно включать друг друга потому что активно пользуются их объявлениями для реализации функционала подсистемы.
    Внешний же код, использующий функционал подсистемы, редко будет ограничиваться включением только одного заголовка, потому сами заголовки включают друг друга и через IWYU диктуют подобный подход своему пользователю.
    Это заставляет блоки включений раздуваться до невиданных масштабов в сотни строк одних только #include. Если проект использует #pragma once, то огромные блоки включений сказываются только на удобстве чтения, сводя удобство разбора инклудов к нулю. Но если проект использует только define-guard, то от огромных блоков инклудов начинает катастрофически страдать скорость сборки. В этот момент люди обычно вспоминают про SCU и с его помощью окончательно хоронят гибкость проекта в пучине ошибок совместного использования SCU и IWYU.
    А решением в данном случае является выделение для единиц агломерации кода своих собственных публичных заголовков, внутри которых в правильном порядке будут подключены все заголовки используемого кода.
    Этот простой шаг кратно сокращает списки инклудов в пользовательском коде, не противоречит IWYU и позволяет на более высоком уровне организовать публичный интерфейс модуля, подсистемы, системы или библиотеки.


    Полагаясь на транзитивные включения, можно угодить в неприятности даже с кодом стандартной библиотеки. От стандарта к стандарту библиотечный код немного меняется и в любой момент может перестать подключать используемые в твоем коде заголовки. В этом случае при переходе на новый стандарт тебе придется сперва справиться с возникшими ошибками трансляции. Еще более остро эта проблема встает при обновлении сторонних библиотек, авторы которых, как правило, часто и кардинально меняют внутреннюю структуру библиотеки.
    Соблюдение же принципа IWYU обещает реже встречаться с подобными проблемами и легче переживать обновление стороннего кода, делая тем самым проект более гибким и готовым к изменениям.
    Ответ написан
    Комментировать
  • Почему scanf считывает значение только первой переменной?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Если вам нужен ввод целых чисел, то читайте их в целые переменные через %d. Еще, scanf возвращает количество прочитанных значений. Т.е. сравнивать надо с тройкой, а не единицей.

    Еще одна проблема: возможно, из-за настроек локализации, оно ждет десятичные запятые, а не точки. Попробуйте ввести "1,0 2,0 3,0" или "1 2 3".

    И вообще весь ваш сценарий - это комбинация ошибок в пером и втором абзаце. Из за точек вместо запятых оно читает только первую переменную сначала, видит, что ввело 1 переменную и завершает цикл. При вооде "1 2 3" оно читает все переменные, но из-за ошибки в проверке (вы же хотите, чтобы одна прочиталась) читает опять. При повтороном вводе "1.0 2.0 3.0" оно читает только первую переменную и завершается. При этом в b и c остались значения от прошлого ввода.
    Ответ написан
    2 комментария
  • На Тостере слово "гомосексуалист" подвержено цензуре и за него банят?

    TosterModerator
    @TosterModerator Куратор тега Тостер
    Модератор Хабр Q&A
    1. Пункт 5.1. правил Сервиса гласит:
    Любые оскорбительные формулировки запрещены. Даже в том случае, если наличествуют неопровержимые доказательства того, что в указанных оскорблениях имеется доля правды.
    В этом пункте отсутствуют какие либо ограничения по составу субъектов. Т.е. оскорбительные формулировки запрещены в принципе, а не только в отношении пользователей Сервиса.

    3. Ваше высказывание было сформулировало таким образом, что под него подпадали все участники процесса разработки, а не отдельно взятая личность:
    5beaa2d529f9e352851147.png

    Это далеко не первое употребление оскорбительных формулировок с вашей стороны. Пожалуйста, будьте более сдержанны и корректны, в противном случае ваш доступ к Сервису будет ограничен перманентно.
    Ответ написан
    6 комментариев
  • Бот телеграмм. Как сделать ответ на ввод число.месяц.год (datetime)?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Можно проверить на регулярное выражение - "\d\d\.\d\d\.\d\d\d".
    Можно попытаться спарсить дату - datetime.strptime(message.text, '%d.%M.%Y')
    Ответ написан
    1 комментарий
  • Как устроены сайты по типу хабра?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Грубо говоря, на сервере папок нет, есть web-приложение, которое принимает запросы, вынимает из них идентификатор (1239214), ищет по этому идентификатору данные в базе, с помощью шаблонизатора формирует html-код страницы и отдаёт его браузеру клиента.
    Ответ написан
    Комментировать
  • Как избавиться от [] скобок?

    Lord_of_Rings
    @Lord_of_Rings
    Python developer
    emails[0]
    Ответ написан
    Комментировать
  • Как из массива целых чисел найти все возможные комбинации (не только двух чисел, а и более) дающие искомую сумму?

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

    Можно рекурсивно перебрать числа: функция принимает список уже выбранных чисел, их сумму и сколько первых чисел массива обработаны. Если все числа обработаны, функция сравнивает сумму с искомой и, если надо, выводит список. Потом завершается. Если еще не все числа обработанны, то функция два раза рекурсивно вызвается с параметрами: Текущее число добавлено или нет в список, обработано на одно чисел больше.

    Другой вариант, через битовые маски, без рекурсии. Перебирайте число от 0 до 2^n-1. Потом смотрите на него, как на битовую маску. Так вы переберете все подмножества из n элементов. Если i-ый бит установлен, то берите i-ое число в сумму. Если сумма совпала с искомой - вы нашли вариант.

    Ну и самый быстрый вариант: с использованием динамического программирования. Как в задаче о рюкзаке вам надо подсчитать F(i,j) - можно ли числами с i-ого по последнее собрать сумму равную j. Потом рекурсивый перебор оптимизируется с этой информацией. Вы текущее число берете или нет и запускаетесь рекурсивно, если оставшимеся числами можно набрать оставшуюся сумму до ответа.

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

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    my_round(123,-2) = 100.

    Точность говорит, что все цифры после этого индекса должны быть 0. А предыдущая, может увеличится на 1, в зависимости от правил округления.
    Ответ написан
    Комментировать
  • Как сделать рандом в питоне?

    Maksim_64
    @Maksim_64
    Data Analyst
    import random
    round(random.uniform(1,5),2)

    Это будет выдавать десятичную дробь в диапазоне от 1 до 5, с двумя цифрами после запятой.

    (ОТРЕДАКТИРОВАНО) после небольшой проверки выяснилось что данный код иногда (редко будет выдавать) числа такие 1.1 или 2.3 что бы избежать этого написал вот такую функция которая всегда будет выдать случайное число с двумя цифрами после запятой.
    import random
    def get_random(a=1,b=5):
        while True:
            number = round(random.uniform(a,b),2)
            if len(str(number).split('.')[1]) == 1:
                continue
            else:
                return number
    Ответ написан
    2 комментария
  • Почему вместо ссылки выдается None?

    @s4q
    У article-film нет атрибута href.
    Попробуйте так
    for item in all_games_hrefs:
        print(item.find('a').get('href'))
    Ответ написан
    1 комментарий
  • Почему разный результат байт?

    @rPman
    У тебя разные типы данных и соответственно размеры int это 4 байта (или 8 в зависимости от компилятора и архитектуры) и char - 1 байт
    int in_stream[100]
    и
    char packet_data[100];

    memcpy работает с байтами а значит копирует только часть данных
    Ответ написан