Когда полезно уметь в leetcode

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

Ну что ж, instant karma! На выходных я писал компилятор телеграмовских сообщений в html—это нужно для двухсторонней синхронизации с Ghost. Взял собщение из телеги, конвертнул в html, засунул в Ghost, получил пост на сайте, Profit! Изи таска.

Телеграм присылает сообщения в хитром формате. Вы можете посмотреть его в документации к Bot API. В одном поле отправляется plaintext, в другом—набор сущностей названных Entity. У них есть "тип"—жирный, курсив, ссылка, хэштег и так далее, "начало"—позиция в тексте откуда начинается форматирование и "длина"—количество символов, на которые распространяется форматирование.

Вроде выглядит просто. Взял текст, порастыкивал тэги по позициям, пошёл пить чай.

Я решил что задача простая, можно взять её нахрапом, и сел писать код.

Спустя день возни я понял что не всё так просто. Реализация у меня получалась монстроузная, да еще и бажная на тестовых данных. Я понял, что совершил ошибку, не посмотрев на то, как этот же алгоритм реализован в других телеграм клиентах. Быстрый поиск по интернету вывел на сниппет с php-кодом, который был некорректный, но все равно выглядел получше моего. Я выбросил свой, взял скрипт за основу и принялся писать вторую реализацию.

От долгого красноглазия я утомился и вышел в АТБ. Как только я оказался на улице, мне в голову пришло простое и изящное решение. Купив египетской картохи и вакуумированной отечественной "моцареллы", я ломанулся домой. Менее чем за полчаса я написал код который хорошо справлялся со всеми корнеркейсами, был компактным и понятным.

Однако на одном из тестовых постов он всё равно сломался. Уже несколько по другой причине, и я потратил еще пару часов на фикс.

Так вот, если бы я был натаскан на литкод задачи, то изначально пошел бы по правильному пути. Я опубликую своё решение в пятницу, а пока предлагаю пытливому читателю развлечь мозг.

Условия вы можете посмотреть в документации. Нужно принять сообщение от телеграма и конвертнуть его в html со всем форматированием. На самом деле там куча подводных. Это типичная задача типа Rabbit Hole когда ты просто проваливаешься в бездну.

Пример сообщения от телеги: https://gist.github.com/rozhok/75878a86f0df647a802fba0dd7ddbdc5


Сподобалось? Долучайтеся до мого телеграм каналу: https://t.me/full_of_hatred