Introduzione ai bambini
Ogni volta che porto i miei figli in un parco di divertimenti, i bambini si innervosiscono man mano che ci avviciniamo al parco, con il picco nervoso quando siamo nel parcheggio e non troviamo posto per parcheggiare. Quindi ho deciso che ho bisogno di un metodo per trovare il parcheggio gratuito più vicino per ridurre al minimo il tempo dedicato al parcheggio.
Introduzione tecnica
Immagina una rappresentazione di un parcheggio come questo:
*****************
* *
* ··CC··C··CC·· *
* ************* *
* ··CCCCCCCCC·· *
* *
**********E******
In questa rappresentazione si *
intende un muro, un ·
parcheggio gratuito, un E
punto di accesso e C
un'auto già parcheggiata. Ogni spazio bianco è una posizione che l'auto può essere parcheggiata può utilizzare per spostarsi nel parcheggio. Ora estendiamo questo concetto al 3D per creare un parcheggio multi-livello:
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * 2 * 3 * *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 1 * 2 * 3
**********E****** ***************** ***************** *****************
I numeri 1
, 2
e 3
rappresentano le connessioni tra livelli. Il 1
primo piano si collega con il 1
secondo piano, quindi un'auto che sale nella 1
posizione al primo piano appare nella 1
posizione al secondo piano.
Sfida
Dando uno schema di un parcheggio come quello mostrato in precedenza, scrivi il programma più breve che calcola la distanza dal parcheggio gratuito più vicino, secondo quanto segue
Regole
- L'input sarà un array di caratteri 3D o un array di stringhe 2D o equivalente e l'output sarà un singolo numero intero che rappresenta il numero di passi che l'auto deve compiere per raggiungere il parcheggio libero più vicino. Se ricevi un array di caratteri 3D, il primo indice può rappresentare il numero del piano e il secondo e il terzo indice la posizione (x, y) per ciascun piano, ma dipende da te.
- Non ci saranno più di 9 rampe, rappresentate da
[1-9]
. - L'auto parte dalla
E
posizione (ci sarà solo un punto di ingresso per mappa) e si sposta usando gli spazi bianchi in una delle quattro direzioni ogni volta: su, giù, sinistra, destra. L'auto può anche spostarsi in·
posizioni e[1-9]
posizioni. - Ogni cambio di posizione (passo) conta come 1, e ogni volta che l'auto passa da un piano all'altro conta come 3 poiché l'auto deve prendere una rampa. In questo caso, il movimento da uno spazio bianco accanto a
1
a1
se stesso è ciò che conta come 3 passi, perché come risultato di questo movimento l'auto appare nella1
posizione sull'altro piano. - L'auto non può andare oltre i limiti della matrice.
- Il conteggio termina quando l'auto da parcheggiare si trova nella stessa posizione di a
·
. Se non sono disponibili parcheggi gratuiti raggiungibili, è possibile restituire zero, un numero intero negativo, un valore nullo o un errore.
Esempi
Nell'esempio sopra il risultato sarebbe 32, dato che è più economico andare al quarto piano e parcheggiare nel parcheggio più vicino vicino al 3
. I posti auto gratuiti più vicini al terzo piano sono a una distanza di 33 e 34.
Altri esempi:
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * 2 * 3 * *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * ·CCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 1 * 2 * 3
**********E****** ***************** ***************** *****************
Answer: 28 (now the parking space in the 2nd floor is closer)
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 4 2 5 3 6 *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
4 * 5 1 6 2 * 3
**********E****** ***************** ***************** *****************
Answer: 24 (now it's better to go to ramp 4 and then to ramp 5 to the third floor)
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * * * 3 * 2
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * ·CCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 3 * 2 * 1
**********E****** ***************** ***************** *****************
Answer: 16 (now the parking space in the 4th floor is closer)
1st floor 2nd floor 3rd floor 4th floor 5th floor
************ ************ ************ ************ ************
*CCCCCCCCC 1 *CCCCCCCCC 2 *CCCCCCCCC 3 *·CCCCCCCC 4 *········C *
* * * * * * * * * *
*CCCCCCCCC E *CCCCCCCCC 1 *CCCCCCCCC 2 *··CCCCCCC 3 *·······CC 4
************ ************ ************ ************ ************
Answer: 29 (both the nearest parking spaces at the 4th and 5th floors are at the same distance)
1st floor 2nd floor 3rd floor
************ ************ ************
*CCCCCCCCC 1 *CCCCCCCCC 2 *CCCCCCCCC *
* * * * * *
*CCCCCCCCC E *CCCCCCCCC 1 *CCCCCCCCC 2
************ ************ ************
Answer: -1 (no free parking space)
1st floor
************
* *
* *
* E*
************
Answer: -1 (no parking space at all)
1st floor
************
* ····· *
*· ****
* ····· * E
*********
Answer: -1 (the parking lot designer was a genius)
alternative
- Puoi usare qualunque personaggio tu voglia rappresentare la mappa del parcheggio, basta specificare nella tua risposta quali sono i tuoi personaggi scelti e cosa significano.
Questo è code-golf , quindi può vincere il programma / metodo / lambda / qualunque più breve per ogni lingua!
Se hai bisogno di aiuto con l'algoritmo, controlla la mia implementazione (non registrata) in C # .