Helloellolloloo Worldorldrldldd
brainfuck, 60 56 bytes
,[>++++++++[-<----<++++>>]<[>>]<[[<]>.[[-]>[.>]<[<]>]],]
Try it online!
Requires a trailing space and prints a leading space. Both of these could be circumvented, but that ends up at 112 bytes.
Explanation
,[ Loop over each byte of input
Tape: 32 w o r-32 d'
>++++++++[-<----<++++>>] Subtract 32 from the character and add 32 to the previous char
Tape: 32 w o r d-32 0'
<[>>]< If the last character was a space
Tape: 32 w o r d-32 0'
or
Tape: 32 w o r d' space-32
[
[<]>. Move to the end of the word and print out the space
[ Loop over each letter
[-] Remove the first letter (initially space)
>[.>] Print the rest of the word
<[<]> Move back to the first letter
]
Tape: clear
]
,] Get the next byte of input
Japt -m
, 6 3 bytes
Input and output are arrays of words.
£sY
Try it
Explanation
:For each word in the input array
£ :Map each letter at index Y
sY : Slice the current word from index Y
Haskell, 36 21 bytes
map$concat.scanr(:)""
Try it online!
Edit: -15 bytes, because of new IO format (list of words instead of space separated words)