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] = 0There 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.