Descripción del desafío
En la métrica del taxi , una distancia entre dos puntos se define como:
Considere una matriz con solo ceros y unos:
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
Asignemos cada uno 1
a la distancia a la diferente más cercana 1
en la matriz (por supuesto, suponiendo que la distancia entre dos filas / columnas adyacentes es igual a 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
Para este desafío, dada una matriz, encuentre su mapa de distancias como se muestra arriba.
Ejemplos
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
Notas
- Puede tomar la entrada en cualquier formato razonable
- Aparte de
0
y1
puede elegir dos valores distintos - Puede suponer que una matriz no está vacía (contiene al menos una fila de longitud mayor o igual a 1), así como que es rectangular
- También puede suponer que hay al menos dos valores verdaderos presentes en la matriz (de lo contrario, la salida no está definida)
- Puedes escribir un programa completo o una función
- En lugar de devolver una nueva matriz, puede modificar una existente
- Este es el código de golf , así que haga que su byte cuente lo más bajo posible
code-golf
matrix
binary-matrix
shooqie
fuente
fuente
Respuestas:
MATL ,
2322 bytesPruébalo en línea! O verificar todos los casos de prueba .
Explicación
Para ver resultados intermedios, puede ser útil insertar
X#
(mostrar pila) entre dos declaraciones.fuente
t
sy noM
Taxi , 14652 bytes
Pruébalo en línea!
Supongo que ningún ser humano quiere intentar leer ese código, ¡así que pruébelo en línea con comentarios, etiquetas significativas y resultados más legibles!
Entrada: cadena que representa una matriz. La cadena debe estar compuesto por 3 personajes:
0
,|
representando rompe filas, y cualquier dígito mayor positivo de un (PDGTO). Me gusta usar8
. OP permite la entrada en cualquier formato razonable y creo que esto califica. La cadena no tiene que formatearse en una matriz rectangular, pero se supondrá que está alineada a la izquierda, sea lo que sea.Salida: Matriz de valores que muestran la distancia mínima de taxi desde cada uno
PDGTO
a su otro más cercanoPDGTO
.Ejemplo:
El segundo formato de salida es claramente mucho más fácil de leer, pero también agrega 7 bytes al programa y , después de todo, esto es código golf . Hubiera sido posible regresar al final y eliminar todos los ceros finales en lugar de simplemente rellenar los
0
valores, pero eso habría agregado aún más bytes y se consideró un costo inaceptable.Aquí está el texto del código sin golf con comentarios, mejores etiquetas y una salida más clara:
(Es lo mismo que obtienes con el enlace de arriba).
fuente
Python 3 + numpy , 102 bytes
Pruébalo en línea!
Toma la entrada como una
numpy
matriz.Python 3 , 127 bytes
Pruébalo en línea!
fuente
Perl 5 , 197 bytes
Pruébalo en línea!
fuente
$#
, básicamente ...JavaScript (ES6), 97 bytes
Toma entrada en la sintaxis de curry
(w)(a)
, donde w es el ancho de la matriz y a es una matriz plana de ceros y unos. Devuelve otra matriz plana.Casos de prueba
Este fragmento incluye una función auxiliar para formatear la salida para facilitar la lectura.
Mostrar fragmento de código
fuente
Octava, 59 bytes
Toma la entrada como una matriz 2D.
Pruébalo en línea!
Explicación:
Para cada ubicación de 1s que se encuentre en la matriz, configúrela en cero y calcule la transformación de la distancia de la cuadra de la ciudad de la matriz y finalmente configure la ubicación en la distancia calculada.
fuente
Python 3 con Numpy ,
106101 bytes5 bytes de descuento gracias a @notjagan
Función que ingresa un conjunto Numpy y sale modificando ese conjunto (que está permitido por defecto ).
Pruébalo en línea!
fuente
Jalea , 27 bytes
Pruébalo en línea!
fuente