From 2c3c3f85fbddccbd63f8a0c8a1e982561cd4c033 Mon Sep 17 00:00:00 2001
From: HD-40307g <152268341+HD-40307g@users.noreply.github.com>
Date: Fri, 20 Dec 2024 12:12:08 +0100
Subject: [PATCH 1/5] Add LuhnAlgorithm.js and LuhnAlgorithm.test.js

---
 Maths/LuhnAlgorithm.js           | 95 ++++++++++++++++++++++++++++++++
 Maths/test/LuhnAlgorithm.test.js | 72 ++++++++++++++++++++++++
 2 files changed, 167 insertions(+)
 create mode 100644 Maths/LuhnAlgorithm.js
 create mode 100644 Maths/test/LuhnAlgorithm.test.js

diff --git a/Maths/LuhnAlgorithm.js b/Maths/LuhnAlgorithm.js
new file mode 100644
index 0000000000..af8ea8845e
--- /dev/null
+++ b/Maths/LuhnAlgorithm.js
@@ -0,0 +1,95 @@
+/**
+ * Luhn algorithm, also known as the “Modulus 10” or “mod 10” algorithm. 
+ * This algorithm is a simple checksum formula used to validate the authenticity of credit card numbers.
+ * The Luhn algorithm works by doubling every second digit from right to left, adding the resulting digits, and then checking if the total is divisible by 10. 
+ * If it is, the credit card number is considered valid.
+ * The Luhn algorithm is widely used in credit card verification and is specified in ISO/IEC 7812-1. 
+ * It is not intended to be a cryptographically secure hash function but rather a simple method to detect accidental errors, not malicious attacks.
+ */
+
+// Valid credit card numbers
+export const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8];
+export const valid2 = [5, 5, 3, 5, 7, 6, 6, 7, 6, 8, 7, 5, 1, 4, 3, 9];
+export const valid3 = [6, 0, 1, 1, 1, 4, 4, 3, 4, 0, 6, 8, 2, 9, 0, 5];
+export const valid4 = [3, 7, 1, 6, 1, 2, 0, 1, 9, 9, 8, 5, 2, 3, 6];
+export const valid5 = [4, 5, 3, 9, 4, 0, 4, 9, 6, 7, 8, 6, 9, 6, 6, 6];
+
+// Invalid credit card numbers
+export const invalid1 = [4, 5, 3, 2, 7, 7, 8, 7, 7, 1, 0, 9, 1, 7, 9, 5];
+export const invalid2 = [5, 7, 9, 5, 5, 9, 3, 3, 9, 2, 1, 3, 4, 6, 4, 3];
+export const invalid3 = [3, 7, 5, 7, 9, 6, 0, 8, 4, 4, 5, 9, 9, 1, 4];
+export const invalid4 = [6, 0, 1, 1, 1, 2, 7, 9, 6, 1, 7, 7, 7, 9, 3, 5];
+export const invalid5 = [5, 3, 8, 2, 0, 1, 9, 7, 7, 2, 8, 8, 3, 8, 5, 4];
+
+// Mixed batch of credit card numbers
+export const mystery1 = [3, 4, 4, 8, 0, 1, 9, 6, 8, 3, 0, 5, 4, 1, 4];
+export const mystery2 = [5, 4, 6, 6, 1, 0, 0, 8, 6, 1, 6, 2, 0, 2, 3, 9];
+export const mystery3 = [6, 0, 1, 1, 3, 7, 7, 0, 2, 0, 9, 6, 2, 6, 5, 6, 2, 0, 3];
+export const mystery4 = [4, 9, 2, 9, 8, 7, 7, 1, 6, 9, 2, 1, 7, 0, 9, 3];
+export const mystery5 = [4, 9, 1, 3, 5, 4, 0, 4, 6, 3, 0, 7, 2, 5, 2, 3];
+
+export const batch = [valid1, valid2, valid3, valid4, valid5, invalid1, invalid2, invalid3, invalid4, invalid5, mystery1, mystery2, mystery3, mystery4, mystery5];
+
+/**
+ * Validates a credit card number using the Luhn Algorithm.
+ * @param {number[]} numArr - Array representing the credit card number.
+ * @returns {boolean} - True if the card is valid, false otherwise.
+ */
+export function validateCred(numArr) {
+    let total = 0;
+    for (let i = numArr.length - 1; i >= 0; i--) {
+        let currValue = numArr[i];
+        // Double every other digit starting from the second-to-last
+        if ((numArr.length - 1 - i) % 2 === 1) {
+            currValue *= 2;
+        if (currValue > 9) {
+            currValue -= 9;
+        }
+    }
+    total += currValue;
+    }
+    return total % 10 === 0;
+};
+
+/**
+ * Finds invalid credit card numbers from a batch.
+ * @param {number[][]} cards - Array of credit card numbers.
+ * @returns {number[][]} - Array of invalid credit card numbers.
+ */
+export function findInvalidCards(cards) {
+    return cards.filter(card => !validateCred(card));
+};
+
+/**
+ * Identifies credit card companies that issued invalid card numbers.
+ * @param {number[][]} invalidBatch - Array of invalid credit card numbers.
+ * @returns {string[]} - Array of company names.
+ */
+export function idInvalidCardCompanies(invalidBatch) {
+    const companies = new Set();
+    invalidBatch.forEach(card => {
+        switch (card[0]) {
+        case 3:
+            companies.add('Amex');
+            break;
+        case 4:
+            companies.add('Visa');
+            break;
+        case 5:
+            companies.add('Mastercard');
+            break;
+        case 6:
+            companies.add('Discover');
+            break;
+        default:
+            console.warn('Company not found for card starting with:', card[0]);
+        }
+    });
+    return Array.from(companies);
+};
+
+// Example Usage
+console.log(validateCred(valid1)); // Should print true
+console.log(validateCred(invalid1)); // Should print false
+console.log(findInvalidCards(batch)); // Find all invalid cards
+console.log(idInvalidCardCompanies(findInvalidCards(batch))); // Find companies of invalid cards
diff --git a/Maths/test/LuhnAlgorithm.test.js b/Maths/test/LuhnAlgorithm.test.js
new file mode 100644
index 0000000000..8eab8eee9f
--- /dev/null
+++ b/Maths/test/LuhnAlgorithm.test.js
@@ -0,0 +1,72 @@
+// Import the functions to be tested
+import { validateCred, findInvalidCards, idInvalidCardCompanies } from '../LuhnAlgorithm.js';
+
+// Import credit card numbers to be tested
+import { valid1, valid2, valid4, valid3, valid5, invalid1, invalid2, invalid3, invalid4, invalid5, batch} from '../LuhnAlgorithm.js'
+
+// Test suite for credit card validation
+
+  //Test validateCred function
+    function testValidateCred() {
+        console.log('Running tests for validateCred...');
+    
+    // Valid test cases
+        if (![valid1, valid2, valid3, valid4, valid5].every(card => validateCred(card))) {
+            console.error('FAILED: validateCred should return true for all valid cards');
+        }
+        if ([invalid1, invalid2, invalid3, invalid4, invalid5].some(card => validateCred(card))) {
+            console.error('FAILED: validateCred should return false for all invalid cards');
+        } else {
+            console.log('PASSED: Valid card test');
+        };
+
+    // Invalid test cases
+        if (validateCred(invalid1 || invalid2 || invalid3 || invalid4 || invalid5)) {
+            console.error('FAILED: validateCred should return false for invalid cards');
+        } else {
+            console.log('PASSED: Invalid card test');
+        }
+    };
+
+  //Test findInvalidCards function
+    function testFindInvalidCards(batch) {
+        console.log('Running tests for findInvalidCards...');
+        const invalidCards = findInvalidCards(batch);
+
+    // Check if the result only contains invalid cards
+        const allInvalid = invalidCards.every(card => !validateCred(card));
+
+        if (!allInvalid) {
+            console.error('FAILED: findInvalidCards should return only invalid cards');
+        } else {
+            console.log('PASSED: Find invalid cards test');
+        }
+    };
+
+  // Test idInvalidCardCompanies function
+    function testIdInvalidCardCompanies() {
+        console.log('Running tests for idInvalidCardCompanies...');
+        const companies = idInvalidCardCompanies(batch);
+
+        if (!companies.includes('Visa') || !companies.includes('Mastercard') || !companies.includes('Amex') || !companies.includes('Discover')) {
+            console.error('FAILED: idInvalidCardCompanies should include all expected companies');
+        } else if (companies.includes('Unknown')) {
+            console.error('FAILED: idInvalidCardCompanies should not include unrecognized prefixes');
+        } else {
+            console.log('PASSED: Identify invalid card companies test');
+        }
+    };
+
+  //Run all tests
+    function runAllTests() {
+        console.log('Starting test suite...');
+        testValidateCred();
+        testFindInvalidCards(batch);
+        testIdInvalidCardCompanies();
+        console.log('Testing edge cases...');
+        console.assert(findInvalidCards([[]]).length === 0, 'FAILED: findInvalidCards should handle empty arrays');
+        console.log('All tests completed.');
+    };
+
+  // Run the test suite
+    runAllTests();

