Implement prototype(words, prefix, limit) and solve(words, prefix, limit). Return at most limit unique input strings beginning with the exact prefix, sorted in Unicode code-point lexicographic order. Empty words/prefixes are valid. limit 0 returns []; negative limit throws RangeError.

For ["cold", "colder", "coal", "cold"], prefix "co", limit 3, return ["coal", "cold", "colder"].

Prototype: filter, deduplicate and sort. Final: build a trie, follow the prefix and enumerate sorted children until the limit. Use the supplied compareText helper, include construction in runtime analysis, and preserve words on success/failure.

All numeric inputs and finite arithmetic results in this lesson are safe-integer Numbers. Use null for documented absence, not undefined or a numeric sentinel. Return actual booleans where the contract requires them. Do not add validation requirements beyond the documented inputs.

String positions and lexicographic ordering in this exercise use Unicode code points. Array.from(text) and string iteration expose code points; text.length, indexing, and default string sorting use UTF-16 code units. Do not substitute locale collation or add Unicode normalization.

Run with Node.js 20+ from this directory:

Shell
node main.mjs --stage prototype
node main.mjs --stage final

Edit exercise.mjs; keep main.mjs unchanged. Both stages begin as unfinished learner functions. The website uses the same test functions in a separate browser worker. Tests check deterministic examples, boundaries, documented validation, input preservation, and stage-specific cases. Passing tests does not prove the required time complexity.

Drag or use the arrow keys to resize. Home collapses the question; End collapses the editor. Enter or double-click resets the split.
Loading editor…
No results yet.

Complete the starter code, then run the checks.
Results and errors will appear here.