-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhittingtargets.js
91 lines (69 loc) · 1.93 KB
/
hittingtargets.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';
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let inputString = '';
let currentLine = 0;
process.stdin.on('data', function(inputStdin) {
inputString += inputStdin;
});
process.stdin.on('end', function() {
inputString = inputString.split('\n');
main();
});
function readLine() {
return inputString[currentLine++];
}
function makeRect([x1, x2, y1, y2]) {
return { x1, x2, y1, y2 };
}
function makeCircle([x, y, r]) {
return { x, y , r };
}
function makePair([x, y]) {
return { x, y };
}
function checkCircle(pair, circle) {
const dist = Math.sqrt((pair.x - circle.x) ** 2 + (pair.y - circle.y) ** 2);
return dist <= circle.r;
}
function checkRect(pair, rect) {
const pair1 = makePair([pair.x - rect.x1, pair.y - rect.x2]);
const pair2 = makePair([pair.x - rect.y1, pair.y - rect.y2]);
let validP1 = pair1.x >= 0 && pair1.y >= 0;
let validP2 = pair2.x <= 0 && pair2.y <= 0;
return validP1 && validP2;
}
function main() {
const circles = [];
const rects = [];
let t = parseInt(readLine());
while(t--) {
let s = readLine().split(' ');
const a = s.shift();
s = s.map(Number);
if (a === 'rectangle') {
rects.push(makeRect(s))
} else {
circles.push(makeCircle(s));
}
}
const pairs = [];
let n = parseInt(readLine());
for (let i = 0; i < n; i++) {
pairs.push(makePair(readLine().split(' ').map(Number)));
}
const results = new Array(n).fill(0);
pairs.forEach((pair, i) => {
circles.forEach(circle => {
if (checkCircle(pair, circle)) {
results[i]++;
}
});
rects.forEach(rect => {
if (checkRect(pair, rect)) {
results[i]++;
}
});
});
results.forEach(r => console.log(r));
}