From 52cf1cdb19ecce215705f09c21e2885d176b4890 Mon Sep 17 00:00:00 2001
From: HD-40307g <152268341+HD-40307g@users.noreply.github.com>
Date: Fri, 20 Dec 2024 13:37:36 +0100
Subject: [PATCH 2/5] Add URL to  LuhnAlgorithm.js

---
 Maths/LuhnAlgorithm.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Maths/LuhnAlgorithm.js b/Maths/LuhnAlgorithm.js
index af8ea8845e..3c7a25ab00 100644
--- a/Maths/LuhnAlgorithm.js
+++ b/Maths/LuhnAlgorithm.js
@@ -5,6 +5,7 @@
  * If it is, the credit card number is considered valid.
  * The Luhn algorithm is widely used in credit card verification and is specified in ISO/IEC 7812-1. 
  * It is not intended to be a cryptographically secure hash function but rather a simple method to detect accidental errors, not malicious attacks.
+ * https://en.wikipedia.org/wiki/Luhn_algorithm
  */
 
 // Valid credit card numbers

From ba306aa3c7e0a9cc30d6acf77858df47a1d3d413 Mon Sep 17 00:00:00 2001
From: HD-40307g <152268341+HD-40307g@users.noreply.github.com>
Date: Fri, 20 Dec 2024 17:34:06 +0100
Subject: [PATCH 3/5] rewrite LuhnAlgorithm.test.js to be Jest-compatible
 describe/test/it block

