Cut a description to length
A listing card has room for a fixed number of characters, and a description cut mid-word looks broken.
- Text already within the limit is returned untouched.
- Otherwise take the first `limit` characters and append three dots.
- If that slice would land mid-word, fall back to the last space inside it — but a slice that already ends on a word boundary keeps its last word.
- With no space to fall back to, cut hard at the limit and still append the dots.
- A limit of zero or less gives an empty string.
truncate_words(text: string, limit: int) → string
Where you start
def truncate_words(text: str, limit: int) -> str:
Worked examples
| Call | Result |
|---|---|
truncate_words("The quick brown fox", 10) | "The quick..." |
truncate_words("Supercalifragilistic", 5) | "Super..." |
truncate_words("Short", 10) | "Short" |
truncate_words("a b c d e f", 5) | "a b c..." |
Hint
Look at the character sitting at `limit`: if it is a space, the slice is already clean and needs no trimming back.
Reference solution in Python
def truncate_words(text: str, limit: int) -> str:
if limit <= 0:
return ''
if len(text) <= limit:
return text
cut = text[:limit]
if text[limit] != ' ':
sp = cut.rfind(' ')
if sp > 0:
cut = cut[:sp]
return cut.rstrip() + '...'