Ответы пользователя по тегу Python
  • Определить координаты противоположных углов прямоугольника – левого нижнего и верхнего правого в одномерном массиве?

    @DaneSoul
    1) Не забываем условие, что стороны прямоугольника паралельны координатным осям - это возможно только в случае, когда у нас для 4-х точек (x1,y1), (x2,y2), (x3,y3), (x4,y4) выполняются сразу 4 условия:
    x1=x2, x3=x4, y1=y3, y2=y4

    2) Выбираем все уникальные х-координаты, которые представлены более чем в 1 экземпляре - это набор прямых проходящий через точки нашего набора параллельно оси Oy.
    Для этих прямых выбираем все точки из исходного списка, которые на них лежат.

    3) По аналогии с пунктом 2 делаем тоже самое для y

    4) В итоге, мы имеем два набора точек - один рассчитанный в пункте 2 и второй в пункте 3, причем, сразу заметим, что часть точек присутствуют в обеих, а часть только в одном из них и эту вторую часть можно будет сразу отбросить, так как они не находятся на пересечении прямых.

    5) Дальше используя комбинаторику перебираем все варианты пар точек по горизонтали и аналогичный по вертикали, считая площади, не забывая проверять пункт 1.
    Вот этот пункт самый ресурсоёмкий и его можно оптимизировать.

    6) Площади считаем из координат по простой формуле: S = (x3-x1) * (y2-y1)
    Ответ написан
    Комментировать
  • Как отсортировать регулярные выражения по степени "специфичности" в отношении конкретной строки?

    @DaneSoul
    А как Вы рассматриваете специфичность фильтров к одной и той же строке?
    Для одной строки фильтр или пропускает ее или откидывает.

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

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

    Мутировать строку можно разными способами:
    - менять случайные буквы на другие
    - менять буквы местами
    - убирать\добавлять буквы, слова
    - менять слова местами
    Таким образом из одной строки можно делать целый тестовый набор.

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

    @DaneSoul
    Mark Lutz
    • Learning Python, 5th Edition - сам язык в деталях, от основ, до очень глубоких тонкостей
    • Programming Python, 4th Edition - упор на прикладное применение языка
    Ответ написан
    Комментировать