Sei un tassista a San Francisco. Come è tipico dei conducenti di taxi, stai navigando in una griglia in cui le uniche direzioni valide che puoi spostare sono sinistra, destra, su e giù. Tuttavia, San Francisco è molto collinare, quindi la distanza tra due incroci adiacenti non è necessariamente la stessa. Più specificamente, sarebbe la distanza tra un incrocio in quota a
e un incrocio adiacente in quota . Il tuo obiettivo è trovare tutti i percorsi più brevi dalla tua origine in alto a sinistra della mappa alla tua destinazione in basso a destra.b
1 + |a - b|
Ingresso
Una griglia bidimensionale di altitudini intere in qualsiasi formato è più conveniente (matrice bidimensionale, matrice monodimensionale con larghezza e / o altezza, ecc.).
Produzione
Una sequenza di direzioni da percorrere per arrivare nell'angolo in basso a destra dell'ingresso dall'alto in alto a sinistra nella distanza più breve possibile, data la distanza tra due intersezioni adiacenti di altitudini a
ed b
è data dalla formula 1 + |a - b|
. Se sono presenti più soluzioni, tutte le soluzioni vengono visualizzate.
Anche se io uso U
, D
, L
, e R
per su, giù, sinistra, destra e negli esempi che seguono il programma può utilizzare qualsiasi quattro stringhe distinte per rappresentare le direzioni fino a quando è coerente con loro in e attraverso tutti gli ingressi.
Esempi
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
Questo è code-golf, quindi vince la risposta con il numero di byte più breve.