Contexte
Il y a quelques mois, l'aventure de votre vie était sur le point de commencer. Maintenant, en ce moment précis (ouais, maintenant), après des mois de souffrance et de dur labeur, vous et un groupe d'amis vous tenez au sommet du monde. Oui, vous avez raison, vous êtes au sommet de Sagarmāthā .
Cependant, les choses ne se passent pas aussi bien que vous le souhaiteriez. Un brouillard dense vous a entouré et une tempête incroyablement mauvaise arrive aussi vite que possible. Vous n'avez fixé aucune corde en montant et vos empreintes de pas ont été couvertes de neige. Si vous voulez survivre (au moins pour aujourd'hui), vous devez sortir de là aussi vite que possible, mais vous DEVEZ d'abord trouver un moyen de savoir quelle face de la montagne est celle que vous devez descendre.
Heureusement, vous avez apporté avec vous votre téléphone satellite que vous avez modifié avant le voyage afin de pouvoir y programmer et exécuter des programmes.
Défi
Vous avez pu télécharger sur votre téléphone la carte de la montagne d'une manière ASCII à l'ancienne et illisible sur le sommet du monde. Votre tâche consiste à décider quelle face de la montagne présente la descente la plus facile afin d'augmenter vos chances de survie. Pour ce faire, vous avez la brillante idée de coder un programme sur votre téléphone qui vous dira quelle est la voie la plus simple. (Avertissement: Ces activités ont été réalisées par des professionnels. Aucun programmeur n'a été blessé au cours de cette narration. S'il vous plaît, n'essayez pas cela à la maison.)
Les cartes sont uniquement constituées des caractères /
et \
(plus les espaces et les nouvelles lignes). Dans toute carte, le sommet de la montagne est toujours représenté par
/\
\/
et de chacun des côtés ( 1,2,3
ou 4
) du sommet, vous trouverez toujours un chemin "possible" vers le bas de la montagne.
1 /\ 2
3 \/ 4
Les itinéraires sont toujours présentés de la manière suivante:
\
Steep-> / /
/ / <-Flat
/ \
Flat-> \ \
/ \ <-Steep
/\
\/
où chaque nouveau personnage est soit un endroit à gauche / droite de son prédécesseur. La signification de chaque caractère est:
- Si la barre oblique / jeu est parallèle à son côté sommet -> compte comme une partie «raide».
- Si la barre oblique / barre oblique inversée est perpendiculaire à son côté sommet -> compte comme une partie «plate».
* Pour plus d'informations, voir le graphique ci-dessus.
Remarque : Les côtés peuvent avoir des longueurs différentes et les caractères qui constituent le sommet comptent également comme faisant partie de leur côté. En cas d'égalité, vous pouvez choisir n'importe lequel d'entre eux.
Les failles standard ne sont pas autorisées.
Contribution
Une chaîne représentant la carte de la montagne ou un fichier texte contenant les mêmes informations.
Soit
C:\....\file.txt
ou
\
/ /
/ /
/ \
\ \
/ \
/\
\/
\ /
\ \
\ \
\ \
/ /
sous forme de chaîne sont des entrées valides.
Production
En sortie, vous devez produire un fichier en texte brut ou par stdout une représentation de profil ASCII du côté avec la plus faible pente moyenne en utilisant _
pour les pièces plates et /
pour les pièces raides avec la pente moyenne du côté (number of "/")/(total chars)
.
Exemple de sortie pour la carte ci-dessus:
/
___/
/
AS:0.5
Le format n'est pas important tant que vous avez le profil et la pente moyenne.
Notation
Quelle? Voulez-vous une meilleure récompense que de sauver votre vie et celle de vos amis et d'être le premier programmeur à avoir programmé au sommet du monde? D'accord ... c'est le golf de code, donc le programme le plus court en octets gagne.
Cas de test
Contribution:
\
/ /
/ /
/ \
\ \
/ \
/\
\/
\ /
\ \
\ \
\ \
/ /
Production:
/
___/
/
AS=0.5
Contribution:
/
\ /
/ /
\ /
\ /
/ /
/\
\/
\ /
\ \
\ \
\ \
/ /
/
/
Production:
______/
AS=0.143 (1/7)
Contribution:
/ \
\ \
/ /
/ \
/\
\/
\ /
\ /
\ /
/ \
Production:
/
/
/
_/
AS=0.8
Réponses:
JavaScript (ES6), 303
Testez l'exécution de l'extrait de code dans un navigateur compatible EcmaScript - sûrement Firefox, probablement Chrome. Utilisation de chaînes de modèle, fonctions de flèche.
la source