From 1247da8abcfeffbae0ae41a0cfb1efcb7302dc76 Mon Sep 17 00:00:00 2001 From: Matheus Muriel Date: Sun, 23 Oct 2022 19:52:32 -0300 Subject: [PATCH] Project Euler 024 --- Project-Euler/Problem024.js | 32 +++++++++++++++++++++++++++ Project-Euler/test/Problem024.test.js | 8 +++++++ 2 files changed, 40 insertions(+) create mode 100644 Project-Euler/Problem024.js create mode 100644 Project-Euler/test/Problem024.test.js diff --git a/Project-Euler/Problem024.js b/Project-Euler/Problem024.js new file mode 100644 index 0000000000..2cf7f8185e --- /dev/null +++ b/Project-Euler/Problem024.js @@ -0,0 +1,32 @@ +/** + * Problem 24 - Lexicographic Permutations + * + * @see {@link https://projecteuler.net/problem=24} + * + * A permutation is an ordered arrangement of objects. For example, 3124 is one + * possible permutation of the digits 1, 2, 3 and 4. If all of the permutations + * are listed numerically or alphabetically, we call it lexicographic order. + * The lexicographic permutations of 0, 1 and 2 are: + * + * 012 021 102 120 201 210 + * + * What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9? +*/ + +export function lexicographicPermutations () { + const factorial = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880] + const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + let millionthCounter = 999999 + let result = '' + + for (let i = digits.length - 1; i >= 0; i--) { + const permutation = (millionthCounter / factorial[i]) | 0 + + millionthCounter %= factorial[i] + result += digits[permutation] + + digits.splice(permutation, 1) + } + + return result +} diff --git a/Project-Euler/test/Problem024.test.js b/Project-Euler/test/Problem024.test.js new file mode 100644 index 0000000000..469b2895e4 --- /dev/null +++ b/Project-Euler/test/Problem024.test.js @@ -0,0 +1,8 @@ +import { lexicographicPermutations } from '../Problem024.js' + +describe('checking Lexicographic Permutations', () => { + // Project Euler Lexicographic Permutations + test('Test Lexicographic Permutations', () => { + expect(lexicographicPermutations()).toBe('2783915460') + }) +})