Você é motorista de táxi em São Francisco. Como é típico dos motoristas de táxi, você está navegando em uma grade na qual as únicas direções válidas que você pode mover são a esquerda, direita, para cima e para baixo. No entanto, San Fransisco é muito montanhoso, portanto a distância entre dois cruzamentos adjacentes não é necessariamente a mesma. Mais especificamente, a distância entre um cruzamento na altitude a
e um cruzamento adjacente na altitude b
seria 1 + |a - b|
. Seu objetivo é encontrar todos os caminhos mais curtos desde a sua origem no canto superior esquerdo do mapa até o seu destino no canto inferior direito.
Entrada
Uma grade bidimensional de altitudes inteiras, no formato que for mais conveniente (matriz bidimensional, matriz unidimensional com largura e / ou altura, etc.).
Resultado
Uma sequência de instruções para viajar para chegar ao canto inferior direito da entrada do canto superior esquerdo na menor distância possível, dada a distância entre duas interseções adjacentes de altitudes a
e b
é dada pela fórmula 1 + |a - b|
. Se houver várias soluções, produza todas as soluções.
Embora eu use U
, D
, L
, e R
para cima, para baixo, para a esquerda e para a direita nos exemplos abaixo seu programa pode usar qualquer quatro cordas diferentes para representar as direções, desde que ele é consistente com eles dentro e através de todas as entradas.
Exemplos
Input:
0 3 0 0 0
0 2 0 2 0
0 0 0 3 0
Output:
D D R R U U R R D D
Input:
3
Output:
<empty>
Input:
11 11 11
11 11 11
11 11 11
Output:
R R D D
R D R D
R D D R
D R R D
D R D R
D D R R
Input:
7 8 1 -1 0
4 4 6 -1 7
3 4 4 2 8
2 5 2 -1 2
Output:
D R D R R D R
D R D R D R R
Isso é código-golfe, então a resposta com a menor contagem de bytes vence.
Respostas:
JavaScript (ES6),
228212200194 bytesEntrada
Matriz unidimensional
a
e larguraw
na sintaxe de currying(a)(w)
Resultado
Uma lista separada por espaços de soluções, como
"DRDRRDR DRDRDRR"
Formatado e comentado
Casos de teste
Mostrar snippet de código
fonte