Skip to content

Instantly share code, notes, and snippets.

@Husseinhj
Last active August 8, 2022 10:28
Show Gist options
  • Save Husseinhj/17ced55ee2a5c29468841dcb88047d29 to your computer and use it in GitHub Desktop.
Save Husseinhj/17ced55ee2a5c29468841dcb88047d29 to your computer and use it in GitHub Desktop.
Reverse words except symbols
/**
* Kotlin code challenges.
* playground: https://pl.kotl.in/h9tfWDn6q
*/
import java.util.*
import kotlin.collections.ArrayList
fun main() {
val message = "Hello, world!"
println("$message \n")
println(reverseWordsExceptSymbols(message))
val message02 = "Hey Hussein, How are you?! Sup? 1234!!"
println("\n")
println("$message02 \n")
println(reverseWordsExceptSymbols(message02))
}
private fun reverseWordsExceptSymbols(sentence: String): String {
val words = getWordsWithoutSymbols(sentence)
val reversedWords = words.reversed().toMutableList()
val symbolsAndSpaces = getSymbolsFromSentence(sentence)
var symbolsAndSpaceIndex = 0
for (index in 0..reversedWords.size) {
while (symbolsAndSpaceIndex < symbolsAndSpaces.size && symbolsAndSpaces[symbolsAndSpaceIndex] != " ") {
reversedWords[index] += symbolsAndSpaces[symbolsAndSpaceIndex]
symbolsAndSpaceIndex ++
}
if (symbolsAndSpaceIndex >= symbolsAndSpaces.size) {
break
}
reversedWords[index] += symbolsAndSpaces[symbolsAndSpaceIndex]
symbolsAndSpaceIndex ++
}
return reversedWords.joinToString("")
}
private fun getWordsWithoutSymbols(sentence: String): List<String> {
val symRegex = """[^\w\d\s]""".toRegex()
val sentenceWithoutSymbolAndSpace = sentence.replace(symRegex, "")
return sentenceWithoutSymbolAndSpace.split(" ")
}
private fun getSymbolsFromSentence(sentence: String): List<String> {
val regex = """[^\w\d]""".toRegex()
return regex.findAll(sentence).map { it.value }.toList()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment