-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMatrix.js
50 lines (49 loc) · 1.38 KB
/
Matrix.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
const Matrix = {
get: {
at: (m, r, c) => m[r][c],
nn: (m, r, c) => m[r - 1][c],
ne: (m, r, c) => m[r - 1][c + 1],
ee: (m, r, c) => m[r][c + 1],
se: (m, r, c) => m[r + 1][c + 1],
ss: (m, r, c) => m[r + 1][c],
sw: (m, r, c) => m[r + 1][c - 1],
ww: (m, r, c) => m[r][c - 1],
nw: (m, r, c) => m[r - 1][c - 1]
},
set: {
at: (m, r, c, v) => (m[r][c] = v),
nn: (m, r, c, v) => (m[r - 1][c] = v),
ne: (m, r, c, v) => (m[r - 1][c + 1] = v),
ee: (m, r, c, v) => (m[r][c + 1] = v),
se: (m, r, c, v) => (m[r + 1][c + 1] = v),
ss: (m, r, c, v) => (m[r + 1][c] = v),
sw: (m, r, c, v) => (m[r + 1][c - 1] = v),
ww: (m, r, c, v) => (m[r][c - 1] = v),
nw: (m, r, c, v) => (m[r - 1][c - 1] = v)
},
coord: {
at: (r, c) => ({ r: r, c: c }),
nn: (r, c) => ({ r: r - 1, c: c }),
ne: (r, c) => ({ r: r - 1, c: c + 1 }),
ee: (r, c) => ({ r: r, c: c + 1 }),
se: (r, c) => ({ r: r + 1, c: c + 1 }),
ss: (r, c) => ({ r: r + 1, c: c }),
sw: (r, c) => ({ r: r + 1, c: c - 1 }),
ww: (r, c) => ({ r: r, c: c - 1 }),
nw: (r, c) => ({ r: r - 1, c: c - 1 })
},
new: (rs, cs) => seq(rs).map(_ => seq(cs).map(_ => 0)),
rows: m => m.length - 1,
cols: m => m[0].length - 1,
dirs: {
NN: 'nn',
NE: 'ne',
EE: 'ee',
SE: 'se',
SS: 'ss',
SW: 'sw',
WW: 'ww',
NW: 'nw',
}
};
export default Matrix