(Aleatoriamente inspirado por https://codegolf.meta.stackexchange.com/a/17272/42963 )
Dada una matriz rectangular de dígitos (es decir, 0 - 9
), genera las "piezas" de la matriz como si los dígitos estuvieran conectados entre sí formando una sola pieza, en orden ascendente por los dígitos. Se garantiza que las piezas se conecten solo de forma ortogonal; ninguna pieza se conectará diagonalmente. Solo habrá un máximo de 10 piezas (es decir, una 3
pieza no aparecerá dos veces en la misma matriz).
Por ejemplo, dada la matriz
0 1 1 1
0 0 1 2
3 3 2 2
Las siguientes son las piezas y un resultado de ejemplo:
0
0 0
1 1 1
1
2
2 2
3 3
El espacio es importante para mantener la forma de las piezas, pero las piezas no necesariamente necesitan espacio interior. Las piezas en sí mismas deben diferenciarse de alguna manera consistente (por ejemplo, una nueva línea entre las piezas, asegurándose de que cada una sea un personaje diferente, etc.). Además, no se permiten espacios en blanco extraños (por ejemplo, líneas nuevas o columnas iniciales). Por ejemplo, lo siguiente también sería válido:
0
00
111
1
2
22
33
o
#
##
###
#
#
##
##
Pero lo siguiente no sería (tenga en cuenta los espacios finales detrás de la 0
s):
0
0 0
Las rotaciones o reflejos tampoco están permitidos. Por ejemplo, la salida
1
111
para la matriz anterior también es inválida.
Las piezas de la matriz pueden tener agujeros o ser solo un elemento:
0 0 0 1
0 2 0 1
0 0 0 3
O, la pieza puede ser la matriz completa:
0 0 0
0 0 0
Aquí hay un caso de prueba más grande y complicado:
1 1 1 1 1 2 2
3 4 4 4 2 2 2
5 5 4 4 2 0 0
5 6 6 6 6 7 7
5 6 8 8 6 6 7
9 6 6 6 7 7 7
Y un ejemplo de salida:
00
11111
22
222
2
3
444
44
55
5
5
6666
6 66
666
77
7
777
88
9
Reglas y E / S
- La entrada y salida se pueden dar por cualquier método conveniente .
- Puede imprimirlo en STDOUT o devolverlo como resultado de una función.
- Un programa completo o una función son aceptables.
1
Se requiere un espacio en blanco inicial para mantener la forma (p. Ej., La forma de "T" del ejemplo), se necesita un espacio en blanco consistente para distinguir las piezas y se permite una nueva línea final al final, pero no se permite ningún otro espacio en blanco.- Puede suponer con seguridad que las piezas están numeradas
0
de formaN
contigua, lo que significa que (por ejemplo)3
no se omitirán en una matriz de seis piezas. - Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
-1
o un espacio que representa un espacio vacío, o la ausencia de un elemento si es posible)?0
como valor de relleno? Por lo tanto, cada pieza se generará con el resto de los valores en la matriz establecida en0
-1
o algún otro valor en lugar de nada / espacio en blanco no estaría bien.' '
usarse el espacio ( ) en ese caso?Respuestas:
05AB1E ,
2019 bytes-1 byte gracias a @ Mr.Xcoder .
Produce listas 2D de piezas (con
1
caracteres y espacios" "
) por nueva línea.Pruébelo en línea o verifique todos los casos de prueba o imprima con letra bonita todos los casos de prueba .
Explicación:
fuente
Haskell,
133132129 bytesToma la matriz como una lista de cadenas y devuelve una lista de la lista de cadenas.
Pruébalo en línea!
fuente
Jalea , 18 bytes
Pruébalo en línea!
Devuelve una lista de piezas, donde
1
representa una parte de una pieza y' '
está rellenando.' '
Se eliminan los s finales .fuente
ẎQ=€
debería hacerlo, aunque necesitamos las piezas en orden ascendente, entonces9Ż=€
(a menos que no debamos incluir "piezas inexistentes" en cuyo casoẎQṢ=€
)9Ż=€
que no funcionará (creo que "los espacios en blanco [...] extraños no están permitidos" también se extienden a los arreglos, por eso estoy recortando).Python 3 ,
271209206183176172191 bytesPruébalo en línea!
Editar: Un poco de limpieza y -5 gracias a @ Jonathan Frech .
Editar:
-3-26, una vez más gracias a @ Jonathan Frech .Editar: -7 nuevamente gracias a @ Jonathan Frech .
Editar: +19: Como lo señaló @ nimi, la salida anterior tenía un formato incorrecto.
La entrada es matriz como lista de listas:
La salida es una lista de matrículas:
Sin golf:
fuente
Python 2 ,
173172165 bytesPruébalo en línea!
-15 bytes de una observación de nimi .
En forma de programa, toma como entrada una lista de listas de caracteres individuales; salidas imprimiendo las piezas encontradas usando su personaje.
fuente
C # (.NET Core) ,
258, 238 bytesSin LINQ
EDITAR: ¡Encarnación de la ignorancia señalando mejores declaraciones de var! Ty ty.
Pruébalo en línea!
fuente
Python 2 , 291 bytes
Pruébalo en línea!
Espera una picadura delimitada por comillas como entrada. Un porcentaje semi-ridículo del código está dedicado a manejar entradas sin espacios separados / sin espacios.
Explicación sin golf:
fuente
Retina , 75 bytes
Pruébalo en línea! Explicación:
Agregue un dígito a la entrada. Esto representa el contador de bucle. La nueva línea simplifica la eliminación del espacio en blanco final.
Inhibe la salida predeterminada y repite exactamente 10 veces.
Avanzar el dígito del bucle.
Genere el resultado del resto del script pero luego restaure el búfer.
Reemplace todos los dígitos que no coincidan con los dígitos del bucle con espacios. (Debido a que esto usa una búsqueda anticipada y no hay nada que mirar hacia adelante en este punto, esto también reemplaza el dígito del bucle).
Elimine todo el espacio en blanco al final.
Eliminar todas las líneas en blanco.
Repita siempre que ninguna línea comience con un dígito ...
... borra el primer caracter en cada línea.
Si queda algo, entonces agregue una nueva línea para separar cada forma de la siguiente. (Esto se hace para evitar nuevas líneas perdidas por dígitos faltantes).
fuente
Carbón , 43 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Lea la entrada en una matriz. (Esto podría eliminarse si usara un formato de entrada feo).
Recorre los 10 dígitos.
Obtenga las filas que contienen esos dígitos.
Verifique que se haya encontrado el dígito (para evitar generar nuevas líneas falsas).
Desactiva el relleno automático.
Pase sobre las filas encontradas.
Pase sobre cada columna ...
... si el carácter de entrada actual es igual al dígito del bucle actual, imprímalo o mueva el cursor hacia la derecha.
Ir al inicio de la siguiente fila. El uso de comandos de movimiento como este le permite a Charcoal recortar la salida en ambos lados.
Volcar y despejar el lienzo listo para el siguiente dígito. Esto permite que los diferentes dígitos tengan diferentes cantidades de recorte.
Intenté un enfoque programático pero pesaba 47 bytes, aunque también habría sido de 43 bytes durante un breve período de tiempo cuando se
Equals
vectorizó:Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Desactiva el relleno automático.
Lea la entrada en una matriz.
Recorre los 10 dígitos.
Compare cada carácter con la entrada y cree una matriz booleana, pero luego filtre las filas sin coincidencias.
Pase por las filas restantes y corte desde la primera coincidencia en cualquier fila hasta la última coincidencia en la fila actual, luego asigne la matriz booleana a dígitos o espacios, que luego se imprimen implícitamente como una matriz de cadenas.
fuente
Wolfram Language 101 bytes
Tiene que haber una forma mucho más eficiente de lograr esto.
fuente
Perl 5, 97 bytes
TIO
Explicación
fuente
APL (Dyalog Unicode) , SBCS de 38 bytes
Función de prefijo tácito anónimo. Toma una matriz numérica como argumento y devuelve una lista de cadenas de listas. Cada lista de cadenas representa una pieza con
1
s separados por espacios . Los espacios iniciales e internos (pero no finales) son espacios.Pruébalo en línea!
∪∘,
Los elementos únicos de la matriz ravel (aplanada)⊂{
…}¨
Para cada uno de esos⍵
, llame a la siguiente función con toda la matriz como⍺
:⍺=⍵
indicar dónde está el número de esa pieza en la matriz⊢
rendimiento que (se separa2
de⍺
){
...}⍣2
aplique la siguiente función dos veces (⍵
es la matriz booleana):∨/
máscara para filas con al menos una1
(iluminada reducción OR por fila)⍵⌿⍨
usar eso para filtrar las filas⍉
transponer (entonces hacemos esto también en las columnas, luego transponemos de regreso)' '@~
reemplazar con espacios en las posiciones donde no (es decir, donde0
)⍕
formatear como matriz de caracteres↓
dividido en una lista de cadenas' +$'⎕R''
PCRE reemplaza los espacios finales (cualquier número de espacios seguidos de un final de línea) con nadafuente
Japt , 29 bytes
Pruébalo en línea!
Actualizado para cumplir con un formato de salida más estricto.
Sale como una lista de piezas con cada pieza representada por una lista de líneas, usando 2 como el carácter de relleno.
Explicación:
fuente
false
de las listas internas. Aquí un pastebin para que pueda explicar mejor lo que se supone que es la salida. Siéntase libre de pedirle a OP que aclare, pero por lo que entiendo del desafío, todos los espacios en blanco finales no deberían estar allí en la salida.Python 3 , 133 bytes
Pruébalo en línea!
Toma una cadena separada por una nueva línea, devuelve una lista de cadenas separadas por una nueva línea. Usos
textwrap.dedent
para deshacerse de los espacios principales.fuente
Jalea , 19 bytes
Pruébalo en línea!
Un enlace monádico que toma la matriz como entrada y devuelve una lista de una lista irregular por pieza. El pie de página muestra esto con precisión, pero creo que la salida sin eso es consistente con las reglas de pregunta.
fuente