• Юридические последствия бага на сайте?

    @lutokris
    Может кто помнит или нет, в одно время навел шуму баг связанный как-то с покупкой авиабилетов и получением баллов спасибо. То есть там был какой-то баг что при оплате без проверки оплаты билета человеку сразу капало баллы. И конечно на этом лютом баге человечки закупились айфонами в магазинах где можно было им оплатить часть покупки. А потом на следующий день всем этим людям звонили из службы безопасности и расспрашивали подробно как все это произошло. Самое странное - айфоны никто обратно требовать не стал и потому мне страшно представить сколько нулей повесили на допустивших такой баг.
  • Как еще чуть ускорить алгоритм?

    @lutokris Автор вопроса
    Я немного в шоке, потому что я сперва сам делал в подобном роде, с двойным обходом и у меня сперва возникали проблемы с памятью, а потом все равно не смог уложиться в 3 секунды. Но у вас работает всего за 2.366 секунд и это n=10^6 элементов. Я в шоке, буду подробно дебажить ваш алгоритм и попытаюсь понять за счет чего он такой быстрый.
  • Как еще чуть ускорить алгоритм?

    @lutokris Автор вопроса
    Ваш алгоритм мне очень понравился за изящное использование генератора списков, но к сожалению почему-то он по времени все так же не укладывается и даже чуть медленнее чем мой громоздкий побитовый( у меня 3.076 секунд, у вашего 3.08, а при попытке ускорения - он наоборот почему то замедляется еще.
    61c9c63580777249067626.png
  • Как еще чуть ускорить алгоритм?

    @lutokris Автор вопроса
    import time
    
    
    def know_range(n):
        half = n // 2
        if n == 1:
            print("1", end=" ")
            return
    
        [print(x, end=" ") for x in range(1, half+1)]
        if n & 1: # если нечетный
            print(half+1, end=" ")
        [print(x, end=" ") for x  in range(half, 0, -1)]
        return
    
    
    def file_read_to_byte_discrete(f_path):
        res_arr = 0b0
        len_arr = 0b0
        n = 0
        with open(f_path) as f:
            n = int(f.readline()) + 1
            len_arr = 0b1 << n
            buf = ""
            i = " "
            while i != "":
                i = f.read(1)
                if i != " " and i != "":
                    buf+= i
                else:
                    if buf == "":
                        break
                    if int(buf) | 0:
                        res_arr = res_arr | 1
                    else:
                        res_arr = res_arr | 0
                    res_arr = res_arr << 1
                    buf = ""
            f.close()
        res_arr = len_arr + res_arr
        res_arr = res_arr >> 1
        return res_arr
    
    
    byte_arr = file_read_to_byte_discrete('input.txt')
    n = len(bin(byte_arr)) - 3
    number = 0
    
    # проверим левый край если там не ноль
    left_null = 0
    if ((byte_arr >> n-1) & 1):
        number = 0
        for i in range(n-1, -1, -1):
            if not ((byte_arr >> i) & 1): # если найдем нолик выходим
                if number != 0:
                    left_null = number
                else:
                    left_null = 1
                break
            else:
                number += 1
        if number != 0:
            for i in range(number, 0, -1):
                print(i, end=" ")
    
    number = 0
    for i in range(n-1-left_null, -1, -1):
        if not ((byte_arr >> i) & 1):
            # найден нолик
            if number != 0:
                know_range(number)
            print("0", end=" ")
            number = 0
        else:
            number += 1
    # проверим правый край если там не ноль просто печатаем номера
    if (byte_arr & 1):
        [print(x, end=" ") for x in range(1, number+1)]

    Попытался немного выиграть в производительности за счет того, что я выбросил массив для результата и стал сразу выкидывать в консоль ответ - но за счет этого выиграл жалкие 0.02 секунд. Мой смысл был в том, что я сперва считывал из файла и преобразовывал в дискретный формат типа 1110011101 а потом изучал эту дискретную строку и вычислял расстояния) Но все равно походу очень много времени пожирает именно мой алгоритм побитового преобразования, я просто думал что битовые операции процессор выполняет быстрее всего и планировал выиграть за счет этого( но не проканало)
  • Зачем используют Django и Python, разве не удобнее сразу все сделать через Node.js и javascript фреймворки?

    @lutokris Автор вопроса
    Вроде стало чуть понятнее. Дело в том, что с яваскриптом, да и вообще фронтендом отношения у меня ниже уровня чайника. И пока не до конца понимаю понимаю работу фронтенда - а именно откуда он берет данные для всяких "асинхронных" вызовов и безопасность этих вызовов. Допустим у нас есть динамический чат с системой лайков, дизлайков на js, как было во многих онлайн браузерных играх. Вроде по правилу разделения на бекенд и фронтенд, клиентская часть не должна иметь прямой доступ к серверной части. А значит этот чат должен напрямую обращаться к серверу. И тут я захожу в тупик - как лучше с фронта брать данные с бэка? Делать доступ через REST, писать какие-то http запросы для получения данных.. и как тогда бекенду на Django работать с таким динамическим фронтом и передавать ему данные. В общем в голове снова каша)
  • Как будет правильнее писать оконное приложение используя Tkinter?

    @lutokris Автор вопроса
    Ultra-Bad Coder, я тоже так подумал, начал смотреть в сторону pyqt. Раньше я тоже пытался научиться писать GUI на QT используя С++, но дальше калькулятора дело не поехало.
  • Как добавить элемент в массив?

    @lutokris
    не понял, для чего у вас цикл внутри цикла, как будто элементы двумерного массива обходите и для чего в теле цикла просто выражение array[i], для чего тогда еще и цикл с j создали.
  • Как использовать данные сайта в своей программе?

    @lutokris
    к сожалению я не профи, пока учусь, но что если это реализовать с помощью того же Селениум на Питоне? Я пока только начинаю учить питон параллельно с С++ и еще не дошел до темы парсинга, но думаю вполне можно реализовать скрипт питон с выводом в файл с которого будет читать твоя программа в свой массив. Если я правильно понимаю, Селениум на питоне хоть и медленнее методов прямых пост-гет, но зато вроде "тыгыдык, найди что-то, нажми туда, тыгыдык и получи что нужно, извлеки что нужно и запиши куда-нибудь". )
  • Годится ли i3-2100 для клиента 1С или нужно собирать новый на базе G5420, Ryzen 3 2200G или i3-9100?

    @lutokris Автор вопроса
    DeniSidorenko, ну профит лишь в том, что могу докупить еще комплектующих вместо покупки одного пк)
  • Как функцию вместо void (char*s) написать char* (char* s)?

    @lutokris
    Bahantay, хорошо, попробую тоже решить задачку, отпишусь потом сюда)
  • Почему не расширяется массив структур?

    @lutokris
    HoShik, чтобы получить размер не указателя, а самой структуры нужно
    sizeof(*leaderboard)
  • Почему не расширяется массив структур?

    @lutokris
    Евгений Шатунов, то есть я правильно понимаю, если автор создал бы просто указатель типа leaderboard, то он мог бы его расширять с помощью realloc? А массив выделенный статически сразу занимает в памяти определенный диапазон памяти и вызов реаллока создаст по адресу массива в памяти дополнительные ячейки, но сам массив от этого не расширится потому что он создан статически? и как уже написали, поэтому нужно каждый раз перед расширением создавать его заново с большим количеством ячеек
  • Почему не расширяется массив структур?

    @lutokris
    Евгений Шатунов, ну так я правильно же понимаю, что никакой массив в С++ расширить нельзя? и скорее всего это будет работать только на чистом Си.
  • Почему не расширяется массив структур?

    @lutokris
    В вашем случае если я правильно понимаю выражением
    realloc(leaderboard, new_size);
    вы просто выстреливаете в пустоту, ну или образно говоря совершаете ППА)
    реаллок возвращает новый адрес на новую расширенную структуру, но он ни в какой указатель не принимается и уходит в никуда)
  • Почему не расширяется массив структур?

    @lutokris
    мне кажется или нет, но как написано на одном форуме, realloc работает следующим образом:
    1. делается malloc(новый_размер) во временную переменную внутри реалок
    2. Если malloc() вернул NULL, то он и возвращается функцией, при этом c памятью, на которую указывает a ничего не происходит(и её можно освобождать через free())
    3.Если всё норм, то по новому адресу переносится содержимое со старого адреса (вроде даже через обычный memcpy)
    4. Освобождается старая память с адресом, переданным через a, а именно free(a)
    5. возвращается новый указатель

    и если я правильно понимаю будет так:
    board *lB = &leaderboard;  //передаем адрес глобального массива в указатель lB
    
    lieB = (board*)realloc(a, newsize *sizeof(board));  
    if (lieB) 
        lB = LieB;  //если честно я сам  не до конца понял для чего создают другой указатель, можно было бы и наверное в старый
    else error();
    free(lieB); //как я понял уничтожаем именно сам временный указатель, а не то, на что он указывает. Ведь он оказывает туда же
                    // куда и lB, где хранится наша новая расширенная структура.
  • Как функцию вместо void (char*s) написать char* (char* s)?

    @lutokris
    Bahantay, Bahantay, я думаю из за того что вы возвращаете не сам указатель, а адрес массива по адресу [idx-1], что не соответствует прототипу функции. Попробуйте не return &words[idx-1], а просто return words. Тогда функция вернет просто указатель на массив.
  • Как функцию вместо void (char*s) написать char* (char* s)?

    @lutokris
    А почему бы получить исходящий массив не через возврат функции, а просто передать его через указатель и там ж его изменить.
    типа так:
    char input[] = "блабалалаллала";
    char *in = input;
    char output[MAX_SIZE];
    char *out = output;\
    
    а функцию сделать:
    
    void BlaBlaSort(const char *in, char *out)
    {
          //берем из *in и пихаем в *out
    }
  • Как функцию вместо void (char*s) написать char* (char* s)?

    @lutokris
    Думаю проблема в том, что char* ord_alphlong(char *s) возвращает указатель на локальный объект char *words который создается внутри твоей функции а потом уничтожается. Т.е. твоя функция возвращает адрес мусора))
  • Почему выделение памяти под строку выглядит не по шаблону?

    @lutokris Автор вопроса
    Wataru, спасибо, вот про это почему то я не знал, кажется довольно поверхностно читал про описание строки. Думал ставлю две кавычки "" и пишу под ними что хочу, то и хранится в памяти. Кажется вроде только в книге про ассемблер сумбурно читал что в конце строки есть символ завершения '\0'
  • Почему выделение памяти под строку выглядит не по шаблону?

    @lutokris Автор вопроса
    спасибо, а символ завершения строки - '\0', я сам его должен вставлять если сам создаю строку или он по умолчанию сам создается компилятором. Допустим я создаю строки
    char* Str = "ЦойЖив";
    string S = "ЦойЖив";
    то размеры обеих строк будут не 6 байтов(длина строки), а Length + 1, то есть 7 байтов?