简体   繁体   English

计算 Javascript 中二维数组中元素之间的距离

[英]Compute the distance between elements in a bi-dimensional array in Javascript

Having the following input string: 923857614具有以下输入字符串: 923857614

This is represented into a matrix like this:这表示为如下矩阵:

9 2 3
8 5 7
6 1 4 

Having a moving sequence like this: 423692, this means that we start in point 4, we move to 2, then to 3, then to 6, then to 9 and finally to 2.有一个像这样的移动序列:423692,这意味着我们从第 4 点开始,我们移动到 2,然后到 3,然后到 6,然后到 9,最后到 2。

It must be computed the length of the road.它必须计算道路的长度。 At beginning it starts from 0, if the next step is adjacent to the current one, add 1, if it isn't adjacent, add 2.开始时从0开始,如果下一步与当前步相邻,则加1,如果不相邻,则加2。

How I tried to do it:我是如何尝试的:

function computeRoadLength(keypad, movingSequence) {
  // build the matrix
 const arr = [[keypad[0], keypad[1], keypad[2]],
              [keypad[3], keypad[4], keypad[5]], 
              [keypad[6], keypad[7], keypad[8]]];
  let roadLength = 0;
  for (i = 0; i < movingSequence.length; i++) {
    // some way to compute the distance here
    if (arr[i] > arr[i+1]) roadLength = roadLength + 1;
    if (arr[i] < arr[i+1]) roadLength = roadLength + 2;
  }

  return roadLength;
}

computeRoadLength(923857614, 423692); // 2 + 1 + 2  + 2  + 1 = 8, should return 8

You could take a different approach by using an object of positions of all keypad values and take the absolute delta of the positions.您可以通过使用所有键盘值的位置的 object 并获取位置的绝对增量来采取不同的方法。

For adding to movingSequence add one or max two.要添加到movingSequence ,请添加一个或最多两个。

 function computeRoadLength(keypad, movingSequence) { const positions = {}; for (let i = 0; i < keypad.length; i++) { positions[keypad[i]] = [Math.floor(i / 3), i % 3]; } let roadLength = 0, last = positions[movingSequence[0]]; for (let i = 1; i < movingSequence.length; i++) { const item = positions[movingSequence[i]], sum = Math.abs(last[0] - item[0]) + Math.abs(last[1] - item[1]); roadLength += Math.min(sum, 2); last = item; } return roadLength; } console.log(computeRoadLength('923857614', '423692')); // 2 + 1 + 2 + 2 + 1 = 8

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM