Votre travail consiste à écrire un programme qui trouve le nombre optimal de mouvements nécessaires pour passer du coin inférieur gauche d'un rectangle au coin supérieur droit directement opposé.
Votre programme acceptera la saisie comme paire ordonnée (width, height)
. Ce seront les dimensions du rectangle avec lequel vous travaillerez. Votre programme créera un art ASCII de la solution (à utiliser .
pour le carré vide et #
pour une partie de la solution, X
pour le carré de départ) et comptera le nombre de mouvements nécessaires pour atteindre le point final. Les déplacements en diagonale ne sont pas autorisés. S'il existe plusieurs solutions, choisissez-en une pour la sortie.
Le programme le plus court en octets gagne.
Exemple
Contribution: (4, 5)
Production:
..##
..#.
.##.
.#..
X#..
Nombre de coups: 7
#
dans "la solution optimale" (quelle est la solution qui ne se déplace jamais vers la gauche ou vers le bas)?#
car il est illogique d'aller à gauche ou à descendre.Réponses:
05AB1E ,
2724 octetsCode:
Explication:
Essayez-le en ligne! . Utilise l' encodage CP-1252 .
la source
Rétine ,
5453 octetsPrend les entrées séparées par un saut de ligne et sort la grille de solution suivie du nombre de mouvements.
Essayez-le en ligne!
Explication
Transformez les deux entiers en autant de
.
s, c'est-à-dire convertissez-les en unaires.Cela construit une grille de
.
s, en faisant correspondre chacun.
à la hauteur unaire et en capturant la représentation unaire de la largeur. LeS
active le mode split qui renvoie les chaînes capturées, et le|\D
et_
s'assurent que tout le reste est supprimé de la chaîne.Cela transforme le dernier caractère de chaque ligne ainsi que la dernière ligne entière en
#
s.Cela utilise une tonne d'options pour convertir uniquement la première
#
de la dernière ligne enX
(nous devons nous assurer que seule la dernière ligne est affectée en raison des entrées de largeur 1).m
active le mode multi-lignes qui fait^
correspondre le début des lignes.-1=
indique à Retina d'effectuer la substitution uniquement lors du dernier match. Enfin,:
désactive le mode silencieux par défaut de sorte que la grille est imprimée sur STDOUT en tant que résultat intermédiaire.Enfin, nous comptons simplement le nombre
#
dans la chaîne, ce qui correspond au nombre de mouvements.la source
Pyke, 26 octets
Essayez-le ici
Ou 34 octets non compétitifs, ajoutez un nœud d'application avec un ast)
Essayez-le ici!
Ou 30 octets si les espaces sont autorisés comme remplissage
la source
Pyth,
322924 octetsEssayez-le en ligne!
Exemple d'entrée:
Exemple de sortie:
Comment ça fonctionne:
Tentative précédente:
Essayez-le en ligne!
Exemple d'entrée:
Exemple de sortie:
Comment ça fonctionne:
la source
AtMQ
. Cela affecte les deux valeurs àG
etH
.CJam,
3533 octetsPrend l'entrée dans le formulaire
width height
et affiche le nombre de déplacements sur la première ligne, suivi de la grille de solution.Testez-le ici.
Cela fonctionne également pour le même nombre d'octets:
la source
Rubis, 48 octets
Il s'agit d'une fonction anonyme qui, selon cette méta-publication, est acceptable, sauf si la question indique «programme complet». Je ne serais pas normalement pédant à ce sujet mais le problème est très simple et faire un programme serait une augmentation significative du score de%.
L'entrée est deux arguments. La valeur de retour est un tableau contenant la chaîne d'art ASCII et le nombre de
#
dans le chemin.En programme de test
Production
C'est juste une chaîne de h-1 rangées de points w-1, suivie d'un
#
et d' une nouvelle ligne. J'ai mis le#
à la fin afin d'utiliser un seul#\n
littéral pour les deux#
et la nouvelle ligne (le code contient une nouvelle ligne réelle plutôt qu'une séquence d'échappement.) La dernière ligne est ensuiteX
suivie de w-1#
.Il était plus court de décrémenter les valeurs de w et h pendant la génération de l'art ASCII, de sorte que le calcul final est simple
w+h
.la source
JavaScript (ES6), 60 octets
Usage
la source
MATL ,
282625 octetsEDIT (10 juin 2016): le lien ci-dessous inclut une modification (
5L
est remplacé parIL
) pour s'adapter aux changements de langueEssayez-le en ligne!
Explication
la source
Scala, 118 octets
la source
Haskell, 64 octets
Exemple d'utilisation:
Comment ça fonctionne:
la source
Java,
137132 octetsla source
Lua, 81 octets
Essayez-le en ligne!
Golfé:
Non golfé:
la source
Python, 48.
Pour l'utiliser, ajoutez
f=
avant la ligne ci-dessus et appelez-le comme ceci:Résultat:
la source