Задать вопрос
  • Как разрабатывать игру на c++ под Android?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    SDL +Android NDK.
    Ответ написан
    Комментировать
  • Здравствуйте, проект вылетает при запуске на Python, что делать?

    @dmshar
    Что-делать, что-делать... Ловите его, что-бы не вылетал.
    Вы свой вопрос прочтите-ка.
    Что вылетает, в какой момент вылетает, что при этом сообщает вам? Какая операционка? Какая версия Python? Какие версии используемых модулей? Какие логи? Вся эта информация у вас есть, но вы наверное считаете что это форум экстрасенсов, которые способны угадать ответы на эти вопросы сами? А вам даже структурировать свой код как следует лень?
    Ну если эта программа "This program was created by @ded_sec_" - то обратитесь к этому загадочному ded_sec_ , пусть он вам ответит. Форум-то тут причем?
    Ответ написан
    Комментировать
  • KISS vs SOLID, что и когда готовить?

    Adamos
    @Adamos
    Сначала KISS: решаем, требуется ли делать код сложным или можно обойтись простым решением, которое будет легко читать и поддерживать.
    Если понятно, что читать и поддерживать простыню процедурщины будет затруднительно, начинаем дробить логику, и в этом нам помогает SOLID - именно он определяет границы зон ответственности кода и позволяет минимизировать связи между проектируемыми классами.
    Наконец, определившись с архитектурой, мы внутри каждого класса вновь возвращаемся к KISS, не переусложняя его внутреннюю жизнь сверх тех задач, что он должен решать. Благодаря применению SOLID уровнем выше мы сможем безболезненно переделать все потроха этого класса, если задачи изменятся и KISS-решение перестанет работать, без рефакторинга остального кода.
    Никаких противоречий.
    Ответ написан
    Комментировать
  • Как в терминале открыть путь до папки?

    Vamp
    @Vamp
    Выполнить один раз на сервере команду:
    echo 'cd /papka' >> ~/.bashrc
    Ответ написан
    Комментировать
  • Самый эффективный способ поиска последовательности нулевых байт?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Самый эффективный способ - использовать SIMD инструкции (какой-нибудь _mm256_cmpeq_epi8 и хитрую битовую арифметику вроде _mm256_movemask_epi8 и подобных над результатом).

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

    Если вы ищите короткую последовательность, то еще нужно прверить, что в текущем болке она встречается. Например, чтобы проверить, что в битовой маске М есть последовательность из 5 бит, можно проверить, что (M & M >> 1) && ((M & M >> 1) >> 2) & M >> 4 имеет ненулевые биты. Достаточно log k сдвигов и битовых И для поиска последовательности из K ненулевых бит.

    Но вряд ли вы будете с этим возиться. Следующий вариант - эмулировать SIMD руками в int64. Читайте из памяти по 8 байт (через memcpy в int64) и там уже проверяйте через LSB/MSB сколько нулевых байт на конце, в начале. Чуть сложнее, если вам надо искать последовательность короче восьми байт. Тогда надо еще отдельно проверить через битовые сдвиги, есть ли она внутри блока из 8 байт.

    Дальше, есть какой-то ненулевой шанс, что memmem именно вариант выше и реализует, но это вряд ли. Я думаю ваш случай достаточно частен и ручная реализация будет быстрее.
    Ответ написан
    Комментировать