• Как работать с Git на нескольких компьютерах над одним коммитом?

    @abcd0x00
    И после работы хотелось бы закончить работу над фичей/фиксом.

    Это ужасно, конечно, что ты работу делаешь в нерабочее время. Так можно стать трудоголиком (жизнь = работа) и получить выгорание (депрессию).

    Если ты хочешь доделывать работу периодически, у тебя на диске (на флешке, например) должен быть склонированный проект. Его можно подключить к основному проекту как удалённый источник под каким-нибудь именем. Получится, будто он у тебя как бы на github'е, но он будет на флешке и ты сможешь туда заталкивать и оттуда скачивать, как с обычного удалённого репозитория.

    А чтобы перекинуть незакомиченные изменения, используй diff-файл: делаешь git diff, но вывод направляешь в файл и потом этот файл можешь перекинуть в другой репозиторий, а потом сделать git apply с ним в другом репозитории и эти изменения появятся там тоже в незакомиченном виде.

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

    А сами коммиты в такой ветке друг от друга не должны зависеть (не всегда это возможно, конечно), чтобы при отмене одного изменения не нужно было отменять остальные.
    Ответ написан
    4 комментария
  • Как заставить работать scanf?

    @abcd0x00
    Это Visual Studio блокирует сишные функции, предлагая свои функции вместо сишных.
    Надо добавить в самом начале (до всех строк)
    #define _CRT_SECURE_NO_WARNINGS
    Ответ написан
    Комментировать
  • Как посчитать угол по 2-м координатам?

    @abcd0x00
    Здесь про угол между векторами
    угол(a, b) = arccos((a * b) / (|a| * |b|))
    a * b - скалярное произведение (сумма произведений координат)
    |a| - длина вектора (корень из суммы квадратов его координат)
    Ответ написан
    Комментировать
  • Почему путается словарь?

    @abcd0x00
    Словарь в питоне - это такое множество, у которого к каждому элементу прицеплено какое-то значение. А называется это "нагруженное множество" - одна из динамических структур данных. А во множестве элементы не упорядочены, зато очень быстрый поиск.
    Ответ написан
    Комментировать
  • Как исправить кодировку в python?

    @abcd0x00
    На вход приходит как кириллица так и латиница.
    Пробовал # -*- coding: utf-8 -*- и # -*- coding: cp1251 -*-

    Эта декларация кодировки вообще никак не относится к тому, что приходит. Эта декларация сообщает интерпретатору, в какой кодировке записан сам исходник (чтобы интерпретатор неправильно не раскодировал его).
    Ответ написан
    Комментировать
  • Как сделать перебор элементов многомерного списка?

    @abcd0x00
    >>> def f(lst, func):
    ...     for i in range(len(lst)):
    ...         if isinstance(lst[i], list):
    ...             f(lst[i], func)
    ...         else:
    ...             lst[i] = func(lst[i])
    ...     return lst
    ... 
    >>> lst = [1, [2, 3], [4, [5, 6]]]
    >>> 
    >>> lst = f(lst, lambda x: 2 * x + 1)
    >>> lst
    [3, [5, 7], [9, [11, 13]]]
    >>>
    Ответ написан
    Комментировать
  • Точность рекуррентной формулы?

    @abcd0x00
    Там только соотношение выведено правильно. Дальше нужно выбрать правильные начальные значения и правильную проверку для остановки.
    Ответ написан
    Комментировать
  • Профессионально ли реализовал алгоритм?

    @abcd0x00
    Программа (код) должна быть правильной, понятной и легко изменяемой.

    Правильность там страдает, потому что берёт не все ссылки, которые надо брать, и берёт то, что вообще не ссылка, как ссылку. (Если туда вставить комментарий html со ссылкой внутри, она спокойно определит эту ссылку как валидную. И такое часто бывает в реальных страницах - код комментируют периодически и всё это продолжает передаваться.)

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

    Лёгкая изменяемость здесь особо не нарушена, но только потому, что код небольшой. Был бы он больше, это тоже дало бы о себе знать.

    В общем, добавление везде std:: не делает код профессиональным, так как это просто ламерский код с добавленными везде std:: .
    Ответ написан
    Комментировать
  • Как с помощью fstream считать n-ный символ из файла?

    @abcd0x00
    как с потока ifstream из файла считать, например, 30-й символ?

    Надо прочитать 29 символов любым способом (get() или getline() или ещё что-нибудь).
    Ответ написан
    Комментировать
  • Какое обьявление массива в c++?

    @abcd0x00
    где-то "int a[10]", где-то "vector a(10)". В чем разница, если она есть?

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

    Вот int a[10] - это реализация вектора в языке C++, а vector a(10) - это реализация динамического вектора в языке C++.

    Также наряду с динамическим вектором в языке программирования могут быть реализованы и другие динамические структуры: стек, очередь, дек, множество, связный список и другие.
    Ответ написан
    Комментировать
  • Как заставить sed искать не с начала строки с квантификатором '*'?

    @abcd0x00
    [guest@localhost ~]$ echo 'abcd' | sed 's/bb*//'
    acd
    [guest@localhost ~]$


    abcd (почему?!!)

    Ты не понимаешь, как он работает. b* совпадает с пустотой. А пустота где? Пустота в начале. Поэтому он берёт эту пустоту совпавшую и заменяет на пустоту.

    Добавим замену на x и видим это наглядно
    [guest@localhost ~]$ echo 'abcd' | sed 's/b*/x/'
    xabcd
    [guest@localhost ~]$


    Если же ты поставишь там в конце g, это совсем по-другому работает
    [guest@localhost ~]$ echo 'abcdabcd' | sed 's/b*/x/g'
    xaxcxdxaxcxdx
    [guest@localhost ~]$

    Это совсем не то, что надо (он заменил все пустоты и все b).

    Поэтому, если тебе надо заменить только первое вхождение с b, используется либо +, либо аналог плюса через звёздочку
    [guest@localhost ~]$ echo 'abcdabcd' | sed 's/bb*/x/'
    axcdabcd
    [guest@localhost ~]$
    Ответ написан
    1 комментарий
  • Красивый вывод в python?

    @abcd0x00
    >>> import pprint
    >>> 
    >>> lst = [1, 2, 3, 4, 5, {'a': 'b', 'c': 'd', 'e': 'f'}]
    >>> 
    >>> pprint.pprint(lst, width=5)
    [1,
     2,
     3,
     4,
     5,
     {'a': 'b',
      'c': 'd',
      'e': 'f'}]
    >>>
    Ответ написан
    Комментировать
  • Как взять буквенный срез?

    @abcd0x00
    >>> class Human:
    ...     
    ...     def __init__(self, age, name):
    ...         self.age = age
    ...         self.name = name
    ... 
    >>> lst = [Human(20, 'aaa'),
    ...        Human(25, 'fff'),
    ...        Human(30, 'ggg'),
    ...        Human(35, 'jjj'),
    ...        Human(40, 'zzz')]
    >>> 
    >>> out = [i for i in lst if 'f' <= i.name[0] <= 'l']
    >>> out
    [<__main__.Human object at 0xb740d50c>, <__main__.Human object at 0xb740d58c>, <__main__.Human object at 0xb740d5ac>]
    >>> 
    >>> [i.name for i in out]
    ['fff', 'ggg', 'jjj']
    >>> 
    >>> out = filter(lambda i: 'f' <= i.name[0] <= 'l', lst)
    >>> out
    <filter object at 0xb740d68c>
    >>> 
    >>> [i.name for i in out]
    ['fff', 'ggg', 'jjj']
    >>>
    Ответ написан
    Комментировать
  • Почему не работает main?

    @abcd0x00
    Имя main в питоне не зарезервировано, просто функцию main() часто используют по аналогии с сишными программами (по этой функции видно, что делает программа и откуда всё начинается).

    А ворота
    if __name__ == '__main__':
    нужны для того, чтобы исключить определённый код из импорта.
    Каждый файл .py в питоне является модулем, его можно импортировать, как обычный модуль, и использовать содержимое из него (функции, классы и другие объекты). Но при этом и сам по себе файл что-то делает, если его запускают сам по себе. При импорте весь модуль сначала выполняется, но если тебе нужна только функция из модуля и тебе не нужно выполнять то, для чего весь этот модуль сделан, он всё равно будет выполняться весь. Поэтому в модуле ставятся ворота, которые пропускают только тогда, когда модуль запускается в виде самостоятельного файла. Когда же его импортируют, ворота не пропускают.

    Зря ты начал изучение с Django, потому что там никто тебе не будет объяснять эти основы, а это реально самые основы питона.
    Ответ написан
    Комментировать
  • Как передать данные в выполняемый скрипт?

    @abcd0x00
    echo "abc" | script.py
    Ответ написан
    Комментировать
  • Python как сделать табличку?

    @abcd0x00
    >>> def f(n):
    ...     for i in range(n):
    ...         for j in range(n):
    ...             if i == j or n - 1 - i == j:
    ...                 print(' 1', end='')
    ...             else:
    ...                 print(' 0', end='')
    ...             if j == n - 1:
    ...                 print()
    ... 
    >>> f(5)
     1 0 0 0 1
     0 1 0 1 0
     0 0 1 0 0
     0 1 0 1 0
     1 0 0 0 1
    >>> f(11)
     1 0 0 0 0 0 0 0 0 0 1
     0 1 0 0 0 0 0 0 0 1 0
     0 0 1 0 0 0 0 0 1 0 0
     0 0 0 1 0 0 0 1 0 0 0
     0 0 0 0 1 0 1 0 0 0 0
     0 0 0 0 0 1 0 0 0 0 0
     0 0 0 0 1 0 1 0 0 0 0
     0 0 0 1 0 0 0 1 0 0 0
     0 0 1 0 0 0 0 0 1 0 0
     0 1 0 0 0 0 0 0 0 1 0
     1 0 0 0 0 0 0 0 0 0 1
    >>>
    Ответ написан
    Комментировать
  • Как редактировать конфигурационные файлы в Linux?

    @abcd0x00
    Каждая программа сама определяет свой формат файлов. Это могут быть как общие форматы вроде xml, json, yaml, так и самодельные форматы, в которых свои понятия переменных (могут быть похожи на bash'овский, а могут и не быть).
    Ответ написан
    Комментировать
  • Какие есть курсы по алгоритмам для самых "одаренных"?

    @abcd0x00
    Подскажите пожалуйста курсы (именно курсы), пусть платные и на зарубежных ресурсах, где можно изучить алгоритмы и структуры данных

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

    @abcd0x00
    Операция "запятая" - бинарная операция, которая выполняется слева направо. Сначала вычисляется левый операнд, затем вычисляется правый операнд. После этого вычисленное значение правого операнда становится результатом операции.

    Это три операции "запятая".
    (key, array, max, min)

    Выполняется это вот так
    ((key , array) , max) , min)

    Чтобы не путать операцию "запятая" со списками инициализации, перед запятой в операции "запятая" принято ставить пробел.
    Ответ написан
    Комментировать
  • Как указать несколько условий с логическим ИЛИ для if, которые содержат *?

    @abcd0x00
    #!/bin/bash
    
    test_parameter()
    {
        echo "$1" | grep -q '\(video\|audio\|pic\)\*'
    }
    
    if ! test_parameter "$1"; then
        echo error
    else
        echo success
    fi
    
    exit 0


    Вывод
    [guest@localhost sh]$ ./t.sh video
    error
    [guest@localhost sh]$ ./t.sh video*
    success
    [guest@localhost sh]$ ./t.sh audio
    error
    [guest@localhost sh]$ ./t.sh audio*
    success
    [guest@localhost sh]$ ./t.sh x
    error
    [guest@localhost sh]$


    Ещё вариант (всё на функциях)
    #!/bin/bash
    
    error()
    {
       echo "error: $1" 1>&2
    }
    
    ok()
    {
       echo "success: $1" 1>&2
    }
    
    test_parameter()
    {
        echo "$1" | grep -q '\(video\|audio\|pic\)\*'
    }
    
    main()
    {
        if ! test_parameter "$1"; then
            error "incorrect parameter: \"$1\""
        else
            ok "parameter is correct"
        fi
    }
    
    main "$@" || exit 1
    
    exit 0


    Вывод
    [guest@localhost sh]$ ./t.sh 
    error: incorrect parameter: ""
    [guest@localhost sh]$ ./t.sh video
    error: incorrect parameter: "video"
    [guest@localhost sh]$ ./t.sh video*
    success: parameter is correct
    [guest@localhost sh]$ ./t.sh audio
    error: incorrect parameter: "audio"
    [guest@localhost sh]$ ./t.sh audio*
    success: parameter is correct
    [guest@localhost sh]$ ./t.sh pic
    error: incorrect parameter: "pic"
    [guest@localhost sh]$ ./t.sh pic*
    success: parameter is correct
    [guest@localhost sh]$ ./t.sh x
    error: incorrect parameter: "x"
    [guest@localhost sh]$
    Ответ написан
    5 комментариев