2017-08-31 5 views
0

Je fais une piste d'Intelligence Artificielle chez HackerRank et c'est la première fois que je fais ce genre de programmes.A.I .: Trouver la princesse en aussi peu que possible

Sur le premier programme, https://www.hackerrank.com/challenges/saveprincess/problem, je dois faire ce qui suit:

Princesse Peach est piégé dans l'un des quatre coins d'une grille carrée. Vous êtes au centre de la grille et vous pouvez avancer d'un pas à la fois en dans l'une des quatre directions. Pouvez-vous sauver la princesse?

Format d'entrée

La première ligne contient un nombre entier impair N (3 < = N < 100) indiquant la taille de la grille. Ceci est suivi d'une grille NxN. Chaque cellule est indiquée par '-' (valeur ASCII: 45). La position du bot est notée 'm' et la position princesse est désignée par 'p'.

Grille est indexée selon la Convention Matrice

Format de sortie

Imprimer les mouvements que vous prendrez pour sauver la princesse en une seule fois. Les déplacements doivent être séparés par '\ n', une nouvelle ligne. Les mouvements valides sont GAUCHE ou DROITE ou HAUT ou BAS.

Que dois-je faire dans ce genre de problèmes?

Déplacer dans un coin et vérifier si la princesse est là, et ce n'est pas, passer à un autre coin?

Ici le but est de le faire le moins possible mais je pense que cela n'arrivera que si j'ai de la chance et que je trouve la princesse dans le premier virage où je me déplace.

J'ai pensé que je pourrais vérifier si la princesse est le coin où je me dirige avant d'y aller, mais je ne sais pas si cela est permis dans ce problème.

Répondre

1

Lisez la description du format d'entrée (Souligné par l'auteur):

Il est suivi par une grille NxN. Chaque cellule est désignée par '-' (valeur ASCII: 45). La position du bot est notée 'm' et la position princesse est notée 'p'.

Vous n'avez pas besoin d'aller à chaque coin pour voir si la princesse est là, vous savez déjà où elle est! Juste déterminer la différence de position des cellules contenant le bot m et la princesse p et imprimer les mouvements concordants. Par exemple, si la différence est 2 dans et -1 et y direction, vous pouvez aller right right up.

0

Quel ennui ennuyeux ... Sérieusement.

  1. Charger dans les données d'entrée, en commençant par la taille de la grille.
  2. Accepte les lignes d'entrée correspondant à la taille de la grille.
  3. Puisque vous savez que la grille est un carré, vérifiez les coins et se déplacer en diagonale correspondant à ce coin de la princesse est dans

Solution en 7 lignes de 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))