2017-08-31 47 views
0

我在HackerRank做人工智能跟踪,这是我第一次做这种程序。A.I .:在尽可能少的步骤找到公主

在第一个程序,https://www.hackerrank.com/challenges/saveprincess/problem,我必须做到以下几点:

桃子公主被困在一个方形网格的四个角之一。 您位于网格的中心,并且可以在 中的任意一个方向上移动一步。你能拯救公主吗?

输入格式

第一行包含一个奇整数N(3 < = N < 100)表示的 大小的网格。紧接着是一个NxN网格。每个单元格由' - '(ascii值:45)表示为 。机器人位置用'm' 表示,公主位置用'p'表示。

电网正在使用矩阵公约

输出格式

打印出来,你会采取营救公主一气呵成移动索引。 这些动作必须用换行符'\ n'分隔。有效的移动是 左或右或上或下。

这些问题该怎么办?

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

这里的目标是尽可能在尽可能少的步骤上做到这一点,但我认为这只会在幸运的时候才会发生,并且我会在第一个角落找到公主。

我以为我可以检查公主是否是转移到它之前的角落,但我不知道这个问题是否允许。

回答

1

读输入格式(重点煤矿)的描述:

这之后是一个NxN网格。每个单元由' - '(ASCII值:45)表示。机器人位置用'm'表示,公主位置用'p'表示。

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

0

多么无聊的问题......真的。

  1. 加载输入数据,从网格大小开始。
  2. 接受对应于网格大小的输入行。
  3. 既然你知道网格是一个正方形,检查四角和对角线移动对应哪个角落公主是

在7线蟒蛇的解决方案:

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))