Предыдущая перестановка Штайнхаус Джонсон-Троттер - PullRequest
1 голос
/ 18 января 2020

Я использую алгоритм Steinhaus Johnson-Trotter с этой реализацией: https://github.com/nodash/steinhaus-johnson-trotter

Мне интересно, как я могу заставить функцию что-то наподобие «предыдущей» перестановки.

Пример:

const t = trotter([4, 2, 1, 3])
t.next() // [ 4, 2, 3, 1 ]
t.back() // [4, 2, 1, 3] <- this is what I need

Я пытаюсь найти какой-либо пример того, как можно создать функцию реверса, но без результатов.

РЕДАКТИРОВАТЬ: I ' мы пробовали с изменениями: moveTo = maxIndex - directions[maxIndex];

Но это работает не во всех случаях, посмотрите:

const numbers = [4, 2, 1, 3];

const t = trotter(numbers); // [4, 2, 1, 3] | [ 0, 1, 2, 3 ] [ 0, -1, -1, -1 ]
t.next(); // [ 4, 2, 3, 1 ] | [ 0, 1, 3, 2 ] [ 0, -1, -1, -1 ]
t.next(); // [ 4, 3, 2, 1 ] | [ 0, 3, 1, 2 ] [ 0, -1, -1, -1 ]
t.next(); // [ 3, 4, 2, 1 ] | [ 3, 0, 1, 2 ] [ 0, 0, -1, -1 ]

t.prev(); // it should be [4, 3, 2, 1] but the output is [3, 4, 2, undefined ]

Best,

1 Ответ

0 голосов
/ 18 января 2020

Кажется, единственное необходимое изменение:

moveTo = maxIndex + directions[maxIndex];
  to
moveTo = maxIndex - directions[maxIndex];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...