Skip to content

Commit 36c6a4d

Browse files
MatheusMurielMatheus Muriel
andauthored
solution: Project Euler Problem 11 (#1172)
* Included Project Euler 11 solution * Fix review comments Co-authored-by: Matheus Muriel <Matheus_MurielFerreira@swissre.com>
1 parent 0df7264 commit 36c6a4d

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

Project-Euler/Problem011.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
2+
/*
3+
*
4+
* In the 20×20 grid below, four numbers along a diagonal line have been marked in red.
5+
*
6+
* 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
7+
* 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
8+
* 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
9+
* 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
10+
* 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
11+
* 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
12+
* 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
13+
* 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
14+
* 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
15+
* 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
16+
* 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
17+
* 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
18+
* 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19+
* 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
20+
* 04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
21+
* 88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
22+
* 04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
23+
* 20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
24+
* 20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
25+
* 01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
26+
*
27+
* The product of these numbers is 26 × 63 × 78 × 14 = 1788696.
28+
*
29+
* What is the greatest product of four adjacent numbers in the
30+
* same direction (up, down, left, right, or diagonally) in the 20×20 grid?
31+
*/
32+
33+
export function largestProductInAGrid (arr) {
34+
let max = 0
35+
const k = 4
36+
37+
const dx = [1, 0, 1, -1]
38+
const dy = [0, 1, 1, 1]
39+
40+
for (let y = 0; y < arr.length; y++) {
41+
for (let x = 0; x < arr[y].length; x++) {
42+
for (let d = 0; d < 4; d++) {
43+
let p = 1
44+
for (let i = 0; i < k; i++) {
45+
p *= get(arr, y + i * dy[d], x + i * dx[d])
46+
}
47+
max = Math.max(p, max)
48+
}
49+
}
50+
}
51+
return max
52+
}
53+
54+
function get (arr, y, x) {
55+
if (y >= 0 && y < arr.length && x >= 0 && x < arr[y].length) {
56+
return arr[y][x]
57+
}
58+
59+
return 0
60+
}

Project-Euler/test/Problem011.test.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { largestProductInAGrid } from '../Problem011.js'
2+
3+
const arr = [
4+
[8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8],
5+
[49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 4, 56, 62, 0],
6+
[81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 3, 49, 13, 36, 65],
7+
[52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91],
8+
[22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80],
9+
[24, 47, 32, 60, 99, 3, 45, 2, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50],
10+
[32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70],
11+
[67, 26, 20, 68, 2, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21],
12+
[24, 55, 58, 5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72],
13+
[21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95],
14+
[78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92],
15+
[16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 0, 17, 54, 24, 36, 29, 85, 57],
16+
[86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58],
17+
[19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40],
18+
[4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66],
19+
[88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69],
20+
[4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36],
21+
[20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 4, 36, 16],
22+
[20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54],
23+
[1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48]
24+
]
25+
26+
describe('Checking Largest Product In A Grid', () => {
27+
// Project Euler Condition Check
28+
test('Test Euler Condition', () => {
29+
expect(largestProductInAGrid(arr)).toBe(70600674)
30+
})
31+
})

0 commit comments

Comments
 (0)
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