Oliver Eyton-Williams ee1e8abd87
feat(curriculum): restore seed + solution to Chinese (#40683)
* 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>
2021-01-12 19:31:00 -07:00

2.2 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
5951ed8945deab770972ae56 Towers of Hanoi 5 302341 towers-of-hanoi

--description--

Solve the Towers of Hanoi problem.

Your solution should accept the number of discs as the first parameters, and three string used to identify each of the three stacks of discs, for example towerOfHanoi(4, 'A', 'B', 'C'). The function should return an array of arrays containing the list of moves, source -> destination.

For example, the array [['A', 'C'], ['B', 'A']] indicates that the 1st move was to move a disc from stack A to C, and the 2nd move was to move a disc from stack B to A.

--hints--

towerOfHanoi should be a function.

assert(typeof towerOfHanoi === 'function');

towerOfHanoi(3, ...) should return 7 moves.

assert(res3.length === 7);

towerOfHanoi(3, 'A', 'B', 'C') should return [['A','B'], ['A','C'], ['B','C'], ['A','B'], ['C','A'], ['C','B'], ['A','B']].

assert.deepEqual(towerOfHanoi(3, 'A', 'B', 'C'), res3Moves);

towerOfHanoi(5, "X", "Y", "Z") 10th move should be Y -> X.

assert.deepEqual(res5[9], ['Y', 'X']);

towerOfHanoi(7, 'A', 'B', 'C') first ten moves should be [['A','B'], ['A','C'], ['B','C'], ['A','B'], ['C','A'], ['C','B'], ['A','B'], ['A','C'], ['B','C'], ['B','A']]

assert.deepEqual(towerOfHanoi(7, 'A', 'B', 'C').slice(0, 10), res7First10Moves);

--seed--

--after-user-code--

const res3 = towerOfHanoi(3, 'A', 'B', 'C');
const res3Moves = [['A', 'B'], ['A', 'C'], ['B', 'C'], ['A', 'B'], ['C', 'A'], ['C', 'B'], ['A', 'B']];
const res5 = towerOfHanoi(5, 'X', 'Y', 'Z');
const res7First10Moves = [['A', 'B'], ['A', 'C'], ['B', 'C'], ['A', 'B'], ['C', 'A'], ['C', 'B'], ['A', 'B'], ['A', 'C'], ['B', 'C'], ['B', 'A']];

--seed-contents--

function towerOfHanoi(n, a, b, c) {

  return [[]];
}

--solutions--

function towerOfHanoi(n, a, b, c) {
  const res = [];
  towerOfHanoiHelper(n, a, c, b, res);
  return res;
}

function towerOfHanoiHelper(n, a, b, c, res) {
  if (n > 0) {
    towerOfHanoiHelper(n - 1, a, c, b, res);
    res.push([a, c]);
    towerOfHanoiHelper(n - 1, b, a, c, res);
  }
}