Um amigo seu deu instruções para o melhor restaurante da cidade. É uma série de curvas à esquerda e à direita. Infelizmente, eles esqueceram de mencionar por quanto tempo você precisa seguir em frente entre esses turnos. Felizmente, você tem um mapa de ruas com todos os restaurantes. Talvez você possa descobrir qual restaurante eles queriam dizer?
Entrada
O mapa é fornecido como uma grade retangular de caracteres ASCII. .
é uma estrada, #
é um edifício, A
para Z
são os vários restaurantes. Você começa no canto superior esquerdo, indo para o leste. Exemplo:
.....A
.#.###
B....C
##.#.#
D....E
##F###
As instruções do seu amigo serão fornecidas como uma sequência (potencialmente vazia) ou uma lista de caracteres contendo L
s e R
s.
Saída
Você pode percorrer qualquer caminho que corresponda às curvas esquerda e direita na sequência de entrada, desde que você dê pelo menos um passo à frente antes de cada uma delas, bem como no final. Em particular, isso significa que se a sequência começar, R
você não poderá ir para o sul imediatamente na coluna mais à esquerda. Isso também significa que você não pode girar 180 ° no local.
Você não pode andar por prédios ou restaurantes, exceto aquele que você alcança no final. Você pode assumir que o canto superior esquerdo é a .
.
Você deve exibir todos os restaurantes que podem ser acessados com as instruções do seu amigo, como uma sequência ou lista.
Você pode assumir que as instruções levarão a pelo menos um restaurante. Por exemplo, um único L
seria inválido para o mapa acima.
Alguns exemplos para o mapa acima:
<empty> A
R F
RR B,D
RL C,E
RLRL E
RLLR C
RLLL B
RLRR D
RLRRRR A,C
RLLLRLL B
Observe em particular que R
não chega B
.
Você pode escrever um programa ou função, recebendo entrada via STDIN (ou alternativa mais próxima), argumento da linha de comando ou argumento da função e emitindo o resultado via STDOUT (ou alternativa mais próxima), valor de retorno da função ou parâmetro da função (saída).
Aplicam-se as regras padrão de código de golfe .
Casos de teste adicionais
Aqui está um mapa maior, cortesia de Conor O'Brien (que modifiquei um pouco):
.......Y..........................######
.####.....#.##....##..######....#.###.##
B.........#.##.#..##....##...##.#.#P...#
.#.#####..#.##..#.##....##.#....#.####.#
.#.#...C..#.##...G##..#.##.#....#.#....#
.#.#.#.#..#.####.###.#..##.#....#.#.NO.#
.#.#A#.#..#.##...F###...##.#.##.#......#
.#.###....#.##....##....##.#....###....#
.#.....##...##....##...D##........###R.#
.#.##..##...##E...##..######....####...#
.....X....#.#.....................##S.T#
###########.###########M############...#
#................................###.#.#
#.#########.########.######.#.######.#.#
#......V#.....######.IJ...........##.#.#
#########.###......ZH############L##.#.#
#########.##########.###############.#.#
####K##...##########.#....#..........#.#
####....########U......##...#######Q.#.#
#####################################W.#
E aqui estão algumas listas selecionadas de direções e seus resultados esperados:
<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
Pergunta de bônus: existe uma entrada que resulta em apenas I
ou somente U
? Se sim, qual é o caminho mais curto?
fonte
Python 2,
180177168163161158 bytesParâmetro
v
é o mapa como uma string;o
é aLR
string.Mitch Schwartz economizou
2310lotes de bytes. Obrigado!Eu salvei dois bytes configurando
O={0}
e retornando`O`[9::5]
, o que pode não ser muito portátil:hash(0) == 0
suponho que , creio, porque isso faz com que a ordem dos elementosrepr(O)
sejae cortar criativamente essa corda me dá a resposta.
fonte
C ++ 465
C ++ é tão detalhado ...
Vou tentar encurtar ainda mais. Sugestões são bem vindas.
fonte