---
 Maths/test/LuhnAlgorithm.test.js | 127 ++++++++++++++-----------------
 1 file changed, 58 insertions(+), 69 deletions(-)

diff --git a/Maths/test/LuhnAlgorithm.test.js b/Maths/test/LuhnAlgorithm.test.js
index 8eab8eee9f..d512b7efb4 100644
--- a/Maths/test/LuhnAlgorithm.test.js
+++ b/Maths/test/LuhnAlgorithm.test.js
@@ -1,72 +1,61 @@
 // Import the functions to be tested
 import { validateCred, findInvalidCards, idInvalidCardCompanies } from '../LuhnAlgorithm.js';
-
 // Import credit card numbers to be tested
-import { valid1, valid2, valid4, valid3, valid5, invalid1, invalid2, invalid3, invalid4, invalid5, batch} from '../LuhnAlgorithm.js'
-
-// Test suite for credit card validation
-
-  //Test validateCred function
-    function testValidateCred() {
-        console.log('Running tests for validateCred...');
-    
-    // Valid test cases
-        if (![valid1, valid2, valid3, valid4, valid5].every(card => validateCred(card))) {
-            console.error('FAILED: validateCred should return true for all valid cards');
-        }
-        if ([invalid1, invalid2, invalid3, invalid4, invalid5].some(card => validateCred(card))) {
-            console.error('FAILED: validateCred should return false for all invalid cards');
-        } else {
-            console.log('PASSED: Valid card test');
-        };
-
-    // Invalid test cases
-        if (validateCred(invalid1 || invalid2 || invalid3 || invalid4 || invalid5)) {
-            console.error('FAILED: validateCred should return false for invalid cards');
-        } else {
-            console.log('PASSED: Invalid card test');
-        }
-    };
-
-  //Test findInvalidCards function
-    function testFindInvalidCards(batch) {
-        console.log('Running tests for findInvalidCards...');
-        const invalidCards = findInvalidCards(batch);
-
-    // Check if the result only contains invalid cards
-        const allInvalid = invalidCards.every(card => !validateCred(card));
-
-        if (!allInvalid) {
-            console.error('FAILED: findInvalidCards should return only invalid cards');
-        } else {
-            console.log('PASSED: Find invalid cards test');
-        }
-    };
-
-  // Test idInvalidCardCompanies function
-    function testIdInvalidCardCompanies() {
-        console.log('Running tests for idInvalidCardCompanies...');
-        const companies = idInvalidCardCompanies(batch);
-
-        if (!companies.includes('Visa') || !companies.includes('Mastercard') || !companies.includes('Amex') || !companies.includes('Discover')) {
-            console.error('FAILED: idInvalidCardCompanies should include all expected companies');
-        } else if (companies.includes('Unknown')) {
-            console.error('FAILED: idInvalidCardCompanies should not include unrecognized prefixes');
-        } else {
-            console.log('PASSED: Identify invalid card companies test');
-        }
-    };
-
-  //Run all tests
-    function runAllTests() {
-        console.log('Starting test suite...');
-        testValidateCred();
-        testFindInvalidCards(batch);
-        testIdInvalidCardCompanies();
-        console.log('Testing edge cases...');
-        console.assert(findInvalidCards([[]]).length === 0, 'FAILED: findInvalidCards should handle empty arrays');
-        console.log('All tests completed.');
-    };
-
-  // Run the test suite
-    runAllTests();
+import { valid1, valid2, valid3, valid4, valid5, invalid1, invalid2, invalid3, invalid4, invalid5, batch } from '../LuhnAlgorithm.js';
+
+describe('Luhn Algorithm Tests', () => {
+    // Test for validateCred function
+    describe('validateCred', () => {
+        test('should return true for valid credit cards', () => {
+            const validCards = [valid1, valid2, valid3, valid4, valid5];
+            validCards.forEach(card => {
+                expect(validateCred(card)).toBe(true);
+            });
+        });
+
+        test('should return false for invalid credit cards', () => {
+            const invalidCards = [invalid1, invalid2, invalid3, invalid4, invalid5];
+            invalidCards.forEach(card => {
+                expect(validateCred(card)).toBe(false);
+            });
+        });
+    });
+
+    // Test for findInvalidCards function
+    describe('findInvalidCards', () => {
+        test('should return only invalid credit cards from a batch', () => {
+            const invalidCards = findInvalidCards(batch);
+            const allInvalid = invalidCards.every(card => !validateCred(card));
+            expect(allInvalid).toBe(true);
+        });
+
+        test('should return an empty array if no invalid cards are found', () => {
+            const validCards = [valid1, valid2, valid3, valid4, valid5];
+            const invalidCards = findInvalidCards(validCards);
+            expect(invalidCards).toEqual([]);
+        });
+    });
+
+    // Test for idInvalidCardCompanies function
+    describe('idInvalidCardCompanies', () => {
+        test('should identify all companies that issued invalid cards', () => {
+            const invalidCards = findInvalidCards(batch);
+            const companies = idInvalidCardCompanies(invalidCards);
+
+            // Expect the companies array to include known companies
+            expect(companies).toEqual(expect.arrayContaining(['Visa', 'Mastercard', 'Amex', 'Discover']));
+        });
+
+        test('should return an empty array if no invalid cards are found', () => {
+            const validCards = [valid1, valid2, valid3, valid4, valid5];
+            const companies = idInvalidCardCompanies(validCards);
+            expect(companies).toEqual([]);
+        });
+
+        test('should handle unknown card companies gracefully', () => {
+            const unknownCard = [9, 3, 1, 8, 2, 0, 7, 4, 5, 6, 7, 8, 9];
+            const companies = idInvalidCardCompanies([unknownCard]);
+            expect(companies).not.toContain('Unknown');
+        });
+    });
+});

