Considere los siguientes bloques 3x3 que el algoritmo de cuadrados de marcha identificaría para cada celda (con ID etiquetada basada en 0):
0:
...
...
...
1:
...
...
\..
2:
...
...
../
3:
...
---
...
4:
..\
...
...
5:
/..
...
../
6:
.|.
.|.
.|.
7:
/..
...
...
8:
/..
...
...
9:
.|.
.|.
.|.
10:
..\
...
\..
11:
..\
...
...
12:
...
---
...
13:
...
...
../
14:
...
...
\..
15:
...
...
...
El objetivo de este desafío se le da una matriz 2D de ID de bloque, dibuje el diagrama de contorno completo al unir estas celdas más pequeñas. Tenga en cuenta que hay algunos casos repetidos (ej .: 0 y 15 visualmente son lo mismo)
Entrada
Su programa / función debe tomar como entrada una matriz rectangular de números enteros en 2D en el rango [0+a,15+a]
(donde a
es un desplazamiento arbitrario de su elección; esto le permite usar indexación basada en cero o indexación basada en 1 para los bloques). Esto puede ser de cualquier fuente deseada (stdin, parámetro de función, etc.).
Salida
Su programa / función debe generar una sola cadena que represente el diagrama de contorno completo. No debe haber espacios en blanco iniciales / finales adicionales, pero se permite una nueva línea final. No debe haber separación entre bloques adyacentes vertical u horizontalmente.
Tenga en cuenta que no tiene que hacer ningún tipo de tratamiento especial para los bloques que se asignan a una "silla de montar"; simplemente dibuje el bloque con la ID dada tal cual.
La salida puede ser a cualquier sumidero deseado (stdout, valor de retorno, etc.)
Ejemplos
Todos los ejemplos a continuación usan ID de bloque basados en 0.
case 1:
2 1
4 8
......
......
../\..
..\/..
......
......
case 2:
15 13 12 14 15
13 8 0 4 14
11 1 0 2 7
15 11 3 7 15
...............
......---......
...../...\.....
.../.......\...
...............
../.........\..
..\........./..
...............
...\......./...
.....\.../.....
......---......
...............
case 3:
12 12 12 8 4
0 0 0 0 2
0 0 0 2 7
0 2 3 7 15
........./....\
---------......
...............
...............
...............
............../
............/..
...............
.........../...
........./.....
......---......
...../.........
case 4:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
............
.........---
...\..../...
..\/...|./..
.......|....
...../.|....
/...|...\..\
....|.......
....|.\.....
............
---.........
...../\.....
case 5:
0 0 0 0 6 15 15
0 0 0 0 6 15 15
0 0 0 0 6 15 15
0 0 0 2 7 15 15
0 0 2 5 14 15 15
0 2 5 8 4 12 14
0 4 8 0 0 0 6
0 0 0 0 0 0 4
.............|.......
.............|.......
.............|.......
.............|.......
.............|.......
.............|.......
.............|.......
.............|.......
.............|.......
............/........
.....................
.........../.........
........./...........
.....................
......../../\........
....../../....\......
...............---...
...../../.........\..
.....\/............|.
...................|.
...................|.
....................\
.....................
.....................
Puntuación
Este es el código de golf; el código más corto en bytes gana. Se aplican lagunas estándar.
Respuestas:
Mathematica,
353326 bytesentrada
fuente
JavaScript (ES6), 195 bytes
Casos de prueba
Mostrar fragmento de código
fuente
Mathematica, 173 bytes
¡Pruébalo en el sandbox de Wolfram!
El "
\n
" debe ser reemplazado por una nueva línea real. La entrada está indexada en 1; por ejemplo, se convierte en el tercer caso de prueba{{13,13,13,9,5},{1,1,1,1,3},{1,1,1,3,8},{1,3,4,8,16}}
. El resultado es una cadena.La idea es básicamente la misma que la respuesta de Jenny_mathy : crea los dieciséis cuadrados tomando una cuadrícula de 3x3
"."
y reemplazando algunos de los caracteres, luego une los cuadrados, pero usando funciones un poco más cortas para hacerlo. (¡Gracias a alephalpha por recordarme queArrayFlatten
existe!)Es posible que esto se pueda hacer en menos bytes haciendo los cuadrados de forma inteligente en lugar de básicamente codificarlos, pero eso requeriría mucho más esfuerzo ...
fuente
{{16,14,13,15,16},{14,9,1,5,15},{12,2,1,3,8},{16,12,4,8,16}}
. Si lo intentó y todavía no funciona, ¿podría decirme qué problema tiene?Retina , 165 bytes
Pruébalo en línea! El enlace incluye el segundo ejemplo. Explicación: Las dos primeras etapas se convierten de decimal a hexadecimal, lo que permite eliminar los espacios. La tercera etapa luego triplica cada línea, dando a cada nueva línea un marcador separado. Estos marcadores luego atraviesan los dígitos hexadecimales, convirtiéndolos en el diagrama de contorno a medida que avanzan, hasta que alcanzan el final de la línea, en cuyo punto se eliminan.
fuente
Python 2 , 247 bytes
Pruébalo en línea!
-1 byte gracias a LeakyNun
fuente
SOGL V0.12 ,
10689 bytesPruébalo aquí! (que tiene un byte adicional
→
para facilitar la entrada. De lo contrario, esperaría que la matriz ya esté en la pila)fuente
Python 2,
196191181176 bytesPruébalo en línea!
Una función que toma una matriz de matrices de entradas y devuelve una cadena:
EDITAR: guardado 5 bytes asignando J, N; otros 10 bytes porque olvidé que la entrada ya se supone que es una matriz de matrices de entradas; y luego otros 5 bytes guardados por un corte más inteligente ...
La cadena concatenada de las 16 celdas 3x3 (144 bytes, omitiendo los saltos de línea) está codificada en longitud de ejecución a la cadena de 41 bytes:
o!j1cSe!f1g1aAbAbAa1h1iAbAbAc!c!d!iSk1f!k
donde cada elemento RLE
(cellType, length)
está codificado para el personajechr(32+16*cellType+length)
(es útil que la ejecución máxima sea 15; y esoord(' ')==32
es divisible por 16). Al decodificar, tomamos'\/|-.'[cellType]
como personaje imprimible.Nada particularmente inteligente después de eso ...
fuente
05AB1E , 61 bytes
Pruébalo en línea!
La primera mitad del patrón se puede comprimir como:
La segunda mitad debería ser:
Podemos duplicar verticalmente la primera mitad e insertar
binary 110 (1101110)
para2111111125
.Luego tomamos este patrón y lo dividimos en cinco, luego lo rellenamos con unos:
Ahora que tenemos nuestros bloques de construcción, las últimas partes simplemente reemplazan las entradas de la matriz con los bloques de construcción apropiados, juntan las filas e imprimen al usuario con símbolos reemplazados:
Puede publicar una explicación formal de la operación si alguien lo quiere, gracias.
fuente
Jalea , 64 bytes
Pruébalo en línea!
Esto utiliza una compresión ingenua y probablemente podría ahorrar muchos bytes con codificación de longitud de ejecución.
Cómo funciona
fuente