TLDR; существует фонетическое деление слова на слоги, оно отличается от того что дают в обычных школах и может не совпадать с правилами расстановки переносов; реализация фонетического деления на слоги на JavaScript и на Elixir.

Понадобилось мне делить слова на слоги, решил поискать есть ли готовые алгоритмы, алгоритм в результате не нашел, но удалось найти несколько реализаций на PHP, JS. В принципе на habr нашлось некое маломальское формальное описание такого алгоритма как раз на PHP. Но хоть я и понимаю PHP — мысль до конца не уловил, да и как признался автор не все случаи он покрывает.

В конце концов мне попалась реализация на JS, на этом могло всё и закончиться, но решил попробовать сравнить демки на Svelte и LiveView. На svelte соотвественно поднять демку труда не составило раз всё готово. А вот с LiveView, а это платформа Elixir, возникла заминка так как такой библиотеки в наличии не оказалось. Ну ладно, думаю, попробую переписать JS на Elixir, делов-то думал я…

Начал транслировать, и тут быстро стало понятно, что в лоб это не решить, на JS было написано, что вполне естественно, в императивном стиле, но вот Elixir — это функциональный язык и при этом иммутабельный (потому как платформа Erlang). И как следствие наивная трансляция с JS не только будет не эффективна, но и переусложнена, к тому же мне это быстро надоело…

Пришла пора разобраться как работает этот алгоритм и попробовать реализовать его с нуля на Elixir. В процессе чиркания на листочке, алгоритм стал немного проясняться, и в какой то момент пришла простая мысль что слово стоит обходить с конца в начало. И как результат, алгоритм стал проще, потоковым и без обработки подстрок.

Ну а дальше сложно было удержаться не сделать по тому же принципу реализацию на JS, да-да, оттранслировать теперь Elixir на JS, и да-да сделать ещё одну библиотеку.