From 4141a381b970a7c438f4043d9c9ff91596fb8bb1 Mon Sep 17 00:00:00 2001
From: HD-40307g <152268341+HD-40307g@users.noreply.github.com>
Date: Fri, 20 Dec 2024 17:58:08 +0100
Subject: [PATCH 4/5] fix: fixed error at idInvalidCardCompanies function test

---
 Maths/test/LuhnAlgorithm.test.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/Maths/test/LuhnAlgorithm.test.js b/Maths/test/LuhnAlgorithm.test.js
index d512b7efb4..6256e29058 100644
--- a/Maths/test/LuhnAlgorithm.test.js
+++ b/Maths/test/LuhnAlgorithm.test.js
@@ -48,7 +48,8 @@ describe('Luhn Algorithm Tests', () => {
 
         test('should return an empty array if no invalid cards are found', () => {
             const validCards = [valid1, valid2, valid3, valid4, valid5];
-            const companies = idInvalidCardCompanies(validCards);
+            const invalidCards = findInvalidCards(validCards); // Ensure only invalid cards are processed
+            const companies = idInvalidCardCompanies(invalidCards);
             expect(companies).toEqual([]);
         });
 

From 64317c92dc2e9929d75279cc4385583897e3d401 Mon Sep 17 00:00:00 2001
From: HD-40307g <152268341+HD-40307g@users.noreply.github.com>
Date: Fri, 20 Dec 2024 18:04:30 +0100
Subject: [PATCH 5/5] reformat LuhnAlgorithm.js and LuhnAlgorithm.test.js using
 Prettier

---
 Maths/LuhnAlgorithm.js           | 136 +++++++++++++++++--------------
 Maths/test/LuhnAlgorithm.test.js | 134 +++++++++++++++++-------------
 2 files changed, 153 insertions(+), 117 deletions(-)

diff --git a/Maths/LuhnAlgorithm.js b/Maths/LuhnAlgorithm.js
index 3c7a25ab00..d338190d08 100644
--- a/Maths/LuhnAlgorithm.js
+++ b/Maths/LuhnAlgorithm.js
@@ -1,35 +1,53 @@
 /**
- * Luhn algorithm, also known as the “Modulus 10” or “mod 10” algorithm. 
+ * Luhn algorithm, also known as the “Modulus 10” or “mod 10” algorithm.
  * This algorithm is a simple checksum formula used to validate the authenticity of credit card numbers.
- * The Luhn algorithm works by doubling every second digit from right to left, adding the resulting digits, and then checking if the total is divisible by 10. 
+ * The Luhn algorithm works by doubling every second digit from right to left, adding the resulting digits, and then checking if the total is divisible by 10.
  * If it is, the credit card number is considered valid.
- * The Luhn algorithm is widely used in credit card verification and is specified in ISO/IEC 7812-1. 
+ * The Luhn algorithm is widely used in credit card verification and is specified in ISO/IEC 7812-1.
  * It is not intended to be a cryptographically secure hash function but rather a simple method to detect accidental errors, not malicious attacks.
  * https://en.wikipedia.org/wiki/Luhn_algorithm
  */
 
 // Valid credit card numbers
-export const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8];
-export const valid2 = [5, 5, 3, 5, 7, 6, 6, 7, 6, 8, 7, 5, 1, 4, 3, 9];
-export const valid3 = [6, 0, 1, 1, 1, 4, 4, 3, 4, 0, 6, 8, 2, 9, 0, 5];
-export const valid4 = [3, 7, 1, 6, 1, 2, 0, 1, 9, 9, 8, 5, 2, 3, 6];
-export const valid5 = [4, 5, 3, 9, 4, 0, 4, 9, 6, 7, 8, 6, 9, 6, 6, 6];
+export const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8]
+export const valid2 = [5, 5, 3, 5, 7, 6, 6, 7, 6, 8, 7, 5, 1, 4, 3, 9]
+export const valid3 = [6, 0, 1, 1, 1, 4, 4, 3, 4, 0, 6, 8, 2, 9, 0, 5]
+export const valid4 = [3, 7, 1, 6, 1, 2, 0, 1, 9, 9, 8, 5, 2, 3, 6]
+export const valid5 = [4, 5, 3, 9, 4, 0, 4, 9, 6, 7, 8, 6, 9, 6, 6, 6]
 
 // Invalid credit card numbers
