Skip to content

Instantly share code, notes, and snippets.

@wheresrhys
Created March 15, 2026 19:52
Show Gist options
  • Select an option

  • Save wheresrhys/d62a6d92abaef7e0aca675c64066eef6 to your computer and use it in GitHub Desktop.

Select an option

Save wheresrhys/d62a6d92abaef7e0aca675c64066eef6 to your computer and use it in GitHub Desktop.
Permutation sequence
const startingN = 0
let n = startingN;
const endingN = 11
type Permutation = number[];
const sequences = []
const memo: Record<string,Permutation[]> = {}
const permutationPatternsForN: Permutation[][] = []
function applyPermutationPattern (numbers: number[]) {
const numbersMapping: number[] = [];
numbers.forEach((number:number, index:number) => {
numbersMapping[number] = index
})
const memoisedPermutationPattern = permutationPatternsForN[numbers.length - 1];
return memoisedPermutationPattern.map(permutation => permutation.map(number => numbers[number]))
}
function permuteNewInner (numbers: number[]): Permutation[] {
if (numbers.length === 1) return [numbers];
if (numbers.length === 2) return [numbers, [numbers[1], numbers[0]]];
const permutations = numbers.flatMap((number: number, index:number) => {
const numbersClone = [...numbers];
numbersClone.splice(index, 1);
return applyPermutationPattern(numbersClone).map(p => [number, ...p])
})
return permutations
}
function permuteNew (numbers: number[]): Permutation[] {
const permutations: Permutation[] = permuteNewInner(numbers);
permutationPatternsForN.push(permutations)
return permutations;
}
const permutations: Permutation[] = []
while (n < endingN) {
permuteNew(
[...Array(n+1 - startingN)].map((_, i) => i + startingN)
)
.map(p => console.log(Number(p.join(''))))
n++;
}
// permutations.map(console.log)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment