Sublime чудесен. Можно сказать, что проблема отсутствия под linux-ом Notepad++ успешно решена.
Правда был вопрос – насколько можно его использовать для написания всяких текстов. А чтобы в программе писали тексты, она должна уметь подсчитывать символы.
Соответствующий плагин нашёлся сразу, но он не умел посчитывать количество символов. Решил допилить, а заодно разобраться, что у этих плагинчиков внутри.
В результате – целый вечер открытий и удивительных экспериментов. Удивился встроенной консоли, попутно оптимизировал код и исправил баг с полем read_time в настройках.
Обновлённый код успешно merged и залит в основную ветку.
А удивил меня сам алгоритм подсчёта. Их там целых два, причём первый закомментирован:
На самом деле алгоритм 2 отрабатывает намного быстрее, чем 1. Например, чтобы подсчитать количество слов в “Петербургских трущобах” Крестовского, 2-ому нужно порядка 1 сек., а первому – 2.
Вот вам и оптимизация.
Правда был вопрос – насколько можно его использовать для написания всяких текстов. А чтобы в программе писали тексты, она должна уметь подсчитывать символы.
Соответствующий плагин нашёлся сразу, но он не умел посчитывать количество символов. Решил допилить, а заодно разобраться, что у этих плагинчиков внутри.
В результате – целый вечер открытий и удивительных экспериментов. Удивился встроенной консоли, попутно оптимизировал код и исправил баг с полем read_time в настройках.
Обновлённый код успешно merged и залит в основную ветку.
А удивил меня сам алгоритм подсчёта. Их там целых два, причём первый закомментирован:
#=====1 # wrdRx = Pref.wrdRx # """counts by counting all the start-of-word characters""" # # regex to find word characters # matchingWrd = False # words = 0 # for ch in content: # # # test if this char is a word char # isWrd = wrdRx(ch) # if isWrd and not matchingWrd: # words = words + 1 # matchingWrd = True # if not isWrd: # matchingWrd = False #=====2 wrdRx = Pref.wrdRx words = len([x for x in content.replace('\n', ' ').split(' ') if False == x.isdigit() and wrdRx(x)])На первый вгляд, алгоритм 1 должен работать лучше и экономней. Фактически, перед нами нечто наподобие state machine, и его сложность не больше o(n). В то время как второй алгоритм создаёт кучу новых элементов только для того, чтобы их пересчитать.
На самом деле алгоритм 2 отрабатывает намного быстрее, чем 1. Например, чтобы подсчитать количество слов в “Петербургских трущобах” Крестовского, 2-ому нужно порядка 1 сек., а первому – 2.
Вот вам и оптимизация.
Комментариев нет:
Отправить комментарий