Прислоните одну руку к монитору, а вторую к голове и громко мычите. Тогда все здесь присутствующие экстрасенсы почувствуют все ошибки в вашем коде, смогут его прочитать через астрал и сразу ответят на все ваши вопросы. Хором!
TemaKam, смотрите. У этого алгоритма сложность порядка O(N). Там фактически два прохода по всем эkементам в худшем случае, но O(const*N) читается эквивалентным O(N).
Почему так? Потому что Counter построен на основе словаря (Hash Map). За счет оптимизаций и математической магии с хешированием амортизированная сложность вставки в такую структуру данных будет порядка O(1). Очевидно, что это нужно проделать N раз. Потом ещё в худшем случае N раз, чтобы перебрать все неповторяющиеся элементы.
Это не проблема.
Если бы у вас список был изначально отсортированным, то его можно очистить от лишних вам элементов тоже за O(N), да за один проход. Если список не сортированный, то придётся его сперва осортировать, что займёт у вас в среднем O(N*lnog(N)) и это хуже, чем вариант выше.
Короче, не морочьте голову.
Кстати, вы можете и за один проход выдать все дублирующиеся элементы:
def filterdup(items):
c = Counter()
for item in items:
if c[item] == 1:
yield item
c[item] += 1
Но фактически вы этим ничего не выиграете. Думаю этот вариант даже медленнее будет.
Codebaker, полезненько! Я наивно рассчитывал, что не придётся копаться и кромсать более сложную, чем надо схему, но чего уж...
Спасибо. Засуньте, пожалуйста, ссылку в ответ и я его помечу как таковой.
Дмитрий Александров, Ну это уж совсем из пушки по воробьям...
Для меня сейчас основной вопрос в формировании высоковольтного сигнала для имитации вызова.
Остальное я более-менее представляю как сделать на ардуинке и копеечых модулях с алиэкспресса вроде mp3-плеера с управлением через ISP. Даже записывать слинии, вроде как, можно с помощью штатного АЦП на контроллере без всяких кодеков в PCM.
Надеялся, что олды придут и ткнут в схему их моделиста-конструктора двадцатилетней давности=)
Спасибо за конструктивное замечание по сути вопроса.
Да, параметры сигнала в линии я, конечно же, нагуглил давно, а вот готовую схему для имитации линии с поддержкой зонка не нашел, хотя за столько лет актуальности проводной телефонии наверняка в каком-нибудь Моделисте-Конструкторе, ном Технике или журнале Радио кто-то публиковал более-менее простую схему с имитацией тривиальной АТС или чем-то в этом роде.
Вопрос откорректировал. Электроника - не мой профиль. Если подключить ардуинку или расчитать резистор для светодиода - это для меня не сложно, то в такой вот задаче хотелось бы действовать наверняка и не тратить много времени на непрофильные эксперименты.
Я вижу несколько путей: 1) DC-DC повышает напряжение до 54 вольт, заряжает конденсатор. Мосфет затвором висит через подтягивающий резистор на ноге контроллера и подключает по сигналу конденсаторв линию.
Вопрос, достаточно ли такого "меандра" для натурального звучания звонка?
2) подаём меандр также через мосфет на вход трансформатора,а уже его подклчаем в линию. Но там низкая частота, как расчитать трансформатор, будет ли он эффективен? Особенно учитывая однополярность входного сигнала.
3) использовать мостовую схему на двух транзисторах или готовый драйвер коллекторного двигателя с реверосм, чтобы подавать напряжание с DC-DC преобразователя напрямую.
Adamos, это масло масляное. Читать-то зачем программы? Чтобы дописать что-то или чтобы ошибки найти и исправить. А если программа не дописана или в ней есть ошибки, то программу нужно дописывать, а значит весь процесс можно обобщить.
Не чтением единым, так сказать.
Вообще, нужно стараться, чтобы программы были несложными в любом случае, даже если функциональность, которую он обеспечивают очень непростая. Вот чтобы распределеять сложность, выносить её за пределы слишком сложных участков, и нужно ООП, хотя не только ООП.
Но в целом признаю. В моём случае следует заменить слово !писать! на слово "разрабатывать"
BegliyTapok, ну это смотря как подвесить, вообще-то...
Специализированных либ, кстати. не знаю для этого. Наверно есть биндинги для повершелл какие-то.
Я давно уже не работаю с виндой.
так-то мысль звучит довольно здраво, чтобы панель управления в отдельном контейнере разместить.
Даже не знаю как правильно поступить. А вдруг придётся помимо докера ещё что-то на хосте делать? Может по ssh всё же лучше? Но в плане безопасност такое выглядит, коненчо, так себе. Уроборос, эдакий.
geopunk, это отчасти личные заморочки, а отчасти нет. Кошка не имеет никакого запаха, от собаки есть неприятный запах, даже сразу после купания. Кошка (моя по крайней мере) не принесёт и не закопает вам в кровать кусочек сыра, или пельмень, или недоеденную котлету, или косточку, а собака делает это с некоторой регулярностью.
samperirrrrr, ну так начните с чтения учебника или просмотра хорошего бесплатного курса с вполнением упражнений.
Метод replace есть у строк, он возвращает новую строку с замененными подстроками, идентичными первому аргументу на значения фторого аргумента. Само собой, что число не может быть подстрокой строки. Подстрока - это строка. Число - это не строка. Числа задаются одними литералами (числовыми), а строки строковми литералами (символами в кавычках).
Однако это всё ерунда. Тот факт, что вы не понимаете концепию присвоения и ссылок в питоне, говорит о том, что вам нужно начать с азов и вопольоваться учебником, а не пытаться писать код методом тыка и с помощью вопросов и ответов. Предтавьте, что кто-то бы так аппендицит учился вырезать. Пусть даже на кошечках а не на людях.
мало подходит такое решение, т.к. нужно на лету считать и быстро, а данных много
Тут как раз не проблема. Хранимка будет работать в потоке как специфическая оконная функция. На реальных данных она не будет работать заметно медленнее, чем обычный запрос.
Не так уж много интервалов пересекаются с конкретной датой. А из стека предыдущий интервал брать даже быстрее, чем сабселектом. Так что присмотритесь к хранимкам.
Кстати, есть еще вариант. Сделать дополнительную таблицу, где хранить "раскрытые скобки", то есть непересекающиеся упрощенные интервалы. Так вы перенесёте вычислительную сложность из чтения (которое часто) на запись (которая сравнительно редко).
При модифиуации вашей сложно-интервальной таблицы удаляете и пересчитываете упрощенные плоские интервалы в кэше. Там же можно и предыдущие значения цен хранить готовенькими.
Денормализация и некоторая избыточность, зато на чтение будет просто реактивной и в любой момент можно перестроить плоскую таблицу.
Андрей Мохов, добавьте, пожалуйста, в текст вопроса шаблон SQL с таблицей тестовых данных. Такие задачки народ с бОльшим удовольсивем берётся решать, когда нужно лишь поиграться с SQL.
Если бы вы приложили еще и ссылочку на онлайн REPL постгреса, чтобы не поднимать локальную базу для попробовать, вообще было бы круто
Андрей Мохов, так, без паники. Я. действительно, не обратил внимания, что интервалы пересекаются.
Странно. То есть более поздний интрвал имеет бОльший приоритет, чем более ранний?
Мне кажется стоило отдельно упомянуть. что интервалы могут пересекаться и включать друг-друга, но приоритет по дате открытия интервала. Однако, согласен, это моя невнимательность.
Вы попытались решить задачу оконной функцией и это, действительно, довольно проблематично в данных обстоятельствах.
Тут бы подошло решение в виде храниой процедуры со стеком.
"Скобочная" вложенность этих интервалов может быть очень большой и чистый SQL лохо приспособлен для таких контекстно зависимых задач.