Из-за того, что на codingame доступна только стандартная библиотека OCaml, да и то не вся, приходится писать свои мелкие функции. С каждой итерацией функции всё больше похожи на что-то пригодное для продакшена.
В этот раз я снова написал функцию для разбиения строки на подстроки.
let split str ~on:delim = let open String in let rec _split acc str = try let pos = index str delim in _split ((sub str 0 pos) :: acc) (sub str (pos + 1) ((length str) - pos - 1)) with Not_found -> str :: acc in _split [] str |> List.filter (fun s -> s <> "") |> List.rev let () = "This is a long message with two spaces after next word and still there is shouldn't be an empty string in a list " |> split ~on:' ' |> String.concat "\n" |> print_endline
Отсутствие библиотек всё чаще заставляет задуматься о переходе на hackerrank, где есть Core. Если писать решения для обычных задач ещё можно, то участвовать в соревнованиях может быть сложно. А с другой стороны так я получаю больше практики и лучше понимаю, как работает OCaml.