This looks very clean, well done. I think I would have gone for that one if keeping spaces wasn't an issue, but it is in this challenge.
The second code example from this post is wrong in the sense that spaces must be kept, and only a few provided solutions here are working because the example was not clear enough on what was expected.
letreverseWords=(str)=>str.replace(/\S+/g,word=>[...word].reverse().join(""));console.log(reverseWords("The quick brown fox jumps over the lazy dog."));// ehT kciuq nworb xof spmuj revo eht yzal .godconsole.log(reverseWords("double spaced words"));// elbuod decaps sdrowconsole.log(reverseWords("🞀🞁🞂🞃"));// 🞃🞂🞁🞀
I avoided split("") as it breaks with non BMP characters. The spread operator works just as well for splitting strings into individual characters and won't break astral characters.
Notice how if I use split the output is messed up on my last test case.
letreverseWords=(str)=>str.replace(/\S+/g,word=>word.split("").reverse().join(""));console.log(reverseWords("The quick brown fox jumps over the lazy dog."));// ehT kciuq nworb xof spmuj revo eht yzal .godconsole.log(reverseWords("double spaced words"));// elbuod decaps sdrowconsole.log(reverseWords("🞀🞁🞂🞃"));// �🞂🞁🞀�
functionreverseWords($words){$pattern='/\S+/';returnpreg_replace_callback($pattern,function($word){returnstrrev($word[0]);},$words);}echoreverseWords('The quick brown fox jumps over the lazy dog.');echoreverseWords('double spaced words');
defreverseWords(words):r=""forwordinwords.split():r+="{} ".format(word[::-1])print(r)reverseWords("The quick brown fox jumps over the lazy dog.")reverseWords("double spaced words")
This version current works if the end of input pushes -1 on the stack (due to the interpreter I used), change 3 characters and it works for a carriage return
functionreverseWords(str){letwordbuf="";letoutbuf="";for(letcharofstr){// NOTE replace with `if (/\s/.test(char))`// if anything other than ASCII whitespace// char expectedif(char===""){outbuf+=(wordbuf+char);wordbuf="";}else{wordbuf=char+wordbuf;}}outbuf+=wordbuf;returnoutbuf;}
constreverseWords=(sentence)=>sentence.split("").map((word)=>[...word].reverse().join("")).join("");console.log(reverseWords("This is an example!"));console.log(reverseWords("double spaces"));
Haskell
Without libraries:
reverseWords = unwords . map reverse . words
This looks very clean, well done. I think I would have gone for that one if keeping spaces wasn't an issue, but it is in this challenge.
The second code example from this post is wrong in the sense that spaces must be kept, and only a few provided solutions here are working because the example was not clear enough on what was expected.
I always lookup for the original challenge in Codewars to get a better specification to what I'm supposed to provide as a valid solution.
Original challenge specification.
Very elegant.
For Python, one line
Well done! It could also be
Looks great :)
I think this would fail with doubles spaces in a sentence...
That's true :( looks like the right implementation is
you don't need to use
(' ')to split by spaces :)Javascript
I avoided split("") as it breaks with non BMP characters. The spread operator works just as well for splitting strings into individual characters and won't break astral characters.
Notice how if I use split the output is messed up on my last test case.
For php
Here are the PHP codes about using
foreachandforloops to complete:More python:
Befunge-93
This version current works if the end of input pushes -1 on the stack (due to the interpreter I used), change 3 characters and it works for a carriage return
Or more simply:
JavaScript (imperative & linear):
JavaScript (ES6) (golf)
ES6:
Perl:
Try it online!
For Java
For Elixir
Another Python:
Try it online!
Simple python example:

Java Script
JavaScript :
Python one-liner:
JS:
str.split(" ").map(w => w.split("").reverse().join("")).join(" ")
// JavaScript
function reverseWord(word){
return word.split("").reverse().join('');
}
// JavaScript
const reverseWord = word => word.split("").reverse().join('');