Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (5)

Наибольший вклад в теги

Все теги (59)

Лучшие ответы пользователя

Все ответы (256)
  • Как преобразовать список чисел в список комплексных чисел в Python?

    @Andy_U
    data=[4, 5, 7, 8, 9, 0, 3, 3, 6, 6]
    c = [complex(a, b) for a, b in zip(data[:-1:2], data[1::2])]
    print(c)
    Ответ написан
    1 комментарий
  • Задача про стену и кирпичи. Как решить?

    @Andy_U
    Ну, я бы начал с решения уравнения в целых положительных числах 3*x+4*y=25. Решений две штуки: (x=3, y=4) и (x=7, y=1). Т.е. у нас 2 класса рядов. Вариантов расположения кирпичей в первом классе 7!/(3!*4!)=35, во втором классе 8!/(7!*1!)=8. Итого 35+8=43 вариантов ряда. Генерируем их. Теперь заполняем матрицу размером 43*43, ставя единички там, где ряды кирпичей (один в столбце, второй в колонке) совместимы с условием отсутствия общей вертикальной щели (для каждого варианта ряда строим множество {L[1], L[1]+L[2], ... L1+...L[N-1]}, потом очевидно, что ряды "совместимы", если пересечение множеств пустое). Это все быстро и памяти немного надо. На питоне - 30 строк. Кстати, в построенной матрице нулей сильно больше, чем единиц. несколько рядов просто ни с одним другим не совместимы. А потом, увы, перебор, если я правильно понял условие задачи. Типа как в классической задаче "поставить 8 ферзей на шахматную доску, чтобы они не били друг друга".

    Update:

    Код на питоне 3.4.3, решающий задачу перебором (кроме получения "классов" рядов), приведен ниже:

    import itertools
    
    
    def build_tail(height, row):
        if height == 9:
            return neighbours_number[row]
        else:
            return sum(build_tail(height+1, i) for i in acceptable_neighbours[row])
    
    
    rows = {i for i in itertools.permutations([3, 3, 3, 4, 4, 4, 4], 7)} | \
           {i for i in itertools.permutations([3, 3, 3, 3, 3, 3, 3, 4], 8)}
    
    acc_rows = [set(itertools.accumulate(row[: -1])) for row in rows]
    acceptable_neighbours = [[i for i, b in enumerate(acc_rows) if not (a & b)] for a in acc_rows] # copied from @bobrovskyserg
    neighbours_number = [len(i) for i in acceptable_neighbours]
    
    print(sum(build_tail(1, i) for i in range(0, len(acc_rows))))


    Время решения ~40 секунд, ответ bobrovskyserg подтверждаю. Пошел разбираться с его алгоритмом...
    Ответ написан
    3 комментария
  • Как устранить ошибку microsoft visual c++ 10.0 is required (unable to find vcvarsall.bat)?

    @Andy_U
    Запомните url: www.lfd.uci.edu/~gohlke/pythonlibs, где вы найдете уже скомпилированный модуль/пакет для вашей версии питона и разрядности, скачаете его и инсталлируете командой pip install file .whl (lxml там точно есть).
    Ответ написан
    5 комментариев
  • Объясните как работает код в примере?

    @Andy_U
    Код вашего упражнения - на уже мертвом питоне версии 2.X. Забудьте про эти извращения. Изучайте 3.X, где все заметно проще.
    Ответ написан
    Комментировать
  • Почему ATOM не видит python3?

    @Andy_U
    Прочитайте внимательно 4-ю строчку из вашего скриншота.
    Ответ написан
    3 комментария