We draw N discs on a plane. The discs are numbered from 0 to N − 1. An array A of N non-negative integers, specifying the radiuses of the discs, is given. The J-th disc is drawn with its center at (J, 0) and radius A[J].
We say that the J-th disc and K-th disc intersect if J ≠ K and the J-th and K-th discs have at least one common point (assuming that the discs contain their borders).
The figure below shows discs drawn for N = 6 and A as follows:
A[0] = 1 A[1] = 5 A[2] = 2 A[3] = 1 A[4] = 4 A[5] = 0
There are eleven (unordered) pairs of discs that intersect, namely:
- discs 1 and 4 intersect, and both intersect with all the other discs;
- disc 2 also intersects with discs 0 and 3.
Write a function:
function solution(A);
that, given an array A describing N discs as explained above, returns the number of (unordered) pairs of intersecting discs. The function should return −1 if the number of intersecting pairs exceeds 10,000,000.
Given array A shown above, the function should return 11, as explained above.
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [0..100,000];
- each element of array A is an integer within the range [0..2,147,483,647].
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 1
}
}
}
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
}
}
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
Object.
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
Object.entries(map).sort()
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
for (let key of Object.keys(map).sort((a, b) => a ))
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
for (let key of Object.keys(map).sort((a, b) => a - b)) {
console.log(key);
}
}
Invalid result type, integer expected, 'undefined' found Perhaps you are missing a 'return'?stdout:
-4 -1 0 1 2 4 5 6 8
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
console.log(key);
}
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
if (map)
}
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
opened = opened + map
}
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
intersections +=
}
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
intersections += value.open
}
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
intersections += value.open * opened;
opened += value.open - value.close;
}
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
intersections += value.open * opened;
opened += value.open - value.close;
if (intersections > 10000000) {
return -;
}
}
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
intersections += value.open * opened;
opened += value.open - value.close;
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
intersections += (value.open - value.close) * opened;
opened += value.open - value.close;
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
intersections += (value.open - value.close) * opened;
opened += value.open - value.close;
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
intersections += value.open * opened;
opened += value.open - value.close;
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
intersections += value.open * opened;
opened += value.open - value.close;
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
co
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
intersections += value.open * opened;
opened += value.open - value.close;
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
console.log(map);
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
{ '0': { open: 2, close: 0 },
'1': { open: 0, close: 1 },
'2': { open: 1, close: 0 },
'4': { open: 0, close: 2 },
'5': { open: 1, close: 1 },
'6': { open: 0, close: 1 },
'8': { open: 0, close: 1 },
'-1': { open: 1, close: 0 },
'-4': { open: 1, close: 0 } }
{ open: 1, close: 0 }
{ open: 1, close: 0 }
{ open: 2, close: 0 }
{ open: 0, close: 1 }
{ open: 1, close: 0 }
{ open: 0, close: 2 }
{ open: 1, close: 1 }
{ open: 0, close: 1 }
{ open: 0, close: 1 }
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
console.log(map);
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
{ '0': { open: 2, close: 0 },
'1': { open: 0, close: 1 },
'2': { open: 1, close: 0 },
'4': { open: 0, close: 2 },
'5': { open: 1, close: 1 },
'6': { open: 0, close: 1 },
'8': { open: 0, close: 1 },
'-1': { open: 1, close: 0 },
'-4': { open: 1, close: 0 } }
0
1
1
2
5
4
5
3
8
4
8
2
10
2
10
1
10
0
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
-4
{ open: 1, close: 0 }
0
1
-1
{ open: 1, close: 0 }
1
2
0
{ open: 2, close: 0 }
5
4
1
{ open: 0, close: 1 }
5
3
2
{ open: 1, close: 0 }
8
4
4
{ open: 0, close: 2 }
8
2
5
{ open: 1, close: 1 }
10
2
6
{ open: 0, close: 1 }
10
1
8
{ open: 0, close: 1 }
10
0
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1,
* 0 and 2,
* 0 and 4,
* 1 and 2,
* 1 and 3,
* 1 and 4,
* 1 and 5,
* 2 and 3,
* 2 and 4,
* 3 and 4,
* 4 and 5.
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2,
* 0 and 4,
* 1 and 2,
* 1 and 3,
* 1 and 4,
* 1 and 5,
* 2 and 3,
* 2 and 4,
* 3 and 4,
* 4 and 5.
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4,
* 1 and 2,
* 1 and 3,
* 1 and 4,
* 1 and 5,
* 2 and 3,
* 2 and 4,
* 3 and 4,
* 4 and 5.
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4, ok
* 1 and 2,
* 1 and 3,
* 1 and 4,
* 1 and 5,
* 2 and 3,
* 2 and 4,
* 3 and 4,
* 4 and 5.
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4, ok
* 1 and 2, ok
* 1 and 3,
* 1 and 4, ok
* 1 and 5,
* 2 and 3,
* 2 and 4,
* 3 and 4,
* 4 and 5.
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4, ok
* 1 and 2, ok
* 1 and 3, ok
* 1 and 4, ok
* 1 and 5,
* 2 and 3,
* 2 and 4,
* 3 and 4,
* 4 and 5.
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4, ok
* 1 and 2, ok
* 1 and 3, ok
* 1 and 4, ok
* 1 and 5,
* 2 and 3,
* 2 and 4, ok
* 3 and 4,
* 4 and 5.
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4, ok
* 1 and 2, ok
* 1 and 3,
* 1 and 4, ok
* 1 and 5,
* 2 and 3,
* 2 and 4,
* 3 and 4,
* 4 and 5.
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4, ok
* 1 and 2, ok
* 1 and 3, ok
* 1 and 4, ok
* 1 and 5,
* 2 and 3,
* 2 and 4,
* 3 and 4,
* 4 and 5.
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4, ok
* 1 and 2, ok
* 1 and 3, ok
* 1 and 4, ok
* 1 and 5,
* 2 and 3, ok
* 2 and 4,
* 3 and 4, ok
* 4 and 5.
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4, ok
* 1 and 2, ok
* 1 and 3, ok
* 1 and 4, ok
* 1 and 5,
* 2 and 3, ok
* 2 and 4,
* 3 and 4, ok
* 4 and 5.
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4, ok
* 1 and 2, ok
* 1 and 3, ok
* 1 and 4, ok
* 1 and 5, ok
* 2 and 3, ok
* 2 and 4,
* 3 and 4, ok
* 4 and 5.
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4, ok
* 1 and 2, ok
* 1 and 3, ok
* 1 and 4, ok
* 1 and 5, ok
* 2 and 3, ok
* 2 and 4,
* 3 and 4, ok
* 4 and 5. ok
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4, ok
* 1 and 2, ok
* 1 and 3, ok
* 1 and 4, ok
* 1 and 5, ok
* 2 and 3, ok
* 2 and 4,
* 3 and 4, ok
* 4 and 5. ok
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
intersections += value.open * opened;
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4, ok
* 1 and 2, ok
* 1 and 3, ok
* 1 and 4, ok
* 1 and 5, ok
* 2 and 3, ok
* 2 and 4,
* 3 and 4, ok
* 4 and 5. ok
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
for (let j = 0; j < value.open; j++) {
intersections += value.open * opened;
}
opened += value.open - value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4, ok
* 1 and 2, ok
* 1 and 3, ok
* 1 and 4, ok
* 1 and 5, ok
* 2 and 3, ok
* 2 and 4,
* 3 and 4, ok
* 4 and 5. ok
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
for (let j = 0; j < value.open; j++) {
intersections += opened;
opened += value.open;
}
opened -= value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
-4
{ open: 1, close: 0 }
0
1
-1
{ open: 1, close: 0 }
1
2
0
{ open: 2, close: 0 }
7
6
1
{ open: 0, close: 1 }
7
5
2
{ open: 1, close: 0 }
12
6
4
{ open: 0, close: 2 }
12
4
5
{ open: 1, close: 1 }
16
4
6
{ open: 0, close: 1 }
16
3
8
{ open: 0, close: 1 }
16
2
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4, ok
* 1 and 2, ok
* 1 and 3, ok
* 1 and 4, ok
* 1 and 5, ok
* 2 and 3, ok
* 2 and 4,
* 3 and 4, ok
* 4 and 5. ok
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
for (let j = 0; j < value.open; j++) {
intersections += opened;
opened ++
}
opened -= value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
/*
* 0 and 1, ok
* 0 and 2, ok
* 0 and 4, ok
* 1 and 2, ok
* 1 and 3, ok
* 1 and 4, ok
* 1 and 5, ok
* 2 and 3, ok
* 2 and 4,
* 3 and 4, ok
* 4 and 5. ok
*/
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
console.log(key)
console.log(value);
for (let j = 0; j < value.open; j++) {
intersections += opened;
opened++;
}
opened -= value.close;
console.log(intersections);
console.log(opened);
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
-4
{ open: 1, close: 0 }
0
1
-1
{ open: 1, close: 0 }
1
2
0
{ open: 2, close: 0 }
6
4
1
{ open: 0, close: 1 }
6
3
2
{ open: 1, close: 0 }
9
4
4
{ open: 0, close: 2 }
9
2
5
{ open: 1, close: 1 }
11
2
6
{ open: 0, close: 1 }
11
1
8
{ open: 0, close: 1 }
11
0
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
for (let j = 0; j < value.open; j++) {
intersections += opened;
opened++;
}
opened -= value.close;
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
for (let j = 0; j < value.open; j++) {
intersections += opened;
opened++;
}
opened -= value.close;
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
const N = A.length;
const map = {};
for (let i = 0; i < N; i++) {
const openAt = i - A[i];
const closeAt = A[i] + i;
if (!map[openAt]) {
map[openAt] = {
open: 1,
close: 0
}
} else {
map[openAt].open++;
}
if (!map[closeAt]) {
map[closeAt] = {
open: 0,
close: 1
}
} else {
map[closeAt].close++;
}
}
let opened = 0;
let intersections = 0;
for (let key of Object.keys(map).sort((a, b) => a - b)) {
const value = map[key];
for (let j = 0; j < value.open; j++) {
intersections += opened;
opened++;
}
opened -= value.close;
if (intersections > 10000000) {
return -1;
}
}
return intersections;
}
The solution obtained perfect score.