Este es un 3x3
rompecabezas ASCII:
_____ _____ _____
| _| |_ |
| (_ _ _) |
|_ _|_( )_|_ _|
| (_) |_ _| (_) |
| _ _) (_ _ |
|_( )_|_ _|_( )_|
| _| (_) |_ |
| (_ _) |
|_____|_____|_____|
Este también es un 3x3
rompecabezas ASCII:
_____ _____ _____
| |_ _| |
| _ _) (_ _ |
|_( )_|_ _|_( )_|
| _| (_) |_ |
| (_ _ _) |
|_ _|_( )_|_ _|
| (_) |_ _| (_) |
| _) (_ |
|_____|_____|_____|
Cada línea en un rompecabezas ASCII (excluyendo las cajas de borde, es decir, las piezas literalmente en los bordes) consta del siguiente patrón:
_ _ _
_( )_ _ _ _( )_ _ _ _( )_
|_ _| (_) |_ _| (_) |_ _|
_) (_ _ _) (_ _ _) (_
|_ _|_( )_|_ _|_( )_|_ _| ...
(_) (_) (_)
Dados 2 enteros H
y W
dónde H
está la altura (cantidad vertical) y W
es el ancho (cantidad horizontal) H
y W
se >1
generan un posible HxW
rompecabezas ASCII.
Ejemplos
Caso de prueba 1
Entrada: 2, 4
Salida:
_____ _____ _____ _____
| |_ _| |_ |
| _ _) (_ _ _) |
|_( )_|_ _|_( )_|_ _|
| _| (_) |_ _| (_) |
| (_ _) (_ |
|_____|_____|_____|_____|
Caso de prueba 2
Entrada: 4, 4
Salida:
_____ _____ _____ _____
| |_ _| |_ |
| _ _) (_ _ _) |
|_( )_|_ _|_( )_|_ _|
| _| (_) |_ _| (_) |
| (_ _ _) (_ _ |
|_ _|_( )_|_ _|_( )_|
| (_) |_ _| (_) |_ |
| _ _) (_ _ _) |
|_( )_|_ _|_( )_|_ _|
| _| (_) |_ _| (_) |
| (_ _) (_ |
|_____|_____|_____|_____|
Caso de prueba 3
Entrada: 3, 5
Salida:
_____ _____ _____ _____ _____
| |_ _| |_ _| |
| _ _) (_ _ _) (_ _ |
|_( )_|_ _|_( )_|_ _|_( )_|
| _| (_) |_ _| (_) |_ |
| (_ _ _) (_ _ _) |
|_ _|_( )_|_ _|_( )_|_ _|
| (_) |_ _| (_) |_ _| (_) |
| _) (_ _) (_ |
|_____|_____|_____|_____|_____|
Caso de prueba 4
Entrada: 2, 2
Salida:
_____ _____
| _| |
| (_ _ |
|_ _|_( )_|
| (_) |_ |
| _) |
|_____|_____|
Aclaraciones
- La altura y el ancho de cada pieza del rompecabezas no deben ampliarse o reducirse.
- Con
H
yW
siendo mayor que uno, las dimensiones más pequeñas posibles son2x2
(ver IO 4). - Puede tener un programa completo o una función.
- La entrada será de 2 líneas con
H
la primera yW
la segunda si está utilizando una función que puede tener en los parámetros. - Salida a stdout (o algo similar).
- Este es el código de golf, por lo que la respuesta más corta en bytes gana.
Respuestas:
JavaScript (ES6) 272
277 271Editar corrección de errores
Editar 2 guardados 6 bytes thx @ L.Serné
Editar 3 corrección de errores nuevamente
Menos golf
Prueba
fuente
for(t=z(' _____',0,0)+z('|_ _| ',2,--h)+z(b=' _) (_ _ ')+z(c='|_ _|_( )_',0);--h;a='|_ _| (_) ')
Esto ahorra 4 comas, por lo que termina con solo 273 caracteres. EDITAR: El fragmento de prueba todavía tiene errores ...t=...
dentro de for, falla para h == 2. Es exactamente el error que solucioné hoy.undefined
resultado fue declarara
en la última parte delfor
bucle. Cambié un poco el código y terminé con esto. Debería poder integrar eso con la evaluación para otro 2B guardar.(w,h,z=(s,q=3,i=h)=>'| '.slice(0,q)+s.repeat(w).substr(i%2*6+q,w*6-2*q+1)+' |\n'.slice(~q),a='|_ _| (_) ')=>{for(t=z(' _____',0,0)+z('|_ _| ',2,--h)+z(b=' _) (_ _ ')+z(c='|_ _|_( )_',0);--h;)t+=z(a,2)+z(b)+z(c,0);return t+z(a,2)+z(' _) (_ ')+z('|_____',1)}
(276 B).Python, 513 bytes
Quizás sea más un ejercicio de ofuscación que de golf, este funciona decidiendo a qué personaje
(x,y)
va cada coordenada en lugar de construir cada patrón por cuerda. Sin golf pareceLos patrones en sí se parecen
podemos ver esto como una tabla de búsqueda de enteros con columnas tomadas mod 6 y filas mod 3
Esta estrategia de combinar diferentes patrones no me ha funcionado realmente porque expresarlos es bastante engorroso (aunque creo que podría haber jugado más al golf) y porque los casos extremos requieren tantos caracteres para solucionarlos. Estoy poniendo esto de todos modos porque me tomó un minuto y podría ser de interés.
fuente
Mathematica, 384 bytes
Función sin nombre que toma un par ordenado de enteros como argumento y devuelve una cadena que contiene líneas nuevas apropiadas. Con espacios y líneas nuevas agregadas:
fuente
Lote,
562528 bytesProbó resistencia al golf, ya que la repetición tendía a costar demasiados bytes para eliminar, por ejemplo, paso manualmente el número de línea mod 3 porque es demasiado costoso de calcular. Editar: Además, inadvertidamente jugué golf extra
|
cada tercera línea, lo cual es incorrecto. Arreglar esto realmente me ahorró 2 bytes (4 bytes en mi versión original). Explicación:a
contiene varios bits de rompecabezas. La:t
función los intercambia sobre cada conjunto de tres filas, luego extrae las subcadenas requeridas que la:c
función luego repite en pares, pero elimina la primera columna siw
es impar. Los casos de borde izquierdo y derecho se manejan antes de que se envíe la fila.El otro caso de borde es la primera fila en la que las!
s se cambian a espacios en lugar de|
s (el código evita|
s porque son difíciles de manejar en Batch).fuente
Befunge,
263243 bytesPruébalo en línea!
La forma en que esto funciona es iterando sobre las coordenadas x, y del área que queremos generar, y asignando esos valores x , y a las coordenadas u , v en el patrón del rompecabezas (almacenado en las primeras tres líneas del campo de juego). Este mapeo se logra con las siguientes fórmulas básicas:
La coordenada u se repite cada 12 columnas, pero también debe compensarse con 6 cada 3 filas. La coordenada v se repite cada 3 filas, pero agregamos
y==0
al valor para que la primera fila se pueda representar como un caso especial. Sin embargo, para manejar los bordes, necesitamos introducir un valor booleano adicional, e , que es cierto para varias ubicaciones de bordes, y que ajusta las fórmulas de la siguiente manera:Por lo tanto, si estamos en un borde, agregamos 4 a la coordenada v para usar el patrón de borde más simple en las líneas 5 a 7. Y ahora también necesitamos modificar la coordenada u por 6 en lugar de 12, ya que este patrón de borde Se repite cada 6 columnas.
En cuanto al valor e en sí, eso requiere una fórmula bastante compleja, ya que las ubicaciones de los bordes abarcan un área algo irregular del borde del rompecabezas.
Sin entrar en demasiados detalles, el desglose básico es que elr coincide con las ubicaciones de los bordes a lo largo de los bordes izquierdo y derecho, mientras que etb coincide con las ubicaciones a lo largo de los bordes superior e inferior.
fuente
JavaScript (ES6), 285 bytes
Este es un puerto de mi respuesta Batch, solo para ver si compite con la respuesta de @ edc65. La cadena molestamente larga contiene piezas de rompecabezas. Las primeras seis piezas representan dos filas de una columna del interior del rompecabezas. La séptima pieza se usa para la penúltima línea del rompecabezas, en lugar de la cuarta pieza. La octava pieza se usa en la segunda línea de la sierra de calar, en lugar de la quinta pieza, y también cumple una doble función como el borde izquierdo de la sierra de calar. La novena pieza es la última línea del rompecabezas.
fuente