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 # .
Réponses:
JavaScript (ES6), 199 octets
Essayez-le en ligne!
Comment?
La fonction récursive g () prend en entrée:
Si f est définie, nous copions simplement au sol actuel F . Sinon, nous devons rechercher le nouvel étage et les nouvelles coordonnées en itérant sur chaque étage et sur chaque ligne jusqu'à ce que nous trouvions le point d'entrée c :
Nous définissons r comme la ligne actuelle de l'étage actuel:
L'étape suivante consiste à s'assurer que la cellule actuelle c en (x, y) est définie:
Si tel est le cas, nous le marquons comme visité en le définissant sur g , une valeur qui ne déclenche aucun des tests à venir:
Si c est une place de parking gratuite, on arrête la récursivité. Et si le nombre total de coups est inférieur à notre meilleur score précédent, nous mettons à jour m en conséquence:
Si nous venons d'atteindre un nouvel étage ( f n'est pas défini ) ou c est un espace, nous traitons un appel récursif pour chaque cellule environnante:
Sinon, si c est un marqueur de rampe (c'est-à-dire un chiffre non nul), nous traitons un seul appel récursif pour atteindre le nouveau plancher:
Enfin, nous restaurons la cellule actuelle à sa valeur initiale afin qu'elle puisse être visitée à nouveau dans d'autres chemins de récursivité:
la source
Kotlin , 768 octets
période utilisée. au lieu de ·. J'aimerais avoir compris la réponse d'Arnauld car perdre 500 octets serait bien.
Essayez-le en ligne!
la source
Powershell,
299292 octetsOn suppose que la carte est rectangulaire .
Il utilise à la
x
place·
. Pour obtenir·
, vous devez Enregistrer le script en ASCII (non UTF-8) et remplacerx
le·
.Script non testé et testé:
Production:
Sortie étendue pour le stationnement avec 16 étapes:
Explication
C'est une sorte d' algorithme de recherche de chemin Lee . Une seule chose intelligente: 3 étapes sur la rampe sont réalisées comme des états fictifs
H->G->F->E
Powershell pour un concepteur de parking génial,
377369 octetsLa conception du stationnement est un
2D string array
. Aucune hypothèse sur la carte: toutes les chaînes de longueur, étages sans murs, parking sans point d'entrée, rampes à plusieurs étages et à plusieurs sorties. Le coût du genre est de + 26%.Script non testé et testé:
la source