Introducción
A veces, mis cajas son demasiado pequeñas para caber en ellas. ¡Necesito que hagas un expansor de caja! Entonces, ¿qué hace que una caja sea una caja en este desafío?
OOOO
O O
O O
O O
OOOO
Las esquinas de la caja son siempre espacios. La caja en sí puede estar hecha del mismo personaje. Ese personaje puede ser cualquier personaje ASCII imprimible , excepto un espacio. Entonces, esos son los personajes:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Las longitudes laterales del cuadro de arriba son 4, 3 . Puede suponer que la longitud del lado es siempre positiva . Eso significa que esta es la caja más pequeña que necesita manejar:
#
# #
#
Para expandir un cuadro, debe incrementar la longitud de cada lado. Veamos esto, paso a paso, con el ejemplo anterior. Primero tomamos el lado superior de la caja, que es:
OOOO
Expandimos esto en uno, así obtenemos:
OOOOO
Esta es la parte superior e inferior de la caja ahora. Después de eso, hacemos lo mismo con los lados a la izquierda y a la derecha:
O
O
O
Se convierte en:
O
O
O
O
Ahora volvemos a montar la caja, que da como resultado:
OOOOO
O O
O O
O O
O O
OOOOO
La tarea
Dado un cuadro, amplíelo en 1. El cuadro se puede dar en varias líneas o en una matriz.
Casos de prueba
OOOO OOOOO
O O > O O
OOOO O O
OOOOO
XXXXXX XXXXXXX
X X > X X
X X X X
XXXXXX X X
XXXXXXX
~ ~~
~ ~ > ~ ~
~ ~ ~
~~
Este es el código de golf , por lo que gana el envío con la menor cantidad de bytes.
Respuestas:
V ,
65 bytesPruébalo en línea!
Esto es en realidad un byte más largo de lo que debería ser. Debería haber sido:
Pero esto tiene un error desconocido. :(
Explicación:
fuente
ä
es el operador duplicado (esencialmente "y" y "p" juntos en un byte) también loäê
es "columna duplicada"Vim, 7 bytes
donde ♥ es Control-V.
fuente
YP
ambos tiempos para mantener la consistencia?p
mientras grababa la animación, así que me quedé con ella cuando transcribí la respuesta. ¿Importa? > _>;<C-v> G
yYP
. Hace que mi idioma se sienta barato. : /JavaScript (ES6),
575352 bytesExplicación: La primera expresión regular duplica la segunda columna y la segunda expresión duplica la segunda fila, ampliando así el cuadro como se desee. Editar: Guardado 4 bytes gracias a MartinEnder ♦.
fuente
Python,
4942 bytesLambda anónima:
-7 de xnor
Versión previa:
D es una función que duplica el segundo elemento de una secuencia.
fuente
lambda L:[s[:2]+s[1:]for s in L[:2]+L[1:]]
.map(D,D(s))
Retina , 20 bytes
El recuento de bytes asume la codificación ISO 8859-1.
Pruébalo en línea! (Hay varias líneas adicionales que permiten un conjunto de pruebas donde los casos de prueba están separados por dos avances de línea).
Explicación
1
es un límite que restringe a Retina para aplicar la sustitución solo al primer partido que encuentre.¶
coincide con un salto de línea simple, por lo que solo debemos considerar reemplazar el salto de línea al final de la primera línea. Se reemplaza con¶$%'¶
, donde$%'
inserta la línea completa después del partido (un elemento de sustitución específico de Retina). Por lo tanto, esto duplica la segunda línea.Aquí,
%
está el modo por línea, por lo que cada línea se procesa individualmente, y las líneas se unen nuevamente después.2=
También es un límite. Éste significa "aplicar la sustitución solo al segundo partido". La coincidencia en sí es simple, un solo carácter y la sustitución lo duplica. Por lo tanto, esta etapa duplica la segunda columna.fuente
Haskell, 24 bytes
Utiliza la idea de RootTwo de duplicar la segunda fila y columna. El
map f
hace esto para cada fila, y elf.
entonces hace esto para las filas.fuente
PowerShell v2 +,
575352 bytesLigeramente similar al de Neil respuesta JavaScript . El primer reemplazo coincide con el comienzo de la línea y los siguientes dos caracteres, y los reemplaza con el primer carácter y el segundo carácter dos veces. En lugar de un segundo reemplazo, se intercambia por indexación de matriz para duplicar la segunda línea. Toma la entrada como una matriz de cadenas. Los cortes de matriz resultantes se dejan en la tubería y la impresión es implícita.
Guardado 4 bytes gracias a Martin.
Algunos ejemplos:
fuente
Brachylog ,
2826 bytes2 bytes gracias a Fatalize.
Pruébalo en línea!
fuente
MATL , 12 bytes
La entrada es una matriz de caracteres 2D, con punto y coma como separador de filas. Por ejemplo, el primer caso de prueba tiene entrada
Pruébalo en línea! Casos de prueba 1 , 2 , 3 .
Explicación
El código hace lo siguiente dos veces: repita la segunda fila de la matriz y transponga.
Para repetir la segunda fila de una matriz
m
×n
, el vector[1 2 2 3 ... m]
se usa como índice de fila. Este vector se genera de la siguiente manera: rango[1 2 3 ... m]
, adjuntar otro2
, ordenar.fuente
Pyth , 10 bytes
Pruébalo en línea!
fuente
SED
69 19(14 + 1 para -r) 15fuente
/.\(.\)/\0\1;2p
?2p
, pensé que había una manera de hacerlo, pero no pude encontrarlo. ¡Gracias!\0
referencia, ya que comienzan en 1. El manual en línea de GNU sed no dice nada. Sin embargo, usar&
es, creo, equivalente y más corto.\0
entonces?CJam , 14 bytes
Similar a mi respuesta MATL , pero repite la penúltima fila en lugar de la segunda.
Pruébalo en línea!
Explicación
fuente
K, 15 bytes
Toma la entrada como una matriz de caracteres:
Aplique una función dos veces (
2{…}/
) que proporciona la transposición (+
) del argumento correcto indexado (x@
) mediante la decodificación incremental de longitud de ejecución (&
) de uno más (1+
) una lista de las ubicaciones igual a 1 (1=
) en el rango de 0 a (!
) el tamaño de la dimensión exterior del argumento correcto (#x
).Paso a paso,
Pruébalo aquí con OK.
fuente
APL,
1715 bytesPrueba:
Explicación:
fuente
⌽⍉
o⊖⍉
, pero en este caso no importa.ListSharp , 326 bytes
yo definitivamente que añadir el anidamiento de funciones, pero esto funciona muy bien
comenta si quieres una explicación
fuente
JavaScript,
160146141 bytesfuente
Dyalog APL , 14 bytes
Por ejemplo para
encontramos los índices; {1, 2, 3} para las filas y {1, 2, 3, 4} para las columnas. Ahora soltamos los elementos iniciales para obtener {2, 3} y {2, 3, 4}, y luego anteponemos con {1, 2}, dando {1, 2, 2, 3} y {1, 2, 2, 3, 4}. Finalmente, usamos esto para seleccionar filas y columnas, duplicando simultáneamente la fila 2 y la columna 2.
TryAPL en línea!
fuente
Ruby, 46 bytes
Solución muy sencilla, tomando la entrada como un conjunto de líneas. No me gustan los
insert
s duplicados , así que intentaré jugarlo.fuente
C #,
127124bytesCompila a un
Func<List<string>, List<string>>
.Versión formateada:
fuente