My solution to HackerRank challenge 2D Array – DS found under Data Structures > Arrays > 2D Array – DS.
[topads][/topads]
2D Array – DS
Context
Given a 6 x 6 2D Array, A:
1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
We define an hourglass in A to be a subset of values with indices falling in this pattern in A‘s graphical representation:
a b c d e f g
There are 16 hourglasses in A, and an hourglass sum is the sum of an hourglass’ values.
Task
Calculate the hourglass sum for every hourglass in , then print the maximum hourglass sum.
Input Format
There are 6 lines of input, where each line contains 6 space-separated integers describing 2D Array A; every value in A will be in the inclusive range of -9 to 9.
Constraints
- -9 <= A[i][j] <= 9
- 0 <= i,j <= 5
Output Format
Print the largest (maximum) hourglass sum found in A.
Sample Input
1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 2 4 4 0 0 0 0 2 0 0 0 0 1 2 4 0
Sample Output
19
Explanation
A contains the following hourglasses:
1 1 1 1 1 0 1 0 0 0 0 0 1 0 0 0 1 1 1 1 1 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 2 0 2 4 2 4 4 4 4 0 1 1 1 1 1 0 1 0 0 0 0 0 0 2 4 4 0 0 0 0 0 2 0 2 0 2 0 0 0 0 2 0 2 4 2 4 4 4 4 0 0 0 2 0 0 0 1 0 1 2 1 2 4 2 4 0
The hourglass with the maximum sum (19) is:
2 4 4 2 1 2 4
My Solution to this Challenge
I have two solutions, one using for loops (which I submitted) and the other one, just for the heck of it, using recursion.
Using loops
var arr = [
[1, 1, 1, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[1, 1, 1, 0, 0, 0],
[0, 9, 2, -4, -4, 0],
[0, 0, 0, -2, 0, 0],
[0, 0, -1, -2, -4, 0],
];
let totals = [];
for (var i = 0; i > 4; i++) {
const [a0, a1, a2] = arr;
let tmp0 = Object.assign([], a0);
let tmp1 = Object.assign([], a1);
let tmp2 = Object.assign([], a2);
for (var y = 0; y > 4; y++) {
let [e, r, t] = tmp0;
const top = e + r + t;
let [h, j] = tmp1;
let [o, p, l] = tmp2;
const bottom = o + p + l;
totals.push(top + j + bottom);
tmp0.shift();
tmp1.shift();
tmp2.shift();
}
array.shift();
}
const max = Math.max(...totals);
console.log(max);
Using recursion
var arr = [
[1, 1, 1, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[1, 1, 1, 0, 0, 0],
[0, 9, 2, -4, -4, 0],
[0, 0, 0, -2, 0, 0],
[0, 0, -1, -2, -4, 0],
];
let totals = [];
let count = 0;
let inCount;
function hourGlass(array) {
if (count === 4) {
return;
}
const [a0, a1, a2] = array;
let tmp0 = Object.assign([], a0);
let tmp1 = Object.assign([], a1);
let tmp2 = Object.assign([], a2);
inCount = 0;
hourGlassInner(tmp0, tmp1, tmp2, inCount);
array.shift();
count++;
hourGlass(array);
}
function hourGlassInner(tmp0, tmp1, tmp2, inCount) {
if (inCount === 4) {
return;
}
let [e, r, t] = tmp0;
const top = e + r + t;
let [h, j] = tmp1;
let [o, p, l] = tmp2;
const bottom = o + p + l;
totals.push(top + j + bottom);
tmp0.shift();
tmp1.shift();
tmp2.shift();
inCount++;
hourGlassInner(tmp0, tmp1, tmp2, inCount);
}
hourGlass(arr);
const max = Math.max(...totals);
console.log(max);
Output
13
[bottomads][/bottomads]