# JavaScript (ES6), <s>87</s> <s>78</s> 76 bytes *-9 bytes thanks to [@RickHitchcock][p1].* *-2 bytes thanks to [@Neil][p2].* <!-- language: lang-js --> f=(s,i=10)=>s.trim()&&s+` `+f(s.replace(/./g,c=>parseInt(c,36)>i?c:" "),i+1) Takes input as a string and returns with one trailing newline. ## Test Cases <!-- begin snippet: js hide: true console: true babel: false --> <!-- language: lang-js --> f=(s,i=10)=>s.trim()&&s+` `+f(s.replace(/./g,c=>parseInt(c,36)>i?c:" "),i+1) ;["hello", "Programming Puzzles & Code Golf!", "~|[abc<0>cba]|~", "abcdefg0123456789"] .forEach(s=>console.log(f(s))); <!-- language: lang-css --> .as-console-wrapper{max-height:100%!important} <!-- end snippet --> [p1]: https://codegolf.stackexchange.com/users/42260/rick-hitchcock [p2]: https://codegolf.stackexchange.com/users/17602/neil