-export const invalid1 = [4, 5, 3, 2, 7, 7, 8, 7, 7, 1, 0, 9, 1, 7, 9, 5];
-export const invalid2 = [5, 7, 9, 5, 5, 9, 3, 3, 9, 2, 1, 3, 4, 6, 4, 3];
-export const invalid3 = [3, 7, 5, 7, 9, 6, 0, 8, 4, 4, 5, 9, 9, 1, 4];
-export const invalid4 = [6, 0, 1, 1, 1, 2, 7, 9, 6, 1, 7, 7, 7, 9, 3, 5];
-export const invalid5 = [5, 3, 8, 2, 0, 1, 9, 7, 7, 2, 8, 8, 3, 8, 5, 4];
+export const invalid1 = [4, 5, 3, 2, 7, 7, 8, 7, 7, 1, 0, 9, 1, 7, 9, 5]
+export const invalid2 = [5, 7, 9, 5, 5, 9, 3, 3, 9, 2, 1, 3, 4, 6, 4, 3]
+export const invalid3 = [3, 7, 5, 7, 9, 6, 0, 8, 4, 4, 5, 9, 9, 1, 4]
+export const invalid4 = [6, 0, 1, 1, 1, 2, 7, 9, 6, 1, 7, 7, 7, 9, 3, 5]
+export const invalid5 = [5, 3, 8, 2, 0, 1, 9, 7, 7, 2, 8, 8, 3, 8, 5, 4]
 
 // Mixed batch of credit card numbers
