2017-08-31 72 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))