diff --git a/curriculum/challenges/english/10-coding-interview-prep/rosetta-code/align-columns.md b/curriculum/challenges/english/10-coding-interview-prep/rosetta-code/align-columns.md index 45ff5fa2f3..2b58a1e1d8 100644 --- a/curriculum/challenges/english/10-coding-interview-prep/rosetta-code/align-columns.md +++ b/curriculum/challenges/english/10-coding-interview-prep/rosetta-code/align-columns.md @@ -8,35 +8,43 @@ dashedName: align-columns # --description-- -Given a text file of many lines, where fields within a line are delineated by a single `$` character, write a program that aligns each column of fields by ensuring that words in each column are separated by at least one space. Further, allow for each word in a column to be either left justified, right justified, or center justified within its column. +Given an array of many lines, where fields within a line are delineated by a single `$` character, write a program that aligns each column of fields by ensuring that words in each column are separated by at least one space. Further, allow for each word in a column to be either left justified, right justified, or center justified within its column. # --instructions-- Use the following text to test your programs: -
-Given$a$text$file$of$many$lines
-where$fields$within$a$line$
-are$delineated$by$a$single$'dollar'$character
-write$a$program
-that$aligns$each$column$of$fields
-by$ensuring$that$words$in$each$
-column$are$separated$by$at$least$one$space.
-Further,$allow$for$each$word$in$a$column$to$be$either$left$
-justified,$right$justified
-or$center$justified$within$its$column.
-
+```js +const testText = [ + 'Given$a$text$file$of$many$lines', + 'where$fields$within$a$line$', + 'are$delineated$by$a$single$"dollar"$character', + 'write$a$program', + 'that$aligns$each$column$of$fields', + 'by$ensuring$that$words$in$each$', + 'column$are$separated$by$at$least$one$space.', + 'Further,$allow$for$each$word$in$a$column$to$be$either$left$', + 'justified,$right$justified', + 'or$center$justified$within$its$column.' +]; +``` **Note that:** - +- The example input texts lines may, or may not, have trailing dollar characters. +- All columns should share the same alignment. +- Consecutive space characters produced adjacent to the end of lines are insignificant for the purposes of the task. +- Output text will be viewed in a mono-spaced font on a plain text editor or basic terminal. Lines in it should be joined using new line character (`\n`). +- The minimum space between columns should be computed from the text and not hard-coded. +- It is not a requirement to add separating characters between or around columns. + +For example, one of the lines from the `testText`, after jusitifing to the right, left and center respectivelly: + +```js +' column are separated by at least one space.\n' +'column are separated by at least one space.\n' +' column are separated by at least one space.\n' +``` # --hints-- @@ -46,22 +54,22 @@ or$center$justified$within$its$column. assert(typeof formatText === 'function'); ``` -`formatText` with the above input and "right" justification should produce the following: +`formatText(testText, 'right')` should produce text with columns justified to the right. ```js -assert.strictEqual(formatText(testInput, 'right'), rightAligned); +assert.strictEqual(formatText(_testText, 'right'), rightAligned); ``` -`formatText` with the above input and "left" justification should produce the following: +`formatText(testText, 'left')` should produce text with columns justified to the left. ```js -assert.strictEqual(formatText(testInput, 'left'), leftAligned); +assert.strictEqual(formatText(_testText, 'left'), leftAligned); ``` -`formatText` with the above input and "center" justification should produce the following: +`formatText(testText, 'center')` should produce text with columns justified to the center. ```js -assert.strictEqual(formatText(testInput, 'center'), centerAligned); +assert.strictEqual(formatText(_testText, 'center'), centerAligned); ``` # --seed-- @@ -69,10 +77,10 @@ assert.strictEqual(formatText(testInput, 'center'), centerAligned); ## --after-user-code-- ```js -const testInput = [ +const _testText = [ 'Given$a$text$file$of$many$lines', 'where$fields$within$a$line$', - 'are$delineated$by$a$single$\"dollar\"$character', + 'are$delineated$by$a$single$"dollar"$character', 'write$a$program', 'that$aligns$each$column$of$fields$', 'by$ensuring$that$words$in$each$', @@ -119,7 +127,11 @@ const centerAligned = ' Given a text file of many ## --seed-contents-- ```js -const testArr = [ +function formatText(input, justification) { + +} + +const testText = [ 'Given$a$text$file$of$many$lines', 'where$fields$within$a$line$', 'are$delineated$by$a$single$"dollar"$character', @@ -131,28 +143,11 @@ const testArr = [ 'justified,$right$justified', 'or$center$justified$within$its$column.' ]; - -function formatText(input, justification) { - -} ``` # --solutions-- ```js -const testArr = [ - 'Given$a$text$file$of$many$lines', - 'where$fields$within$a$line$', - 'are$delineated$by$a$single$"dollar"$character', - 'write$a$program', - 'that$aligns$each$column$of$fields$', - 'by$ensuring$that$words$in$each$', - 'column$are$separated$by$at$least$one$space.', - 'Further,$allow$for$each$word$in$a$column$to$be$either$left$', - 'justified,$right$justified', - 'or$center$justified$within$its$column.' -]; - String.prototype.repeat = function (n) { return new Array(1 + parseInt(n)).join(this); }; function formatText(input, justification) {