Un de vos amis vous a indiqué le meilleur restaurant de la ville. C'est une série de virages à gauche et à droite. Malheureusement, ils ont oublié de mentionner pendant combien de temps vous devez continuer tout droit entre ces virages. Heureusement, vous avez un plan des rues avec tous les restaurants. Peut-être que vous pouvez comprendre de quel restaurant ils parlaient?
Contribution
La carte est donnée sous forme d'une grille rectangulaire de caractères ASCII. .
est une route, #
est un bâtiment, A
pour Z
être les différents restaurants. Vous commencez dans le coin supérieur gauche, en allant vers l'est. Exemple:
.....A
.#.###
B....C
##.#.#
D....E
##F###
Les instructions de votre ami seront données sous la forme d'une chaîne (potentiellement vide) ou d'une liste de caractères contenant L
s et R
s.
Production
Vous pouvez parcourir n'importe quel chemin correspondant aux virages à gauche et à droite dans la chaîne d'entrée, à condition de faire au moins un pas en avant avant chacun d'eux, ainsi qu'à la fin. En particulier, cela signifie que si la chaîne commence par, R
vous ne pouvez pas aller immédiatement au sud dans la colonne la plus à gauche. Cela signifie également que vous ne pouvez pas tourner autour de 180 ° sur place.
Vous ne pouvez pas traverser des bâtiments ou des restaurants sauf celui que vous atteignez à la fin. Vous pouvez supposer que le coin supérieur gauche est un .
.
Vous devez afficher tous les restaurants accessibles avec les instructions de votre ami, sous forme de chaîne ou de liste.
Vous pouvez supposer que les instructions mèneront à au moins un restaurant. Par exemple, un seul L
serait invalide pour la carte ci-dessus.
Quelques exemples pour la carte ci-dessus:
<empty> A
R F
RR B,D
RL C,E
RLRL E
RLLR C
RLLL B
RLRR D
RLRRRR A,C
RLLLRLL B
Notez en particulier que cela R
n'atteint pas B
.
Vous pouvez écrire un programme ou une fonction, en prenant une entrée via STDIN (ou l'alternative la plus proche), un argument de ligne de commande ou un argument de fonction et en sortant le résultat via STDOUT (ou l'alternative la plus proche), une valeur de retour de fonction ou un paramètre de fonction (out).
Les règles de code-golf standard s'appliquent.
Cas de test supplémentaires
Voici une carte plus grande, gracieuseté de Conor O'Brien (que j'ai un peu modifiée):
.......Y..........................######
.####.....#.##....##..######....#.###.##
B.........#.##.#..##....##...##.#.#P...#
.#.#####..#.##..#.##....##.#....#.####.#
.#.#...C..#.##...G##..#.##.#....#.#....#
.#.#.#.#..#.####.###.#..##.#....#.#.NO.#
.#.#A#.#..#.##...F###...##.#.##.#......#
.#.###....#.##....##....##.#....###....#
.#.....##...##....##...D##........###R.#
.#.##..##...##E...##..######....####...#
.....X....#.#.....................##S.T#
###########.###########M############...#
#................................###.#.#
#.#########.########.######.#.######.#.#
#......V#.....######.IJ...........##.#.#
#########.###......ZH############L##.#.#
#########.##########.###############.#.#
####K##...##########.#....#..........#.#
####....########U......##...#######Q.#.#
#####################################W.#
Et voici quelques listes de directions sélectionnées et leurs résultats attendus:
<empty> Y
RR B
RLL Y
RLRR B,C,X
RLLLRRR G
RLRLRLRL I,Z
RLLRRRLRRLRR C,D,F,G,Y
RLRRLLRLLLRL B,C,Y
RLLRRLRRRLLLL F,M,N,O,Y
RLRRLLLRRRRLLLL F,M,Y
RLRRLRRRRRRRRRR E,F,Y
RLRRRLLLRLLRRLL M,N,O
RLLRRLRRLRLRLRRLLR E,U
RLRLLRLRRLRRRRRLRL F,G,I,Z
RLLRRLLRLLRRRLRRLLRR W
RLLLRRRLRRLLLLLRLLLLLL D,G,X
RLRLLRLRRLRLRRRLRLLLRR B,C,E,J,X
RLRLRLLLLRLRRRRRRLRLRRLR Y
RLRLRRRLRLLLLRLRRLLLLRLLRRL E,M,X
RLRLLLRRRLLLRLLRLLRLRRLRLRR B,E,F,K
RLRRRLLLLLLLLLLLLLLLRRRRLLL A,B
Question bonus: y a-t-il une entrée qui aboutit à seulement I
ou seulement U
? Si oui, quel est le chemin le plus court?
la source
Python 2,
180177168163161158 octetsLe paramètre
v
est la carte sous forme de chaîne;o
est laLR
chaîne.Mitch Schwartz a économisé
2310lots d'octets. Merci!J'ai sauvé deux octets en définissant
O={0}
et en retournant`O`[9::5]
, ce qui pourrait ne pas être très portable: il suppose quehash(0) == 0
, je pense, parce que les causes de l'ordre d'élémentsrepr(O)
pour êtreet trancher de façon créative cette chaîne me donne la réponse.
la source
C ++ 465
C ++ est tellement verbeux ...
Je vais essayer de le raccourcir davantage. Les suggestions sont les bienvenues.
la source