Intro
Jouons au mini-golf! La balle de golf est représentée par un .
et le trou par un O
. Vous voulez obtenir un trou en un sur chaque trou, mais vous n'êtes pas bon à mettre. En fait, vous refusez de tenter de mettre en diagonale! Seulement en haut, en bas et de chaque côté.
Vous prévoyez de tricher en plaçant des pare \
- chocs supplémentaires et /
ainsi vous pouvez mettre la balle en un seul coup. La balle rebondit sur les pare-chocs à angle droit, comme indiqué sur cette image.
N'oubliez pas d'appeler votre tir! Dites-nous quelle direction vous mettez.
des trous
1: Le premier trou est facile, un coup droit! Aucun pare-chocs nécessaire pour placer ici.
Contribution:
. O
Production:
right
. O
2: Un autre élémentaire, un court virage. La balle est frappée du pare-chocs dans le trou.
Contribution:
.
O
Production:
left
/ .
O
ou
down
.
O /
3: Certains trous ont déjà des pare-chocs!
Contribution:
. \O
Production:
right
. \O
\/
ou
right
/ \
. /\O
4: Certains trous sont trop complexes!
Contribution:
/ \ \ /
/ . \ \ /
/ /\/ /\ \ /
/ / / \ \/
/ / /\ \ / \ /
\ \ / \ \/ \/
\ / /
/\ \//\ \ /
/ \ / \ \ \/
\ /\ \ / \ \
\/ \ \/ \ O/ \
/ \/
Sortie: (une solution possible, il en existe d'autres)
down
/ \ \ /
/ . \ \ /
/ /\/ /\ \ /
/ / / \ \/
/ / /\ \ / \ /
\ \ / \ \/ \/
/ \ / /
/\ \//\ \ /
\/ \ / \ \ \/
\ /\ \ / \ / \
\/ \ \/ \ O/ \
/ \ \/
\ /
Règles
- L' entrée est le mini-golf sur
STDIN
. - La sortie est la direction dans laquelle vous frappez la balle et le trou de mini-golf avec des pare-chocs nouvellement placés
STDOUT
. - Les pare-chocs existants ne peuvent pas être déplacés.
- Vous pouvez ajouter un nombre quelconque de pare-chocs pour résoudre un trou.
- Supposons qu'il existe des emplacements valides pour les pare-chocs à placer qui permettront au parcours d'être résolu en un putt.
- Le trou en sortie peut être plus grand que l'entrée.
- L'entrée peut être complétée par un espace blanc à la fin, mais veuillez spécifier dans votre réponse si vous faites cela.
- La sortie doit être correcte, mais peut comporter un espace blanc de début ou de fin.
- Votre programme devrait fonctionner pour tout trou valide. N'hésitez pas à poster vos cas de test aussi!
Notation
C'est du code-golf . Votre score est le nombre de caractères de votre programme. Le score le plus bas gagne!
right
, # 3, l'exemple 1 devrait êtredown
, et # 3, l'exemple 2 devrait êtreup
. Un défi intéressant, cependant!.
est la balle que vous frappez etO
c'est le trou. J'ai foiré l'exemple n ° 2, mais ils devraient être bons maintenant.Réponses:
Javascript (ES6) - 651 octets
Crée une fonction
G
qui accepte une chaîne (parcours de golf) en entrée et renvoie la solution de putting demandée. La chaîne d'entrée peut avoir ou non des lignes de début, des lignes de fin et des espaces de fin. La sortie n'aura pas d'espace blanc de début ou de fin.Le code développé est:
Le solveur part du principe que tout chemin à partir de la balle (trou) sera soit
Nous suivons le chemin de la balle dans les quatre directions. Si nous trouvons le cas 3, le problème est résolu. Si nous trouvons le cas 2, nous marquons l'emplacement de sortie de la balle. Si les quatre directions aboutissent au cas 1, nous convertissons le premier espace non pare-chocs le long d'une trajectoire en pare-chocs (si le problème est résoluble, un tel espace est toujours garanti d'exister) et réessayons. Le pare-chocs que nous convertissons aura le même type que le dernier pare-chocs que notre trajectoire a rencontré *. Si la balle est toujours coincée dans une boucle, nous répétons le processus autant de fois que nécessaire. Si le problème est résoluble, cette procédure est garantie de conduire à terme au résultat 2 ou 3.
(* Notez que si nous nous convertissons simplement à un pare-chocs fixe [disons
\
], il existe des cas extrêmement artificiels mais néanmoins possibles où une solution existe mais nous ne la trouverons pas.)Nous effectuons une trace similaire à partir du trou, conduisant au résultat 2 ou au résultat 3.
Si à la fois la trace de la balle et la trace du trou aboutissent au résultat 2, nous plaçons des pare-chocs à la périphérie du parcours qui relient les deux points de sortie (en fait, ces pare-chocs de périphérie sont placés indépendamment des résultats de la trace, pour raccourcir le code). Ceci complète la solution.
Cas de test et sorties
Dans
En dehors
Dans
En dehors
Dans
En dehors
la source
"/\\/\\\n\\.//\n// \\\n\\/ \no \\/"