fun formatLines(words: List<String>, maxWidth: Int): List<String> {
val result = mutableListOf<String>()
var currentLine = StringBuilder()
var currentLength = 0
for (word in words) {
val wordLen = word.length
// If adding this word exceeds maxWidth, push current line
if (currentLength + (if (currentLine.isEmpty()) 0 else 1) + wordLen > maxWidth) {
if (currentLine.isNotEmpty()) {
result.add(currentLine.toString())
}
currentLine = StringBuilder(word)
currentLength = wordLen
} else {
if (currentLine.isNotEmpty()) {
currentLine.append(" ")
currentLength++
}
currentLine.append(word)
currentLength += wordLen
}
}
// Push the last line if not empty
if (currentLine.isNotEmpty()) {
result.add(currentLine.toString())
}
return result
}
fun main() {
val words = listOf("This", "is", "a", "programming", "example", "of", "text", "wrapping")
val maxWidth = 12
val lines = formatLines(words, maxWidth)
for (line in lines) {
println("\"$line\"")
}
}
/*
run:
"This is a"
"programming"
"example of"
"text"
"wrapping"
*/