Inserting in a string

I think you’ll need to change your accumulator in your reduce (and possibly even write the reduce without Enum.reduce/2). You’ll want to know what the next character is so you know if you need to insert a space or not. Additionally, using a regular expression to check if it is an uppercase is not very performant. I think you’d be better off doing x == String.upcase(x) to check that.

Secondly, your bug which changes everything from letters to numbers is caused by two things. First String.to_charlist/1 returns a list of integers, not binaries (strings). If you want to reduce a string, you should do String.codepoints/1, which will give you a list of strings of a single character (including unicode). Your error comes in when you take an integer like ?a which is 97, and do to_string(97), which produces "97", not "a". This won’t be a problem if you use String.codepoints/1 like I mentioned above.