• Как сохранить файл, который скачивается автоматически при переходе по ссылке?

    Vindicar
    @Vindicar
    RTFM!
    через requests сохраняется html код страницы, где нет и намека на файл

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

    IvanU7n
    @IvanU7n
    -        for (short i = 0; i < n; ++i) 
    +        for (short i = 1; i <= n; ++i)


    да и зачем там 2 цикла вообще непонятно
    Ответ написан
    Комментировать
  • GCC Добавляет лишние пробелы при компиляции?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Скорее всего проблема в кодировке файла. Попробуй сконвертировать формат файла в utf-8, если другой, и дополнительно смени тип новой строки с \r\n на \n (не уверен, что важно)
    Ответ написан
    Комментировать
  • Почему программа ломается при вводе числа с 11 и более знаками и как это можно исправить?

    vabka
    @vabka
    Токсичный шарпист
    Потому что int имеет ограниченный размер.
    Для твоей программы не обязательно парсить число - можно его разбирать как строку.
    Ответ написан
    Комментировать
  • Windows 10 кавычки вводятся только парами?

    @wmy
    Впечатление, что США международная ставится "невидимо". Переключение на русский срабатывает только со второго раза. Мне помогло установить эту раскладку явным образом, а потом удалить.
    Точнее так:
    установил США международная
    удалил США
    установил США
    удалил США международная
    Не знаю, важны ли дополнительные пункты :)
    Ответ написан
    1 комментарий
  • Windows 10 кавычки вводятся только парами?

    phactor
    @phactor
    Это раскладка клавиатуры. Наверняка стоит США - Международная. Нужна просто США.
    Ответ написан
    5 комментариев
  • Как создать многомерный массив в одной области памяти?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Одномерный массив размером X * Y - единственное решение, если нужен непрерывный участок памяти.
    Для получения первого индекса - index / X, для второго - index % X.
    Но надо позаботиться - чтобы места было достаточно, иначе однажды получишь OOM либо когда место закончится, либо при сильной фрагментации памяти.

    Вариант с "зубчатым" массивом, тоже норм - отложенное выделение можно реализовать. Но по скорости будет проигрывать из-за локальности данных. Хотя, если нужен непрерывный участок - уже не подходит
    Ответ написан
    2 комментария
  • Сокращение функций в си++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Нет.
    Ответ написан
    3 комментария
  • Есть ли фриланс на С++ с нуля?

    vabka
    @vabka
    Токсичный шарпист
    На фрилансе с любого уровня можно работать, лишь бы ты закрывал потребности заказчиков за приемлимую цену и время.

    Умение анализировать рынок и управлять на фрилансе часто важнее, чем умение кодить.
    Были бы навыки - можно вообще без умения кодить
    Ответ написан
  • Можно ли в c++ помечать код метками?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Если это нативный C++ - нет. В нем нет такого синтаксиса.
    Если это CLI/C++ (яп для .net), то да
    Ответ написан
    7 комментариев
  • Не фиксируемое количество аргументов 1 типа в c++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    На выбор: std::initializer_list, variadic arguments, variadic templates.

    Примеры по ссылкам есть. Последнее - вообще оверкилл, и в вашем случае вообще не нужно. Советую использовать initializer_list.
    Ответ написан
    1 комментарий
  • Как сделать скрин на C++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    На винде? Кроме gdi+ можно ещё через directx (гуглите dxgi duplicator) или через windows graphics capture api. Но последние 2 не работают в старых системах.

    Если же вам только посмотреть на несколько пикселей, то можно и в gdi+ делать скриншот лишь маленькой части, или вообще ничего не копировать и смотреть на цвет пикселей в экранном DC.
    Ответ написан
    1 комментарий
  • Как ускорить поиск элементов из статичного string[] по подстроке?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Сначала объедините все ваши строки в одну через какой-то раздилитель, которого не может быть в искомой строке (можно и без него, но с ним код чуть проще будет). В конце поставьте этот же разделитель 2 раза. Вроде "строка1$строка2$строка3$...$строкаN$$".

    Вот уже ваша задача - быстро искать какую-то остроку в фиксированном тексте, а не куче строк.
    Тут есть много вариантов. Например, постройте суффиксное дерево алгоритмом Укконена. Вот эта ваша структура. При запросе, как в боре, поищите искомую строку в этом дереве. Если где-то перехода нет - вхождения вы не нашли. Если вы остановились на какой-то вершине (или ребре в дереве), то вам осталось каким-нибудь обходом в глубину найти все листья в поддереве этого места. Каждый лист соответствует вхождению. Еще при построении суффиксного дерева вы каждый лист пометите началом суффикса. Можно в тот же момент место в строке и конкатенаций перобразовать в номер исходной строки (например, бинпоиском по индексам начал строк в тексте. Или просто заведите массив, где для каждого символа в тексте при построении запишите, какая изначальная строка там была).

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

    Другой вариант - через преобразование Барроуза — Уилера. Вот есть лекция. Этот алгоритм часто упоминается в курсах по биоинформатике. Реализацию может даже найдете где-то. Потом можно найти номера исходных строк из индексов вхождений через тот же бинпоиск по сортированному массиву индексов начал всех строк в тексте.

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

    Учтите, что построение структуры данных тут будет в несколько раз медленнее простого for+Contains. Выигрыш вы получите, если у вас текст действительно статичный и вы в нем много раз что-то ищите.
    Ответ написан
    7 комментариев
  • В каких случаях использовать С++, а в каких Blueprints?

    vabka
    @vabka
    Токсичный шарпист
    Логику пишет геймдизайнер, который не очень то программист - напрашиваются BP.

    Сетевой код, работа с голым UDP - напрашивается C++.

    Какой-то сценарий с триггерами сюжета, простая логика на уровне со всякими кнопками и интерактивом - напрашивается BP из-за его простоты и возможной необходимости в наглядности и чтобы мог менять логику не программист.

    Какое-то очень узкое место, где надо обрабатывать кучу чисел и объектов.
    Что-то типа конвейеров в factorio например.
    Напрашивается C++ из-за своей эффективности и плотности логики, ибо то же самое на BP будет очень развесистой лапшой.
    Ответ написан
    Комментировать
  • Какую книгу выбрать для изучения алгоритмов и структур данных?

    Adamos
    @Adamos
    Бестселлер "101 вопрос на Тостере, которые новички даже не пытаются поискать".
    Ответ написан
    Комментировать
  • Как сделать чтоб одна вункция роботала всегда а другая паралельно каждую секунду?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    {
      thread gameThread(game_loop, ref(star_pleced), ref(staircase_placed), ref(c), ref(t_placed), ref(r_placed), ref(p_placed), rows, cols, ref(map));
      thread monsterThread(monster_move, ref(map));
      gameThread.join();
      monsterThread.join();
      refresh();
    } while ((c = getch()) != '0');


    Этот код запускает потоки (они один раз исполняются) потом ждет их завершения. И это в цикле.
    Проблема в том, что на каждой итерации этого цикла вы будете ждать, пока monster thread спит.

    Потоки тут вообще бесполезны, вы с тем же успехом можете просто вызвать функции напрямую.

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

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Вы случайным образом генерируете координаты комнаты в цикле, пока вам не повезет выбрать полностью пустое место (while (collision == true);).

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

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

    Еще можно сделать немного по другому - вместо случайного выбора места и потом проверки на пересечение, найдите все места, куда комнату можно впихнуть и из их списка выбирайте случайное одним rand(). Тут уже не будет цикла, завершающегося только когда вам повезло. Но тут тоже может быть проблема, что мест для размещения новой комнаты вообще нет. Или перезапускайте с нуля расстановку комнат, или требуйте, чтобы они были маленькие. Еще можно их ставить в порядке от больших к маленьким.
    Ответ написан
    2 комментария
  • Что быстрее индексы или указатели?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Зависит от модели процессора, версии и опций компилятора и немножечко фазы луны. В целом без разницы.

    Практический совет - лучше писать через индексы, ибо так понятнее и больше шансов что компилятор там все наоптимизирует (например, он сможет векторизовать работу через какие-нибудь SSE инструкции процессора).

    Совет по бенчмарку - если памяти не хватает, стоит по одному достаточно большому массиву пройтись 10000 раз. А лучше использовать готовые фреймворки для измерения скорости, вроде того де gbenchmark.

    Еще, иногда полезно посмотреть на ассемблерный выхлоп. Вот, например, что происходит при -O3 опции компилятора. Он генерирует вообще идентичный код для обеих функций (развернув циклы)! И даже при -O2 оно одинаковый код выдает.

    Без оптимизаций код разный, но там все не так как вы думаете. Вместо инструкции mov eax, dword ptr [rax + 4*rcx] в варианте с индексами используется инструкция mov eax, dword ptr [rax] для указателей. Это самое "складывание с указателем массива" вообще не отдельная операция - а вариант адрессации в инструкции mov. Они могут вообще одинаковое количество тактов занимать, это надо мануал по конкретной архитектуре процессоров читать.
    Ответ написан
    Комментировать
  • Как составить HTTP post запрос на dadata?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Помогите составить запрос с помощью модуля requests

    Вы имели ввиду "напишите за меня запрос с помощью модуля requests"?

    На основе официального примера, с помощью модуля requests:
    import requests
    import json
    
    api_key = "api_key"
    secret_key = "secret_key"
    api_url = "https://cleaner.dadata.ru/api/v1/clean/address"
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Token {api_key}",
        "X-Secret": secret_key
    }
    
    # data
    data = ["мск сухонска 11/-89"]
    
    # requests
    response = requests.post(api_url, headers=headers, data=json.dumps(data))
    
    # check response
    if response.status_code == 200:
        print(f"Success: {response.json()}")
    else:
        print(f"Failed: {response.status_code}, {response.text}")
    Ответ написан
    Комментировать
  • Как сделать так чтобы бот понимал какой сегодня день недели?

    @SynapticWhisper
    import datetime
    
    weekdays = {
        1: "Понедельник",
        2: "Вторник",
        3: "Среда",
        4: "Четверг",
        ...
    }
    
    today = datetime.date.today().isoweekday()

    В today будет численное представление сегодняшнего дня недели.
    Дальше если нужно дергаешь значение из словаря, и получаешь в текстовом формате на русском языке.
    t = weekdays[today]
    И как-то обрабатываешь и встраиваешь это в свою логику.
    Было бы неплохо разделить эту простыню кода на модули, отдельный класс или модуль для создания клавиатур, вытащить из бесконечных if-else логику и разделить ее на функции. Тогда можно было бы организовать это все как то так:
    def foo_1(*args, **kwargs):
       """Твой код"""
       ...
    def foo_2(*args, **kwargs):
       """Твой код"""
       ...
    functions = {
       "Понедельник": foo_1,
       "Вторник": foo_2,
       ...
    }
    def func(message):
       if message.text == "Расписание на сегодня":
          today = datetime.date.today().isoweekday()
          t = weekdays[today]
       else:
          t = message.text
       functions[t]()


    объем сократится, читаемость повысится, все в шоколаде
    Ответ написан
    Комментировать