-export const mystery1 = [3, 4, 4, 8, 0, 1, 9, 6, 8, 3, 0, 5, 4, 1, 4];
-export const mystery2 = [5, 4, 6, 6, 1, 0, 0, 8, 6, 1, 6, 2, 0, 2, 3, 9];
-export const mystery3 = [6, 0, 1, 1, 3, 7, 7, 0, 2, 0, 9, 6, 2, 6, 5, 6, 2, 0, 3];
-export const mystery4 = [4, 9, 2, 9, 8, 7, 7, 1, 6, 9, 2, 1, 7, 0, 9, 3];
-export const mystery5 = [4, 9, 1, 3, 5, 4, 0, 4, 6, 3, 0, 7, 2, 5, 2, 3];
+export const mystery1 = [3, 4, 4, 8, 0, 1, 9, 6, 8, 3, 0, 5, 4, 1, 4]
+export const mystery2 = [5, 4, 6, 6, 1, 0, 0, 8, 6, 1, 6, 2, 0, 2, 3, 9]
+export const mystery3 = [
+  6, 0, 1, 1, 3, 7, 7, 0, 2, 0, 9, 6, 2, 6, 5, 6, 2, 0, 3
+]
+export const mystery4 = [4, 9, 2, 9, 8, 7, 7, 1, 6, 9, 2, 1, 7, 0, 9, 3]
+export const mystery5 = [4, 9, 1, 3, 5, 4, 0, 4, 6, 3, 0, 7, 2, 5, 2, 3]
 
