A.I。:尽可能少地找到公主

时间:2017-08-31 08:42:49

标签: artificial-intelligence

我正在HackerRank做一个人工智能跟踪,这是我第一次做这类程序。

在第一个程序https://www.hackerrank.com/challenges/saveprincess/problem上,我必须执行以下操作:

  

桃子公主被困在方格的四个角中的一个角落里。   您位于网格的中心,可以一次移动一步   四个方向中的任何一个。你能救出公主吗?

     

输入格式

     

第一行包含表示的奇数N(3 <= N <100)   网格的大小。接下来是NxN网格。每个细胞都是   用' - '表示(ascii值:45)。机器人位置用'm'表示   公主的位置用'p'表示。

     

使用Matrix Convention

索引网格      

输出格式

     

打印出您将一次性拯救公主的动作。   移动必须用'\ n'分隔,换行符。有效的举措是   左或右或上或下。

在这些问题上我该怎么做?

移到一个角落并检查公主是否在那里,而不是,移到另一个角落?

这里的目标是在尽可能少的步骤中完成,但我认为只有在我很幸运的情况下才会发生这种情况,并且我会在我移动的第一个角落找到公主。

我原以为我可以检查公主是否是我要移动的角落,但我不知道是否允许这个问题。

2 个答案:

答案 0 :(得分:1)

阅读输入格式的说明(强调我的):

  

接下来是NxN网格。每个单元格用' - '表示(ascii值:45)。机器人位置用'm'表示,用公主位置用'p'表示

你不必去每个角落看看公主是否在那里,你已经知道她在哪里了!只需确定包含机器人m和公主p的单元格的位置差异,然后打印出一致的动作。例如,如果2以及x-1方向的差异为y,您可能会right right up

答案 1 :(得分:0)

真是个无聊的问题......说真的。

  1. 从网格大小开始加载输入数据。
  2. 接受与网格大小相对应的输入行。
  3. 由于您知道网格是正方形,请检查角落并沿对角线移动公主所在的角落。
  4. 7行python中的解决方案:

    gridsize  = int(input('Enter number of rows: '))
    grid      = [ input('Enter row: ') for r in range(gridsize) ]
    move_dist = (gridsize-1)//2
    if   grid[ 0][ 0] == 'p': print('\n'.join([   'UP\nLEFT'] * move_dist))
    elif grid[ 0][-1] == 'p': print('\n'.join([  'UP\nRIGHT'] * move_dist))
    elif grid[-1][ 0] == 'p': print('\n'.join([ 'DOWN\nLEFT'] * move_dist))
    elif grid[-1][-1] == 'p': print('\n'.join(['DOWN\nRIGHT'] * move_dist))