首页 > 解决方案 > React:通过字符串映射并为每次迭代发出命令。然后计算结果

问题描述

所以我在 React 中有一个挑战。

挑战是这样的。想象一个带有 x 轴和 y 轴的二维网格。像这样:

           (+y)
            ^
            |
            |
 (-x) <-----+-----> (+x)
            |
            |
            v
           (-y)

使用 2d 向量 (x,y),您可以在您所在的网格中找到。所以 (0,0) 在中间是直的

所以你从 (0,0) 开始,然后从那里开始,以及你在四个不同方向上移动的任何位置。左,右,上或下。

您将获得一份关于移动方向的说明列表。每条指令将您在相应方向上移动一个方格。这些指令被编码为一串 ascii 字符,其中每个字符对应一个指令:

所以“>>>”会将你向右移动三个位置。你最终在 (3,0) 和 "<<^^<

您必须实现以下两个函数来回答这些问题:

  1. 处理完所有指令后的最终位置是什么?
  2. 您将访问两次的第一个地点是哪个?

假设任何有效的字符串都可以作为输入。

到目前为止我制作的起始代码,因此您可以更好地理解问题:https ://repl.it/@jdegrell/map-through-the-grid

随意更改其中的任何内容。

所以计算最终位置本身很容易。只需循环遍历字符串的数组版本并根据输入递增或递减 x 和 y。像这样:

var coord = [0,0]

for (var i=0; i < inputData.split("").length; i++) {
        if (arr[i] == ">") {
            cord[0]++
        } else if (arr[i] == "<")
        {
            cord[0]--
        } else if (arr[i] == "^")
        {
            cord[1]++
        }
        else if (arr[i] == "v")
        {
            cord[1]--
        }
    }

但是当我们需要计算哪个是第一个位置被访问了两次时,这就变成了一个问题。为此,我需要迭代循环,并且还要知道网格上的先前步骤。所以我需要通过insteed进行映射。但我不确定如何正确执行此操作。

任何人都想帮助我解决问题,并可能解释如何在这种情况下正确使用地图。

谢谢。

标签: arraysreactjsdictionarystate

解决方案


推荐阅读