* feat(tools): add seed/solution restore script * chore(curriculum): remove empty sections' markers * chore(curriculum): add seed + solution to Chinese * chore: remove old formatter * fix: update getChallenges parse translated challenges separately, without reference to the source * chore(curriculum): add dashedName to English * chore(curriculum): add dashedName to Chinese * refactor: remove unused challenge property 'name' * fix: relax dashedName requirement * fix: stray tag Remove stray `pre` tag from challenge file. Signed-off-by: nhcarrigan <nhcarrigan@gmail.com> Co-authored-by: nhcarrigan <nhcarrigan@gmail.com>
2.4 KiB
2.4 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
594810f028c0303b75339ad4 | Word wrap | 5 | 302344 | word-wrap |
--description--
Even today, with proportional fonts and complex layouts, there are still cases where you need to wrap text at a specified column. The basic task is to wrap a paragraph of text in a simple way.
--instructions--
Write a function that can wrap this text to any number of characters. As an example, the text wrapped to 80 characters should look like the following:
Wrap text using a more sophisticated algorithm such as the Knuth and Plass TeX algorithm. If your language provides this, you get easy extra credit, but you must reference documentation indicating that the algorithm is something better than a simple minimum length algorithm.
--hints--
wrap should be a function.
assert.equal(typeof wrap, 'function');
wrap should return a string.
assert.equal(typeof wrap('abc', 10), 'string');
wrap(80) should return 4 lines.
assert(wrapped80.split('\n').length === 4);
Your wrap
function should return our expected text.
assert.equal(wrapped80.split('\n')[0], firstRow80);
wrap(42) should return 7 lines.
assert(wrapped42.split('\n').length === 7);
Your wrap
function should return our expected text.
assert.equal(wrapped42.split('\n')[0], firstRow42);
--seed--
--after-user-code--
const text =
`Wrap text using a more sophisticated algorithm such as the Knuth and Plass TeX algorithm.
If your language provides this, you get easy extra credit,
but you ''must reference documentation'' indicating that the algorithm
is something better than a simple minimum length algorithm.`;
const wrapped80 = wrap(text, 80);
const wrapped42 = wrap(text, 42);
const firstRow80 =
'Wrap text using a more sophisticated algorithm such as the Knuth and Plass TeX';
const firstRow42 = 'Wrap text using a more sophisticated';
--seed-contents--
function wrap(text, limit) {
return text;
}
--solutions--
function wrap(text, limit) {
const noNewlines = text.replace('\n', '');
if (noNewlines.length > limit) {
// find the last space within limit
const edge = noNewlines.slice(0, limit).lastIndexOf(' ');
if (edge > 0) {
const line = noNewlines.slice(0, edge);
const remainder = noNewlines.slice(edge + 1);
return line + '\n' + wrap(remainder, limit);
}
}
return text;
}