-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathproblem11.js
108 lines (96 loc) · 2.56 KB
/
problem11.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
var fs = require('fs');
var _ = require('underscore');
var q = require('q');
function formatInput(fileName) {
var data = fs.readFileSync(__dirname + '/' + fileName, 'utf8');
var formatted = [];
var i = 0;
var j = 0;
var k = 0;
formatted[j] = [];
while(i < data.length) {
var tempStr = '';
while(!_.isNaN(parseInt(data[i]))) {
tempStr += data[i];
i++;
}
formatted[j].push(parseInt(tempStr));
if(data[i] === '\n') {
j++;
formatted[j] = [];
}
i++;
}
return formatted;
}
function getBottom(array, i, j) {
return function(distance) {
return array[i + distance][j];
};
}
function getNumbersBot(array, i, j, distance) {
if(i + distance > array.length) { return []; }
var bot = getBottom(array, i, j);
var num = [];
_.times(distance, function(index) {
num[index] = bot(index);
});
return num;
}
function getDiagDown(array, i, j) {
return function(distance) {
return array[i + distance][j + distance];
};
}
function getDiagUp(array, i, j) {
return function(distance) {
return array[i-distance][j+distance];
};
}
function getNumbersDiagDown(array, i, j, distance) {
if(i + distance > array.length || j + distance > array[i].length) { return []; }
var diag = getDiagDown(array, i, j);
var num = [];
_.times(distance, function(index) {
num[index] = diag(index);
});
return num;
}
function getNumbersDiagUp(array, i, j, distance) {
if(i - distance < 0 || j + distance > array[i].length) { return []; }
var diag = getDiagUp(array, i, j);
var num = [];
_.times(distance, function(index) {
num[index] = diag(index);
});
return num;
}
function getRight(array, i, j) {
return function(distance) {
return array[i][j + distance];
};
}
function getNumbersRight(array, i, j, distance) {
if(j + distance > array[i].length) { return []; }
var right = getRight(array, i, j);
var num = [];
_.times(distance, function(index) {
num[index] = right(index);
});
return num;
}
Array.prototype.multiply = function() {
if(this.length === 0) return undefined;
return _.reduce(this, function(prev, cur) { return prev * cur; }, 1);
};
var grid = formatInput('problem11Input.txt');
var mults = [];
_.each(grid, function(data, i) {
_.each(grid[i], function(data1, j) {
mults.push(getNumbersRight(grid, i, j, 4).multiply());
mults.push(getNumbersBot(grid, i, j, 4).multiply());
mults.push(getNumbersDiagDown(grid, i, j, 4).multiply());
mults.push(getNumbersDiagUp(grid, i, j, 4).multiply());
});
});
console.log(_.chain(mults).compact().max().value());