JavaScript Implementation of Problem 18

View source code here on GitHub!

p0018()

Project Euler Problem 18

Thinking from the bottom up got the answer

Problem:

By starting at the top of the triangle below and moving to adjacent numbers on the row below, the maximum total from top to bottom is 23.

   3
  7 4
 2 4 6
8 5 9 3

That is, 3 + 7 + 4 + 9 = 23.

Find the maximum total from top to bottom of the triangle below:

                            75
                          95  64
                        17  47  82
                      18  35  87  10
                    20  04  82  47  65
                  19  01  23  75  03  34
                88  02  77  73  07  63  67
              99  65  04  28  06  16  70  92
            41  41  26  56  83  40  80  70  33
          41  48  72  33  47  32  37  16  94  29
        53  71  44  65  25  43  91  52  97  51  14
      70  11  33  28  77  73  17  78  39  68  17  57
    91  71  52  38  17  14  91  43  58  50  27  29  48
  63  66  04  68  89  53  67  30  73  16  69  87  40  31
04  62  98  27  23  09  70  98  73  93  38  53  60  04  23

NOTE: As there are only 16384 routes, it is possible to solve this problem by trying every route. However, Problem 67, is the same challenge with a triangle containing one-hundred rows; it cannot be solved by brute force, and requires a clever method! ;o)

Returns:

number --

 1/**
 2 * Project Euler Problem 18
 3 *
 4 * Thinking from the bottom up got the answer
 5 *
 6 * Problem:
 7 *
 8 * By starting at the top of the triangle below and moving to adjacent numbers on the row below, the maximum total from
 9 * top to bottom is 23.
10 *
11 * .. code-block::
12 *
13 *      3
14 *     7 4
15 *    2 4 6
16 *   8 5 9 3
17 *
18 * That is, 3 + 7 + 4 + 9 = 23.
19 *
20 * Find the maximum total from top to bottom of the triangle below:
21 *
22 * .. code-block::
23 *
24 *                               75
25 *                             95  64
26 *                           17  47  82
27 *                         18  35  87  10
28 *                       20  04  82  47  65
29 *                     19  01  23  75  03  34
30 *                   88  02  77  73  07  63  67
31 *                 99  65  04  28  06  16  70  92
32 *               41  41  26  56  83  40  80  70  33
33 *             41  48  72  33  47  32  37  16  94  29
34 *           53  71  44  65  25  43  91  52  97  51  14
35 *         70  11  33  28  77  73  17  78  39  68  17  57
36 *       91  71  52  38  17  14  91  43  58  50  27  29  48
37 *     63  66  04  68  89  53  67  30  73  16  69  87  40  31
38 *   04  62  98  27  23  09  70  98  73  93  38  53  60  04  23
39 *
40 * NOTE: As there are only 16384 routes, it is possible to solve this problem by trying every route. However, Problem
41 * 67, is the same challenge with a triangle containing one-hundred rows; it cannot be solved by brute force, and
42 * requires a clever method! ;o)
43 *
44 * @return {number}
45 */
46exports.p0018 = function() {
47    const rows = [
48        [75],
49        [95, 64],
50        [17, 47, 82],
51        [18, 35, 87, 10],
52        [20, 4, 82, 47, 65],
53        [19, 1, 23, 75, 3, 34],
54        [88, 2, 77, 73, 7, 63, 67],
55        [99, 65, 4, 28, 6, 16, 70, 92],
56        [41, 41, 26, 56, 83, 40, 80, 70, 33],
57        [41, 48, 72, 33, 47, 32, 37, 16, 94, 29],
58        [53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14],
59        [70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57],
60        [91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48],
61        [63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31],
62        [4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23],
63    ];
64    return triangles.reduceTriangle(rows);
65};
66
67const triangles = require('./lib/triangles.js');

Tags: combinatorics, path-finding