-export const batch = [valid1, valid2, valid3, valid4, valid5, invalid1, invalid2, invalid3, invalid4, invalid5, mystery1, mystery2, mystery3, mystery4, mystery5];
+export const batch = [
+  valid1,
+  valid2,
+  valid3,
+  valid4,
+  valid5,
+  invalid1,
+  invalid2,
+  invalid3,
+  invalid4,
+  invalid5,
+  mystery1,
+  mystery2,
+  mystery3,
+  mystery4,
+  mystery5
+]
 
 /**
  * Validates a credit card number using the Luhn Algorithm.
@@ -37,20 +55,20 @@ export const batch = [valid1, valid2, valid3, valid4, valid5, invalid1, invalid2
  * @returns {boolean} - True if the card is valid, false otherwise.
  */
 export function validateCred(numArr) {
-    let total = 0;
-    for (let i = numArr.length - 1; i >= 0; i--) {
-        let currValue = numArr[i];
-        // Double every other digit starting from the second-to-last
-        if ((numArr.length - 1 - i) % 2 === 1) {
-            currValue *= 2;
-        if (currValue > 9) {
-            currValue -= 9;
-        }
+  let total = 0
+  for (let i = numArr.length - 1; i >= 0; i--) {
+    let currValue = numArr[i]
+    // Double every other digit starting from the second-to-last
+    if ((numArr.length - 1 - i) % 2 === 1) {
+      currValue *= 2
+      if (currValue > 9) {
+        currValue -= 9
+      }
     }
-    total += currValue;
-    }
-    return total % 10 === 0;
-};
+    total += currValue
+  }
+  return total % 10 === 0
+}
 
 /**
  * Finds invalid credit card numbers from a batch.
@@ -58,8 +76,8 @@ export function validateCred(numArr) {
  * @returns {number[][]} - Array of invalid credit card numbers.
  */
 export function findInvalidCards(cards) {
-    return cards.filter(card => !validateCred(card));
-};
+  return cards.filter((card) => !validateCred(card))
+}
 
 /**
  * Identifies credit card companies that issued invalid card numbers.
@@ -67,30 +85,30 @@ export function findInvalidCards(cards) {
  * @returns {string[]} - Array of company names.
  */
 export function idInvalidCardCompanies(invalidBatch) {
-    const companies = new Set();
-    invalidBatch.forEach(card => {
-        switch (card[0]) {
-        case 3:
-            companies.add('Amex');
-            break;
-        case 4:
-            companies.add('Visa');
-            break;
-        case 5:
-            companies.add('Mastercard');
-            break;
-        case 6:
-            companies.add('Discover');
-            break;
-        default:
-            console.warn('Company not found for card starting with:', card[0]);
-        }
-    });
-    return Array.from(companies);
-};
+  const companies = new Set()
+  invalidBatch.forEach((card) => {
+    switch (card[0]) {
+      case 3:
+        companies.add('Amex')
+        break
+      case 4:
+        companies.add('Visa')
+        break
+      case 5:
+        companies.add('Mastercard')
+        break
+      case 6:
+        companies.add('Discover')
+        break
+      default:
+        console.warn('Company not found for card starting with:', card[0])
+    }
+  })
+  return Array.from(companies)
+}
 
 // Example Usage
-console.log(validateCred(valid1)); // Should print true
-console.log(validateCred(invalid1)); // Should print false
-console.log(findInvalidCards(batch)); // Find all invalid cards
-console.log(idInvalidCardCompanies(findInvalidCards(batch))); // Find companies of invalid cards
+console.log(validateCred(valid1)) // Should print true
+console.log(validateCred(invalid1)) // Should print false
+console.log(findInvalidCards(batch)) // Find all invalid cards
+console.log(idInvalidCardCompanies(findInvalidCards(batch))) // Find companies of invalid cards
diff --git a/Maths/test/LuhnAlgorithm.test.js b/Maths/test/LuhnAlgorithm.test.js
index 6256e29058..e8812a3033 100644
--- a/Maths/test/LuhnAlgorithm.test.js
+++ b/Maths/test/LuhnAlgorithm.test.js
@@ -1,62 +1,80 @@
 // Import the functions to be tested
-import { validateCred, findInvalidCards, idInvalidCardCompanies } from '../LuhnAlgorithm.js';
+import {
+  validateCred,
+  findInvalidCards,
+  idInvalidCardCompanies
+} from '../LuhnAlgorithm.js'
 // Import credit card numbers to be tested
