Intro pour enfants
Chaque fois que j'emmène mes enfants dans un parc d'attractions, les enfants deviennent plus nerveux plus nous sommes proches du parc, avec le pic nerveux lorsque nous sommes sur le parking et ne trouvons pas de place pour se garer. J'ai donc décidé que j'avais besoin d'une méthode pour trouver l'espace de stationnement gratuit le plus proche afin de minimiser le temps passé à stationner.
Introduction technique
Imaginez une représentation d'un parking comme celui-ci:
*****************
* *
* ··CC··C··CC·· *
* ************* *
* ··CCCCCCCCC·· *
* *
**********E******
Dans cette représentation, on *
entend un mur, un ·
espace de stationnement gratuit, un E
point d'entrée et C
une voiture déjà garée. Chaque espace est une position que la voiture à garer peut utiliser pour se déplacer dans le parking. Maintenant, étendons ce concept à la 3D pour créer un parking à plusieurs niveaux:
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****** ***************** ***************** *****************
Les chiffres 1
, 2
et 3
représentent les liens entre les niveaux. Le 1
du premier étage se connecte 1
au au deuxième étage, donc une voiture entrant dans la 1
position au premier étage apparaît dans la 1
position au deuxième étage.
Défi
En donnant un schéma de parking comme celui montré précédemment, écrivez le programme le plus court qui calcule la distance jusqu'à la place de parking gratuite la plus proche, selon ce qui suit
Règles
- L'entrée sera un tableau de caractères 3D ou un tableau de chaînes 2D ou équivalent, et la sortie sera un entier unique représentant le nombre de pas que la voiture doit prendre pour se rendre à l'espace de stationnement gratuit le plus proche. Si vous recevez un tableau de caractères 3D, le premier index peut représenter le numéro d'étage et les deuxième et troisième index la position (x, y) pour chaque étage, mais cela dépend de vous.
- Il n'y aura pas plus de 9 rampes, représentées par
[1-9]
. - La voiture part de la
E
position (il n'y aura qu'un seul point d'entrée par carte) et se déplace en utilisant les espaces blancs dans l'une des quatre directions à chaque fois: haut, bas, gauche, droite. La voiture peut également entrer dans des·
positions et des[1-9]
positions. - Chaque changement de position (étape) compte pour 1, et chaque fois que la voiture passe d'un étage à un autre compte pour 3 car la voiture doit emprunter une rampe. Dans ce cas, le mouvement d'un espace à côté de a
1
à1
lui-même est ce qui compte comme 3 étapes, car à la suite de ce mouvement, la voiture apparaît dans la1
position à l'autre étage. - La voiture ne peut pas dépasser les limites de la matrice.
- Le décompte se termine lorsque la voiture à garer est dans la même position que a
·
. S'il n'y a pas de places de stationnement gratuites accessibles, vous pouvez retourner zéro, un entier négatif, une valeur nulle ou une erreur.
Exemples
Dans l'exemple ci-dessus, le résultat serait 32, car il est moins cher d'aller au quatrième étage et de se garer dans l'espace de stationnement le plus proche près de la 3
. Les places de parking gratuites les plus proches au troisième étage sont situées à une distance de 33 et 34.
Autres exemples:
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)
Alternatives
- Vous pouvez utiliser les caractères que vous souhaitez représenter la carte du parking, spécifiez simplement dans votre réponse quels sont les caractères que vous avez choisis et ce qu'ils signifient.
Il s'agit de code-golf , donc le programme / méthode / lambda / le plus court pour chaque langue peut gagner!
Si vous avez besoin d'aide avec l'algorithme, veuillez vérifier mon implémentation (non golfée) en C # .