Я использую алгоритм 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,