End-of-Line Trim
Level: Beginner 15–30 minConcepts: StringsAlgorithms
Solutions: C# | TypeScript | Python
When editing text files often times one ends up putting extra spaces and tabs at the end of each line. Develop a simple algorithm to remove these extra characters. It shall take an input string and produce a right-trimmed output string.
Examples
| Input | Output |
|---|---|
| ”abc" | "abc" |
| "abc " | "abc" |
| "abc\t" | "abc" |
| " abc" | " abc” (does not remove beginning whitespace) |
| “ab\r\n cd \r\n" | "ab\r\ncd\r\n” (removes whitespace at end of second line) |
| “\r\n" | "\r\n” |
Hint
Be sure to handle both Windows \r\n and Unix line endings \n
Reference Walkthrough
Reference implementations in C#, TypeScript, and Python live at tddbuddy-reference-katas/end-of-line-trim. This is an F1 kata — ten scenarios covering CRLF, LF, mixed line endings, whitespace-only lines, leading-whitespace preservation, and empty input — shared across all three languages, each a single pure function trim(input).
- C# (.NET 8, xUnit, FluentAssertions 6.12.0) — walkthrough
- TypeScript (Node 20, Vitest 1.6, TS 5 strict) — walkthrough
- Python (3.11, pytest) — walkthrough
This kata ships in Agent Full-Bake mode at high gear: the rules land as one commit per language, with a brief walkthrough noting there are no builders because the inputs and outputs are the domain. A single left-to-right scan preserves each line’s original terminator (\r\n or \n) byte-for-byte while dropping its trailing space/tab run; a lone \r is treated as content, matching the TDD Buddy spec’s explicit Windows-and-Unix scope. See the repo’s Gears section for when high gear is the right call.