• Нужно ли писать суффиксы литералов?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    При инициализации переменных это обычно не используют. Ну, происходит тут преобразование типа - ошибки быть не может. Это лишь немного снижает читабельность кода и все.

    Вот когда вы константы передаете в какие-то перегруженные функции, где имеет значение unsigned ли ей передан или signed, или есть разница между float и double, то тогда - да, надо писать.
    Ответ написан
    4 комментария
  • Как превратить str в словарь (2 часть)?

    Vindicar
    @Vindicar
    RTFM!
    Сам словарь полученный от телеграмм мне нужно его в нужном моменте сохранять в бд, а позже вытаскивать обратно превращая назад в dict, но все идет по наклонной

    Ну т.е. как и предсказывали, проблема в более раннем коде.
    Когда сохраняешь в БД, делай не str(mydict), а json.dumps(mydict). Тогда можно будет делать json.loads() при загрузке.

    Только словарь надо будет почистить от постороннего, а ещё лучше - сначала сделать свой словарь ,в который сохранять ТОЛЬКО то, что тебе надо. Например, ты не заметил, что у тебя в словаре есть
    'entities': [<telebot.types.MessageEntity object at 0x7770137fd0>]

    Сюрприз-сюрприз, объект
    <telebot.types.MessageEntity object at 0x7770137fd0>
    явно сериализации не поддаётся, и ни сохранить, ни восстановить его не выйдет. Или убирать ключ entities, если он тебе не нужен, или разбираться, что это за объект и сериализовывать/восстанавливать его вручную.
    Ответ написан
    3 комментария
  • Как можно, и вообще можно ли хранить фото и видео в базе данных mongo?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Попробую объяснить плюсы и минусы хранения файлов в БД.

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

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если человек ничего не понимает в какой-то теме, он никогда не должен выступать с заявлениями вида "у меня возникла потребность". Потому что такие заявления базируются не на реальных потребностях, а на неграмотности, фантазиях и путанице в голове. И получаются вопросы вида "У меня возникла потребность забивать гвозди микроскопом. Я обыскал весь интернет но ничего понятного не нашел, только понял то что это делается на кухне. "

    Вместо таких заявлений он должен подробно изложить исходную задачу.
    Про которую ему подробно расскажут, как её решать нормально.

    Хранить фото и видео в БД - это как надевать штаны на голову.
    Хранить фото и видео в монге - как надевать на голову помойное ведро.

    Файлы надо хранить в файловой системе.
    Структурированные данные надо хранить в Базе Данных.
    Монгу не нужно использовать ни для чего. Это вообще не база данных, а просто хранилище по типу "куча мусора", которое используется исключительно в стильных модных молодёжных стартупах, в которых не нашлось ни одного специалиста по базам данных. Это была тупиковая ветвь, поднявшаяся на отсутствовавшей на тот момент поддержке JSON в базах данных и хайпе
    Ответ написан
    2 комментария
  • Ассемблер, почему дизассемблированном коде много ненужных операций?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему не переписать вместо этого
    add ebx,dword ptr [rbp+ECX*4+10h]

    Буквально так написать нельзя, потому что нет такого режима адресации в котором можно было бы использовать вместе Rbp (64-битный) и Ecx (32-битный). Можно было бы написать add ebx,dword ptr [rbp+rcx*4+10h], но для этого счётчик цикла должен был бы быть 64-битным, а он, как мы видим, 32-битный (int i). Т.е. ответ на вопрос "для чего это": для беззнакового расширения 32-битного счётчика цикла в регистр, который можно использовать для доступа к памяти.

    Другое дело, что из исходного кода очевидно, что при обращениях к памяти i не выходит из диапазона 0..9, так что разницы между ecx и rcx нет и не может быть. Возможно я что-то упускаю и у компилятора другое мнение на этот счёт, но может быть он просто туповат и не имеет кода который бы мог использовать эту возможность оптимизации, а может такая оптимизация и есть, но она не была включена во время генерации этого кода.
    Ответ написан
    Комментировать
  • Что означает выражение. {x:1} в f.строках python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Это "f-строки"/"форматированные строковые литералы", простой пример:
    x = 5
    y = 555
    print(f"{x:1}")  # "5", минимальная ширина поля вывода переменной x = 1 (вывести значение x, удостоверившись, что оно занимает по меньшей мере один символ)
    print(f"{x:3}")  # "  5"
    print(f"{y:3}")  # "555"
    
    # Округление Pi до десятичного значения
    pi = 3.141592653589793
    print(f"Pi: {pi:.1f}")  # Pi: 3.1
    Ответ написан
    Комментировать
  • Какова сложность алгоритма поиска всех элементов AVL дерева, принадлежащих интервалу?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Оценка O(log n + m) - правильная. Ее нельзя (или очень сложно) вывести рекуррентным соотношением, потому что она сильно завязана на условия в функции. Там 2 рекурсивных вызова, но они происходят не всегда.

    Оценку можно вывести посчитав различные вызовы функции. Сначала, когда node->key не в интервале - будет ровно один рекурсивный вызов. Ну, потому что не в интервале, это или <min, или >max. Т.е. одно из двух условий (node->key > min, node->key < max) точно нарушается.

    Поэтому сколько-то уровней дерева будет ровно один вызов. Потом будут вызовы в вершины внутри интервала, и могут быть вызовы за границы интервала. Первые все посчитаются в слагаемом M в оценке. Сколько будет вторых? Не более 2*количество уровней - максимум один вызов в числа меньшие min и один в числа, большие max.

    Вот мы оказались в какой-то вершине в отрезке (A). И пошли от нее влево в вершину вне отрзка (B). А так же вправо в вершину (C). Так вот, все ключи в поддереве С не меньше A, а значит, ни одна из них не будет "торчать" из отрезка влево. Поэтому, "плохие" вершины вне отрезка слева, которые мы посещаем, там не встретятся никогда. Значит, на следующем уровне может быть максимум одна "плохая" вершина слева - правый ребенок B. И так далее, пока мы не спустимся до вершины опять в отрезке. Аналогичное рассуждение показывает, что может быть только по одной плохой вершины справа на каждом уровне.
    Ответ написан
    Комментировать
  • Как выучить язык программирования?

    @Drno
    как в любом линукс...
    установи в ВБ нужный линукс
    установи нужный ВПН клиент
    подключись..
    Ответ написан
    22 комментария
  • Почему программа "Конвентер Валют" выдаёт 0.000000 при любом значении?

    @res2001
    Developer, ex-admin
    Ответ в комментариях
    Ответ написан
    Комментировать
  • Как ускорить поиск нескольких подстрок в строке в го?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Скорее всего, нужен "алгоритм Ахо-Корасик".
    Если его нет из коробки в Go, то можно запилить самостоятельно: ссылка, ссылка, ссылка
    Ответ написан
    2 комментария
  • Как кодировать аудио на ascii?

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

    Попробуй конкретизировать вопрос - тогда получится дать более полезный ответ.

    Ну и если в вопросе нет кода на php, то тег "php" - лишний.
    Ответ написан
    2 комментария
  • Как кодировать аудио на ascii?

    402d
    @402d
    начинал с бейсика на УКНЦ в 1988
    UUE
    Возможно у вас частный случай задачи передачи двоичных данных через канал только тестовых символов. В текущих условиях имхо проще использовать base64.
    Ответ написан
    Комментировать
  • Что то странно работает макрос в rust. Кому обращаться?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Ошибку вызывает то, что вы смотрите ютуб и спрашиваете ChatGPT. Прочитайте лучше учебник для начала, а потом можно будет и до документации по макросам добраться.
    Ответ написан
    Комментировать
  • Можно ли быстрее чем за O(N) подсчитать сумму S(N,K,M) = sum i=0..N K*i%M?

    wataru
    @wataru Автор вопроса, куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Совершенно случайно наткнулся вот на это вот равнество: hermite's identity (в твитте с прикольным доказательством. Зацените).

    C помощью него наконец-то вывел способ подсчитать эти суммы за O(log n)! Я знал, что это можно сделать!

    Итак, во-первых, можно переключатся между суммами floor(i*k/m) и (i*k)%m через вот это равенство: floor(i*k/m) = (i*k - (i*k)%m) / m
    Это нам позже поможет. В сумме через floor можно сократить GCD(m, k) в них. В сумме через модуль можно сделать k %= m, если оно больше m, да и сократить полные "обороты" в n.

    Итак, можно допустить, что m > k, m >n, GCD(m, k) = 1, иначе преобразуем сумму к нужной форме и все упростим.

    Дальше, применим равенство hermite's, взяв x = i/m, n = k.

    Потом поменяем местами суммы. Под знаками суммы будет floor(i/m + t/k) (где t - новая переменная суммирования от 0 до k-1). Присмотритесь к этому выражению - там 2 числа меньших 1. Т.е. весь этот floor даст 1, только если t/k >= 1-i/m. Отсюда можно решить это неравнество, сдвинуть нижнюю границу суммирования и получить сумму единиц во внутренней сумме. Заменив ее всю на количество слагаемых там вылезает floor (t*m/k). Т.е. мы выразили сумму i*k/m через сумму t*m/k. Но мы же помним, что можно перейти к сумме модулей и там сократить множитель k в числителе. Таким образом мы вычисляем сумму для (m, k) через сумму для (k, m%k). Это точно такой же переход, как и в GCD, поэтому суммарно будет всего O(log n) итераций. Вообще, выкладки довольно нудные, ибо сумма для t*m/k будет не от 0 до какого-то n', а от n' до k-1. Но можно взять известное значение для суммы полного оборота (от 0 до k-1) и из нее вычесть сумму от 0 до n'-1. Эта сумма известна, потому что при GCD=1, она пройдется по всем остаткам в каком-то порядке.

    Формула примерно такая получается:
    FloorSum(n, k, m) = (m-1)*(k-1)/2 - (n1+1)*n1*(m/k)/2 + (n - m + 1)*(k-n1-1) - FloorSum(n1, m%k, k)
    n' = floor(((m-n)*k-1)/m)


    Вот код. Значения совпадают с тупым решением для всех чисел до 1000 и для миллиардов случайных чисел до миллиона.
    // sum i = 0.. n floor(i * k / m)
    // GCD(k, m) must be 1.
    // n < m
    // k < m
    long long FloorSumInternal(long long n, long long k, long long m) {
    	if (k == 0 || n <= 0) return 0;
    	if (m == 1) return k*n*(n+1)/2;
    	const long long n1 = ((m-n)*k - 1)/m;
    	long long ans = (m-1)*(k-1)/2 - (n1+1)*n1*(m/k)/2 + (n - m + 1)*(k-n1-1);
    	ans -=  FloorSumInternal(n1, m%k, k);
    	return ans;
    }
    
    
    // sum i = 0.. n floor(i * k / m)
    long long FloorSum(long long n, long long k, long long m) {
    	if (k == 0 || n <= 0) return 0;
    	if (m == 1) return k*n*(n+1)/2;
    
    	const long long d = Gcd(m, k);
    	m /= d;
    	k /= d;
    	if (k >= m || n >= m) {
    		// (n*k*(n+1)/2 - ModSum(n, k, m, d))/m;
    
    		const long long nn = (n+1)%m-1;
    		const long long num_full = (n+1) / m;
    		const long long kk = k % m;
    
    		long long ans = 0;
    		ans = (k*n*(n+1) - kk*(nn+1)*nn)/m - num_full * (m-1);
    		ans /= 2;
    		ans +=  FloorSumInternal(nn, kk, m);
    		return ans;
    	}
    	return FloorSumInternal(n, k, m);
    }
    
    
    
    // sum i = 0.. n (i * k) % m;
    long long ModSum(long long n, long long k, long long m)
    {
    	long long d = Gcd(k, m);
    	if (k == 0 || m == 1) return 0;
    	// (i*k) % m = i*k-floor(i*k/m)*m
    	k %= m;
    	long long num_full = (n+1) / m;
    	long long ans = num_full * (m-d) * m/2;
    	n = (n+1)%m-1;
    	if (n > 0) {
    		ans += ((long long) k)*(n+1)*n/2 - m*FloorSum(n, k/d, m/d);
    	}
    	return ans;
    }


    Правда тут есть проблема, в процессе вычисления получаются весьма большие числа. Поэтому даже если финальный ответ в long long влезает, ответ может переполнится. Но все-равно, там числа больше куба от входных значений не используются, поэтому можно в оценке сложности это не учитывать.

    Edit: прилизал код немного.
    Ответ написан
    Комментировать
  • Как из Lua вызвать функцию C++?

    Google: "lua ffi"
    Ответ написан
    Комментировать
  • Есть ли в РФ учебные заведения, которые выпускают сеньоров или мидлов?

    Acceptme3
    @Acceptme3
    Джун, мидл сеньор это, я бы сказал градация опыта. Поэтому нет. Высшее образование в сфере IT лишь даст вам преимущество в поиске работы.
    Ответ написан
    2 комментария
  • Где можно найти сообщников-программистов?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Писать программы одному мне скучновато

    Значит программирование не для вас.
    Ответ написан
    5 комментариев
  • Где можно прочитать про всю суть ЯПов под капотом?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    5d66774c767f2234030678.png
    Ответ написан
    Комментировать
  • Невозможно открыть файл?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Ох инженеры пошли совсем никудышние.

    Заходи в cmd. И делай
    c:
    cd \
    cd Users
    cd "Пользователь"
    cd "PycharmProjects"
    cd "pythonProject1"

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

    Adamos
    @Adamos
    Никогда. И, соответственно, ничем.
    Это любой ответ, вы обещали радоваться, и заранее тоже.
    Ответ написан
    6 комментариев