Défi
Vous avez donné une carte à un ami qui ressemble un peu à ceci:
|
/
|
/
|
\
|
\
D
Une carte simple qui commence en haut et se termine en bas. Malheureusement, votre ami ne comprend pas. Pouvez-vous décoder la carte pour qu'il puisse la lire?
Contribution
L'entrée est une chaîne de caractères consistant en |
, /
, \
, D
, ^
, Y
, (espace) , et les nouvelles lignes.
|
dit de rester dans la même colonne.\
indique de se déplacer vers la colonne vers la droite et vers le bas 1./
indique de se déplacer vers la colonne vers la gauche et vers le bas 1.D
marque la destination.^
(le cas échéant) indique une division du chemin.Y
(le cas échéant) raconte une jonction de chemins. Traitez-le comme un|
.
L'entrée sera arrangée de façon à faire une sorte de chemin:
|
|
\
|
^
/ \
/ |
D |
Il y aura toujours un espace entre deux chemins, et tous les chemins rejoindront ou atteindront la dernière ligne de l'entrée. Il n'y aura qu'un seul partage par carte. Il n'y a pas de limite à la longueur de la carte d'entrée. Il n'y aura jamais plus de deux chemins.
Production
La sortie doit être une chaîne de directions.
- « L » devrait dire à votre ami de déplacer L TEF et prendre 1 pas en avant.
- " R " devrait dire à votre ami de se déplacer vers la droite et de faire un pas en avant.
- " F " devrait dire à votre ami d'avancer d'un pas.
Pour l'exemple de carte d'entrée, la sortie serait la suivante:
F F L F R R R
Notez que votre ami commence en haut de la carte et fait face vers le bas. Donnez les directions de son point de vue. Pour une instance de "^", votre programme doit pouvoir choisir le chemin qui mène à la destination (D). Si les deux chemins se recombinent, votre programme doit choisir le chemin le plus droit (celui avec le plus de |
s) à suivre. Des directives doivent être séparés par des espaces, et doivent se terminer sur D .
Exemples
Contribution
|
|
\
\
^
/ |
| |
\ |
\ \
\ \
\ /
Y
D
Production
F F L L L F F F L L R F
Puisque le chemin le plus à gauche ne contient que 1 |
, nous utilisons le chemin le plus à droite qui en a 3.
Contribution
\
|
/
|
\
|
/
D
Production
L F R F L F R
Contribution
/
\
/
\
^
\ \
D \
Production
R L R L R L
Autres détails
- C'est le golf de code, donc la personne avec le code le plus court d'ici mercredi 19 août prochain, gagne.
- Commentaires constructifs bienvenus et grandement appréciés.
- Partiellement inspiré par A Map to Hidden Treasure
- N'hésitez pas à changer le titre en quelque chose de plus créatif.
- Si vous trouvez des erreurs que j'ai faites, corrigez-les.
- Et bien sûr, amusez-vous.
Je vous remercie!
Un peu tard, peut-être, mais UndefinedFunction est le gagnant du codage en JavaScript! Merci à tous ceux qui sont entrés. Aucune autre inscription ne sera acceptée.
L L
, ce qui, je pense, devrait l'êtreL L L
. L'exemple avec aY
toujours un1
à la fin et semble également avoir d'autres erreurs. J'ai lu la carte commeF F R R R F F F R R L F
si je comprenais bien les règles.L
pour les^
deux et deuxL
pour les deux/
? Et pourquoi en avez-vous ajouté deux de plusF
à la fin de l'Y
exemple?Réponses:
Javascript (ES6),
261248252248212 octetsPuisqu'un seul fractionnement doit être pris en charge:
Cependant, 240 octets et nous pouvons traiter plusieurs divisions:
Les deux programmes définissent des fonctions anonymes.
Pour l'utiliser, donnez un nom aux fonctions en ajoutant
f=
avant le code.Ensuite, ils peuvent être appelés avec
Explication
(obsolète, mais toujours le même concept. Pour la solution à plusieurs divisions)
Remarques
Toutes les barres obliques inverses (
\
) dans l'entrée sont échappées en tant que\\
, afin que javascript puisse les reconnaître.Les deux sorties contiennent un espace de fin.
la source
PHP,
634631607396382381347338330337324 octetsMon tout premier golf alors soyez doux. Tous les conseils sont très appréciés.
Explication courte:
J'ai un nombre qui est 0 si l'entrée n'a qu'un seul chemin. Lorsque le chemin se divise, le nombre est de 1 pour le chemin de gauche et de 2 pour le chemin de droite. Après avoir défini les deux chemins (ou un seul), je vérifie quel chemin a le plus de "F".
Version non golfée:
Journal:
économisé 36 octets grâce à Kamehameha.
Enregistré de nombreux octets en modifiant un peu la logique.
Économisé 42 octets grâce à axiac.
Remplacé chaque if par des opérateurs ternaires.
la source
$a=$b='';
au lieu de -$a='';$b='';
Enregistre environ 3 octets.$a=$a.'L ';
peut être réduite à$a.='L '
. Vous semblez l'avoir fait à quelques endroits. Cela économisera environ 6 octets :)foreach($e as$i)
); J'ai testé cela et cela semble bien fonctionner.as
de laforeach
, les espaces entreecho
et le nom de la variable peuvent être supprimés pour que vous l'ayezecho$b
. En outre, deux tests d'égalité peut être trop courte,$c==0
pourrait être!$c
et si tel est le cas, vous pouvez initialiser$c
à''
avec$a
et$b
!PHP, 281 octets
C'est le résultat de deux itérations de golf. La version non golfée est:
Il est assez golfé et est apparu comme une amélioration du programme de golf suivant (312 octets):
C'est la version golfée de l'original:
Exemple d'exécution:
Il gère également plusieurs fourches correctement (besoin de se joindre avant la prochaine fourche afin d'avoir au maximum deux branches à tout moment). J'ai demandé plusieurs fourchettes dans un commentaire mais le code était déjà fait lorsque la réponse ("non nécessaire") est arrivée.
Le code complet avec la suite de tests et plus de commentaires peuvent être trouvés sur github .
la source