-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplotReflect.js
92 lines (81 loc) · 2.1 KB
/
plotReflect.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
'use strict';
const fs = require('fs');
const data = fs.readFileSync('./data.dat', 'utf-8');
// console.time('processData');
process.stdout.write(processData(data));
// processData(data);
// console.timeEnd('processData');
function processData(input) {
let quadrants;
// console.time('parse');
({quadrants, input} = parseData(input));
// console.timeEnd('parse');
return transformData(input, quadrants);
}
function parseData(input) {
input = input.split('\n');
const quadrantsNum = input.shift();
input.splice(quadrantsNum, 1);
let quadrants = input.splice(0, quadrantsNum);
input = splitQuery(input);
quadrants = splitQuad(quadrants);
return {quadrants, input};
}
function transformData(input, quadrants) {
let dataOut = '';
for (let i = 0; i < input.length - 1; i++) {
if (input[i][0] === 'X' || input[i][0] === 'Y') {
reflect(...input[i], quadrants);
} else {
dataOut += getOccurance(input[i][1], input[i][2], quadrants) + '\n';
}
}
return dataOut;
}
function reflect(query, start, end, arr) {
if (query === 'X') {
for (let i = start; i < end; i++) {
arr[i][1] = -arr[i][1];
}
} else if (query === 'Y') {
for (let i = start; i < end; i++) {
arr[i][0] = -arr[i][0];
}
}
}
function splitQuad(data) {
let contain = [];
let segment;
for (let i = 0; i < data.length; i++) {
segment = data[i].split(' ');
contain.push([+segment[0] > 0 ? 1 : -1, +segment[1] > 0 ? 1 : -1]);
}
return contain;
}
function splitQuery(data) {
let contain = [];
let segment;
for (let i = 0; i < data.length; i++) {
segment = data[i].split(' ');
contain.push([segment[0], +segment[1] - 1, +segment[2]]);
}
return contain;
}
function getOccurance(start, end, arr) {
let q1 = 0;
let q2 = 0;
let q3 = 0;
let q4 = 0;
for (let i = start; i < end; i++) {
if (arr[i][0] > 0 && arr[i][1] > 0) {
q1++;
} else if (arr[i][0] < 0 && arr[i][1] > 0) {
q2++;
} else if (arr[i][0] < 0 && arr[i][1] < 0) {
q3++;
} else if (arr[i][0] > 0 && arr[i][1] < 0) {
q4++;
}
}
return `${q1} ${q2} ${q3} ${q4}`;
}