Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function solution(X, Y) {
- // Create object
- var diamond_count = 0;
- var points = {};
- var x_axis = {};
- var y_axis = {};
- X.forEach(function(x, i) {
- points['t' + i] = {
- 'x': x,
- 'y': Y[i]
- };
- x_axis[x] = x_axis[x] || {};
- x_axis[x]['t' + i] = {
- 'x': x,
- 'y': Y[i]
- };
- y_axis[Y[i]] = y_axis[Y[i]] || {};
- y_axis[Y[i]]['t' + i] = {
- 'x': x,
- 'y': Y[i]
- };
- });
- console.log("*******************");
- console.log(points);
- console.log("*******************");
- // Testing
- var logsC = [];
- logsC = Object.values(points).map(function(point) {
- return '(' + point.x + ',' + point.y + ')';
- });
- console.log(logsC.join());
- function getAllPointsOnX(p) {
- return y_axis[p.y];
- };
- function getAllPointsOnY(x) {
- x_axis[p.x]
- };
- function findMiddle(a, b) {
- if (Math.abs(a - b) % 2 === 0) {
- return ((a + b) / 2);
- }
- return false
- };
- for (var key in points) {
- var logs = [];
- var p = points[key];
- // Find all on x
- logs.push("Looking into " + key);
- var nx = getAllPointsOnX(p);
- // Remove this one
- delete nx[key];
- logs.push("Found " + Object.values(nx).length + " x neighbours.");
- logs.push("X neighbours:", nx);
- // Loop them
- for (var key_nx in nx) {
- // Find the middle of starting vs looped
- // var middle_y = p.y;
- if (key_nx === key || nx[key_nx].x <= p.x) {
- return;
- };
- var middle_x;
- logs.push("Looking for middle between:" + nx[key_nx].x + ' and ' + p.x);
- if (middle_x = findMiddle(nx[key_nx].x, p.x)) {
- logs.push("Found middle on x:" + middle_x);
- // Find all on y from middle
- var ny = getAllPointsOnY(middle_x);
- // For testing
- var score = {};
- var occurence = {};
- for (key_ny in ny) {
- var abs = Math.abs(ny[key_ny].y - p.y);
- score[key_ny] = {};
- score[key_ny] = abs;
- occurence[abs] = occurence[abs] || [];
- occurence[abs].push(key_ny);
- };
- var matching_occ = Object.values(occurence);
- matching_occ.forEach(function(a) {
- if (a.length === 2) {
- a.push(key, key_nx);
- a.sort();
- console.log("Diamond found on: ", a)
- console.log(logs);
- }
- });
- // continue
- var scores = [];
- for (key_ny in ny) {
- scores.push(Math.abs(ny[key_ny].y - p.y));
- };
- // Number of diamonds with given p.x
- diamond_count += (scores.length - [...new Set(scores)].length);
- };
- };
- };
- return diamond_count;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement