Description du défi
En métrique de taxi , une distance entre deux points est définie comme:
Considérons une matrice avec uniquement des zéros et des uns:
0 0 0 1 0
1 0 0 0 0
0 0 0 0 0
1 0 0 1 0
1 0 0 0 0
Mappons chacun 1
à la distance au plus proche différent 1
dans la matrice (bien sûr, en supposant que la distance entre deux lignes / colonnes adjacentes est égale à 1):
0 0 0 3 0
2 0 0 0 0
0 0 0 0 0
1 0 0 3 0
1 0 0 0 0
Pour ce défi, étant donné une matrice, trouvez sa carte des distances comme indiqué ci-dessus.
Exemples
0 0 1
0 0 0
0 0 0
0 1 0
0 0 0
0 0 4
0 0 0
0 0 0
0 4 0
0 0 0
-----
0 0 0 0 0 0 1
0 1 0 1 0 0 0
1 1 0 0 0 0 1
0 0 1 0 0 0 0
0 0 0 0 0 1 0
0 1 0 0 0 0 0
1 0 0 0 0 0 0
0 0 0 1 0 0 1
0 0 0 0 0 0 2
0 1 0 2 0 0 0
1 1 0 0 0 0 2
0 0 2 0 0 0 0
0 0 0 0 0 3 0
0 2 0 0 0 0 0
2 0 0 0 0 0 0
0 0 0 3 0 0 3
-----
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
-----
1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1
22 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 22
-----
0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 9 0 0 0 0 0 0 0 0 2 0 0 0 4
0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0
-----
1 1
1 1
Remarques
- Vous pouvez prendre des contributions dans n'importe quel format raisonnable
- En dehors de
0
et1
vous pouvez choisir deux valeurs distinctes - Vous pouvez supposer qu'une matrice n'est pas vide (contient au moins une ligne de longueur supérieure ou égale à 1), ainsi qu'elle est rectangulaire
- Vous pouvez également supposer qu'il y a au moins deux valeurs véridiques présentes dans la matrice (sinon, la sortie n'est pas définie)
- Vous pouvez écrire un programme complet ou une fonction
- Au lieu de renvoyer une nouvelle matrice, vous pouvez modifier une matrice existante
- C'est du code-golf , alors faites en sorte que votre nombre d'octets soit aussi bas que possible!
code-golf
matrix
binary-matrix
shooqie
la source
la source
Réponses:
MATL ,
2322 octetsEssayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Pour voir les résultats intermédiaires, il peut être utile d'insérer
X#
(afficher la pile) entre deux états quelconques.la source
t
s et nonM
Taxi , 14652 octets
Essayez-le en ligne!
Je suppose qu'aucun humain ne veut essayer de lire ce code, alors essayez-le en ligne avec des commentaires, des étiquettes significatives et une sortie plus lisible!
Entrée: chaîne représentant un tableau. La chaîne doit être composée de 3 caractères:
0
,|
représentant sauts de lignes, et tout plus de chiffres positifs d'une (PDGTO). J'aime utiliser8
. OP permet la saisie dans n'importe quel format raisonnable et je pense que cela est admissible. La chaîne n'a pas à être formatée en un tableau rectangulaire, mais elle sera supposée alignée à gauche quelle qu'elle soit.Sortie: tableau de valeurs indiquant la distance minimale de la cabine de taxi de chacune
PDGTO
à l'autre la plus prochePDGTO
.Exemple:
Le deuxième format de sortie est clairement beaucoup plus facile à lire, mais il ajoute également 7 octets au programme et c'est du code-golf , après tout. Il aurait été possible de revenir en arrière à la fin et de supprimer tous les zéros de fin au lieu de simplement remplir les
0
valeurs, mais cela aurait ajouté encore plus d'octets et était considéré comme un coût inacceptable.Voici le texte du code non-golfé avec des commentaires, de meilleures étiquettes et une sortie plus claire:
(C'est la même chose que vous obtenez avec le lien ci-dessus.)
la source
Python 3 + numpy , 102 octets
Essayez-le en ligne!
Prend l'entrée comme un
numpy
tableau.Python 3 , 127 octets
Essayez-le en ligne!
la source
Perl 5 , 197 octets
Essayez-le en ligne!
la source
$#
, en gros ...JavaScript (ES6), 97 octets
Prend la saisie dans la syntaxe de curry
(w)(a)
, où w est la largeur de la matrice et a est un tableau plat de zéros et de uns. Renvoie un autre tableau plat.Cas de test
Cet extrait de code comprend une fonction d'aide pour formater la sortie pour la lisibilité.
Afficher l'extrait de code
la source
Octave, 59 octets
Prend l'entrée comme un tableau 2D.
Essayez-le en ligne!
Explication:
Pour chaque emplacement de 1 trouvé dans le tableau, réglez-le sur zéro et calculez la transformation de distance de bloc de ville du tableau et définissez enfin l'emplacement sur la distance calculée.
la source
Python 3 avec Numpy ,
106101 octets5 octets de réduction grâce à @notjagan
Fonction qui entre un tableau Numpy et sort en modifiant ce tableau (ce qui est autorisé par défaut ).
Essayez-le en ligne!
la source
Gelée , 27 octets
Essayez-le en ligne!
la source