diff --git a/Project-Euler/Problem011.js b/Project-Euler/Problem011.js new file mode 100644 index 0000000000..4135702c8e --- /dev/null +++ b/Project-Euler/Problem011.js @@ -0,0 +1,60 @@ + +/* + * + * In the 20×20 grid below, four numbers along a diagonal line have been marked in red. + * + * 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 + * 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 + * 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 + * 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 + * 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 + * 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 + * 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 + * 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 + * 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 + * 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 + * 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 + * 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 + * 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 + * 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 + * 04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 + * 88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 + * 04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 + * 20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 + * 20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 + * 01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48 + * + * The product of these numbers is 26 × 63 × 78 × 14 = 1788696. + * + * What is the greatest product of four adjacent numbers in the + * same direction (up, down, left, right, or diagonally) in the 20×20 grid? +*/ + +export function largestProductInAGrid (arr) { + let max = 0 + const k = 4 + + const dx = [1, 0, 1, -1] + const dy = [0, 1, 1, 1] + + for (let y = 0; y < arr.length; y++) { + for (let x = 0; x < arr[y].length; x++) { + for (let d = 0; d < 4; d++) { + let p = 1 + for (let i = 0; i < k; i++) { + p *= get(arr, y + i * dy[d], x + i * dx[d]) + } + max = Math.max(p, max) + } + } + } + return max +} + +function get (arr, y, x) { + if (y >= 0 && y < arr.length && x >= 0 && x < arr[y].length) { + return arr[y][x] + } + + return 0 +} diff --git a/Project-Euler/test/Problem011.test.js b/Project-Euler/test/Problem011.test.js new file mode 100644 index 0000000000..921d1c7c39 --- /dev/null +++ b/Project-Euler/test/Problem011.test.js @@ -0,0 +1,31 @@ +import { largestProductInAGrid } from '../Problem011.js' + +const arr = [ + [8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8], + [49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 4, 56, 62, 0], + [81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 3, 49, 13, 36, 65], + [52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91], + [22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80], + [24, 47, 32, 60, 99, 3, 45, 2, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50], + [32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70], + [67, 26, 20, 68, 2, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21], + [24, 55, 58, 5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72], + [21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95], + [78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92], + [16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 0, 17, 54, 24, 36, 29, 85, 57], + [86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58], + [19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40], + [4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66], + [88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69], + [4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36], + [20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 4, 36, 16], + [20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54], + [1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48] +] + +describe('Checking Largest Product In A Grid', () => { + // Project Euler Condition Check + test('Test Euler Condition', () => { + expect(largestProductInAGrid(arr)).toBe(70600674) + }) +}) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy