val splitOnWords = ListHelpers
.groupConsecutiveBy[String](
s.toSeq.map(_.toString),
(x: String) => x.matches("[a-zA-Z]")
)
val words = splitOnWords.map(_.mkString)
words.map { word =>
if word.length == 1 then word.toUpperCase
else s"${word.head.toUpper}${word.tail.toLowerCase}"
}.mkString