-import { valid1, valid2, valid3, valid4, valid5, invalid1, invalid2, invalid3, invalid4, invalid5, batch } from '../LuhnAlgorithm.js';
+import {
+  valid1,
+  valid2,
+  valid3,
+  valid4,
+  valid5,
+  invalid1,
+  invalid2,
+  invalid3,
+  invalid4,
+  invalid5,
+  batch
+} from '../LuhnAlgorithm.js'
 
 describe('Luhn Algorithm Tests', () => {
-    // Test for validateCred function
-    describe('validateCred', () => {
-        test('should return true for valid credit cards', () => {
-            const validCards = [valid1, valid2, valid3, valid4, valid5];
-            validCards.forEach(card => {
-                expect(validateCred(card)).toBe(true);
-            });
-        });
-
-        test('should return false for invalid credit cards', () => {
-            const invalidCards = [invalid1, invalid2, invalid3, invalid4, invalid5];
-            invalidCards.forEach(card => {
-                expect(validateCred(card)).toBe(false);
-            });
-        });
-    });
-
-    // Test for findInvalidCards function
-    describe('findInvalidCards', () => {
-        test('should return only invalid credit cards from a batch', () => {
-            const invalidCards = findInvalidCards(batch);
-            const allInvalid = invalidCards.every(card => !validateCred(card));
-            expect(allInvalid).toBe(true);
-        });
-
-        test('should return an empty array if no invalid cards are found', () => {
-            const validCards = [valid1, valid2, valid3, valid4, valid5];
-            const invalidCards = findInvalidCards(validCards);
-            expect(invalidCards).toEqual([]);
-        });
-    });
-
-    // Test for idInvalidCardCompanies function
-    describe('idInvalidCardCompanies', () => {
-        test('should identify all companies that issued invalid cards', () => {
-            const invalidCards = findInvalidCards(batch);
-            const companies = idInvalidCardCompanies(invalidCards);
-
-            // Expect the companies array to include known companies
-            expect(companies).toEqual(expect.arrayContaining(['Visa', 'Mastercard', 'Amex', 'Discover']));
-        });
-
-        test('should return an empty array if no invalid cards are found', () => {
-            const validCards = [valid1, valid2, valid3, valid4, valid5];
-            const invalidCards = findInvalidCards(validCards); // Ensure only invalid cards are processed
-            const companies = idInvalidCardCompanies(invalidCards);
-            expect(companies).toEqual([]);
-        });
-
-        test('should handle unknown card companies gracefully', () => {
-            const unknownCard = [9, 3, 1, 8, 2, 0, 7, 4, 5, 6, 7, 8, 9];
-            const companies = idInvalidCardCompanies([unknownCard]);
-            expect(companies).not.toContain('Unknown');
-        });
-    });
-});
+  // Test for validateCred function
+  describe('validateCred', () => {
+    test('should return true for valid credit cards', () => {
+      const validCards = [valid1, valid2, valid3, valid4, valid5]
+      validCards.forEach((card) => {
+        expect(validateCred(card)).toBe(true)
+      })
+    })
+
+    test('should return false for invalid credit cards', () => {
+      const invalidCards = [invalid1, invalid2, invalid3, invalid4, invalid5]
+      invalidCards.forEach((card) => {
+        expect(validateCred(card)).toBe(false)
+      })
+    })
+  })
+
+  // Test for findInvalidCards function
+  describe('findInvalidCards', () => {
+    test('should return only invalid credit cards from a batch', () => {
+      const invalidCards = findInvalidCards(batch)
+      const allInvalid = invalidCards.every((card) => !validateCred(card))
+      expect(allInvalid).toBe(true)
+    })
+
+    test('should return an empty array if no invalid cards are found', () => {
+      const validCards = [valid1, valid2, valid3, valid4, valid5]
+      const invalidCards = findInvalidCards(validCards)
+      expect(invalidCards).toEqual([])
+    })
+  })
+
+  // Test for idInvalidCardCompanies function
+  describe('idInvalidCardCompanies', () => {
+    test('should identify all companies that issued invalid cards', () => {
+      const invalidCards = findInvalidCards(batch)
+      const companies = idInvalidCardCompanies(invalidCards)
+
+      // Expect the companies array to include known companies
+      expect(companies).toEqual(
+        expect.arrayContaining(['Visa', 'Mastercard', 'Amex', 'Discover'])
+      )
+    })
+
+    test('should return an empty array if no invalid cards are found', () => {
+      const validCards = [valid1, valid2, valid3, valid4, valid5]
+      const invalidCards = findInvalidCards(validCards) // Ensure only invalid cards are processed
+      const companies = idInvalidCardCompanies(invalidCards)
+      expect(companies).toEqual([])
+    })
+
+    test('should handle unknown card companies gracefully', () => {
+      const unknownCard = [9, 3, 1, 8, 2, 0, 7, 4, 5, 6, 7, 8, 9]
+      const companies = idInvalidCardCompanies([unknownCard])
+      expect(companies).not.toContain('Unknown')
+    })
+  })
+})