• Возможно ли рассчитать коэффициенты победы лишь на основании пройденного времени и прежних коэффициентов?

    @lorc
    Гуглите про формулу Байеса. Она именно для этого и нужна - корректировка вероятностей при наступлении какого-то события. Встанет вопрос в том, что считать событиями и какие им приписывать вероятности. Тут нужно будет поэкспериментировать.

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

    @lorc
    АКБ чаще всего может выдать бОльший ток, чем внешняя зарядка.

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

    Так что чисто с электрической точки зрения - нет, разницы быть не должно. Другое дело, что прошивка/БИОС может иметь свое мнение по поводу допустимых нагрузок при работе от аккумулятора.

    Вообще, Ваш вопрос стоит задавать о конкретной модели ноутбука.
    Ответ написан
  • В чём отличие между char* и char[]?

    @lorc
    В случае выделения на стеке или в глобальных переменных - разница очень большая. char* - это просто указатель. Как тут правильно сказали - у вас будет два указателя на один и тот же строковый литерал.

    char[] - создание массива на стеке. Соответственно, у вас там будут хранится не два указателя, а два массива. Вы сравниваете их и они очевидно не равны.

    Вот пример: https://ideone.com/pIhUvq. Как видите, в одном случае у нас 64-битный указатель, а в другом - массив.

    А вот в параметрах функции - действительно, большой разницы нет.
    Ответ написан
    Комментировать
  • Почему при дебаге появляется can't increment vector iterator past end?

    @lorc
    Потому что нельзя изменять вектор, по которому вы итерируете. Вот что пишут про std::vector::erase:

    Invalidates iterators and references at or after the point of the erase, including the end() iterator.
    Ответ написан
    5 комментариев
  • По какой формуле считается приз на рулетках?

    @lorc
    Ну на самом деле все логично. Мы делим ставку на вероятность выигрыша. И округляем конечно же вниз:

    1 / 0.01 = 100
    1 / 0.95 = 1.0526 ~= 1.05

    Если предположить что шансы у них честные, то доход казино обеспечивается как раз этим округлением вниз. Во втором случае матожидание выигрыша получается 1.05 * 0.95 = 0.9975 рубля на каждый поставленный рубль.

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

    @lorc
    Ну я бы в момент нажатия на "стоп" определил угол где колесо должно остановиться. Например, с помощью генератора случайных чисел.

    Допустим, в момент нажатия "стоп" угол колеса alpha, а мы хотим чтобы оно остановилось в угле beta, сделав около пяти оборотов. Тогда, если alpha > beta, то нам нужно провернуть колесо на theta = 360 * 5 + beta - alpha градусов.
    Если alpha < beta, то понадобиться например theta = 360 * 6 - beta + alpha градусов.

    Итого, мы знаем скорость вращения speed, знаем количество градусов которое нужно пройти - theta. Знаем что в конце скорость должна быть 0. Надо посчитать замедление а.

    Пришло время математики. За время t колесо провернется на speed * t - a * t * t /2 градусов. Нам надо чтобы оно провернулось на theta.

    Значит, мы имеем уравнение speed * t - a * t * t /2 = theta. Еще мы помним что скорость в конце должна быть равна 0. Значит speed - a * t = 0.

    Подставляем, сокращем. Получаем a = speed * speed / ( 2 * theta). Теперь вы знаете замедление, на которое нужно уменьшать скорость каждый цикл.

    Только, учтите, что у вас время дискретно поэтому, не налажайте с единицами измерения для t, speed и а.
    Ответ написан
    Комментировать
  • Где в LineageOS автозагрузка?

    @lorc
    В один из init.rc файлов.

    Рекомендую почитать вот это: https://android.googlesource.com/platform/system/c...
    Ответ написан
  • Что означает "Not currently on any branch"?

    @lorc
    Собственно, именно это и означает. После клона гит не переключается ни в какую ветку.

    Почему так получилось? Потому что HEAD репозитория на удаленном сервере смотрит не в ветку, а в какой-то конкретный коммит.
    Ответ написан
    Комментировать
  • Как работают теги в Git?

    @lorc
    Да, все правильно в общих чертах. Кроме пункта про git merge.

    Head Detached потому что вы сделали checkout на конкретный коммит, а не на какую-то ветку. Соответственно, вы не "находитесь" в какой-то ветке. Что гит вам и сообщает. Можете сделать git checkout -b my-new-branch и тогда это сообщение пропадает, потому что вы создадите новую ветку на текущем коммите и переключитесь в нее.
    Ответ написан
    2 комментария
  • Как откатить к коммиту по id?

    @lorc
    Переключится назад в ветку и сделать

    git reset --hard commit-id
    Ответ написан
    1 комментарий
  • Существует ли какая-нибудь система измерений, согласно которой 1 килобайт = 1024 байт?

    @lorc
    Нет такой системы. Правильно бы говорить "кибибайт", "мебибайт", "гибибайт" и так далее. Но все по привычке говорят "кило-", "мега-", "гига-". Кроме производителей жестких дисков и других накопителей. Они пользуются этими терминами правильно.

    Так что да, чисто формально, те кто под килобайтом подразумевает 1024 байта - неграмотные люди.
    Ответ написан
    Комментировать
  • Ошибка при проверке, подписан ли сертификат ключом корневого центра?

    @lorc
    Если не ошибаюсь, то модуль req нужен для работы с запросами на сертификат. А в запросе на сертификат проверять нечего. Собственно, openSSL на это и намекает.

    Как вы правильно написали в комментарии, вам нужен модуль verify.
    Ответ написан
    Комментировать
  • Как собрать ядро 4.0, чтобы была поддержка wifi из ядра 5.2?

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

    А зачем вам ядро 4.0? Что в нем такого особенного? Может проще будет перетащить нужные вам изменения в 5.2?

    Портировать код вперед обычно проще, чем назад.
    Ответ написан
  • Где почитать подробнее про синтаксис захешированной строки?

    @lorc
    Нет единого стандарта но то, как хеширутся пароли (и тем более - просто строки).

    Например, формат passwd описан в `man 3 crypt`:

    The glibc version of this function supports additional encryption algorithms.

    If salt is a character string starting with the characters "$id$" followed by a string optionally terminated by "$", then the result has the form:

    $id$salt$encrypted

    id identifies the encryption method used instead of DES and this then determines how the rest of the password string is interpreted. The following values of id are supported:

    ID | Method
    ─────────────────────────────────────────────────────────
    1 | MD5
    2a | Blowfish (not in mainline glibc; added in some
    | Linux distributions)
    5 | SHA-256 (since glibc 2.7)
    6 | SHA-512 (since glibc 2.7)

    Thus, $5$salt$encrypted and $6$salt$encrypted contain the password encrypted with, respectively, functions based on SHA-256 and SHA-512.

    "salt" stands for the up to 16 characters following "$id$" in the salt. The "encrypted" part of the password string is the actual computed password. The size of this string is
    fixed:

    MD5 | 22 characters
    SHA-256 | 43 characters
    SHA-512 | 86 characters

    The characters in "salt" and "encrypted" are drawn from the set [a-zA-Z0-9./]. In the MD5 and SHA implementations the entire key is significant (instead of only the first 8 bytes
    in DES).

    Since glibc 2.7, the SHA-256 and SHA-512 implementations support a user-supplied number of hashing rounds, defaulting to 5000. If the "$id$" characters in the salt are followed
    by "rounds=xxx$", where xxx is an integer, then the result has the form

    $id$rounds=yyy$salt$encrypted

    where yyy is the number of hashing rounds actually used. The number of rounds actually used is 1000 if xxx is less than 1000, 999999999 if xxx is greater than 999999999, and is
    equal to xxx otherwise.


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

    @lorc
    Потому что IP адрес должен принадлежать той сети, в которой находится компьютер. Маршрутизатор находится в двух сетях сразу, поэтому ему нужен адрес в каждой из сетей.

    MAC адреса обычно не устанавливают вручную, а берут те адреса что прошиты в сетевые карты. Поэтому они и разные. Чисто теоретически в данном случае можно установить одинаковые MAC адреса и ничего не сломается, ибо карты смотрят в разные сети. Но это - лишние телодвижения. Лучше использоваться адрес по умолчанию и не париться.
    Ответ написан
    Комментировать
  • Почему не работает (Chain of Responsibilty)?

    @lorc
    Подозреваю, что должно быть вот так:

    void SetNextHandler(Handler* next_handler) {  
            if (next) {
                next->SetNextHandler(next_handler); // <- next, не this
            } else {
                this->next = next_handler;
            }
        }


    Иначе у вас бесконечная рекурсия получится.

    Но вообще, это не самый оптимальный алгоритм, ибо сложность добавления нового хендлера - O(N), хотя можно было бы сделать O(1), если не важен порядок вызова.

    А еще, можно бы завести виртуальную функцию, которая будет занимать только хендлингом. Это сделает код более надежным и позволит избежать Handler::HandleRequest(data); в конце каждого хендлера.
    Ответ написан
    3 комментария
  • Как решать конфликт, если фронт энд разработчик в другом городе, а конфликты на фронте и бэке?

    @lorc
    Если у вас изменение в фронт и бек в одном коммите - значит их делал один человек, значит он может и порешать конфликты.

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

    @lorc
    STM32F0 имеет DMA для ADC. Соответственно, все что вам нужно - это правильно настроить эту связку и запустить ADC в непрерывном режиме. ADC будет проводить измерения как можно быстрее, а DMA будет складывать эти измерения в память. Может так оказаться, что для вас это будет даже слишком быстро, ибо ADC в 12битном режиме может выдавать данные с частотой вплоть до мегагерца.
    Ответ написан
    4 комментария
  • Как найти в списке чисел диапазон статистически наибольших чисел?

    @lorc
    Если чисел не очень много, то можно взять n-ый персентиль. Грубо говоря - отсортировать все показатели здоровья по убыванию и взять 5-10% верхних.
    Ответ написан
    Комментировать