Dado un hexágono de arte ASCII como entrada, salida uno cuyos lados son todos una unidad más larga.
_____
____ / \
/ \ / \
/ \ / \
\ \ => \ \
\ / \ /
\____/ \ /
\_____/
Los hexágonos de entrada tendrán una simetría de 180 grados, pero de lo contrario los lados pueden tener diferentes longitudes. Arriba, las longitudes laterales (2, 4, 3) se agrandan a (3, 5, 4). Las longitudes laterales serán distintas de cero.
Los hexágonos están hechos de guiones bajos _
, barras diagonales /
y barras diagonales inversas \
. Tenga en cuenta que de los bordes horizontales (hechos con guiones bajos), el borde superior está en su propia línea pero el borde inferior no.
I / O
Voy a ser riguroso y requeriré un formato de arte científico aquí: la entrada y la salida deben ser una cadena con líneas nuevas que representen la imagen, no una lista de líneas. Por supuesto, su código puede imprimir cada línea a su vez para producir la imagen, o leer STDIN una línea una vez para ingresar si su idioma puede hacerlo.
Detalles
La entrada puede incluir una nueva línea final opcional si lo desea, pero de lo contrario no tendrá líneas vacías. Puede elegir no tener espacios finales en la entrada o espacios para rellenar cada línea a la misma longitud (la de la línea más larga).
La salida debe estar al ras del borde izquierdo de la pantalla, como la entrada. Puede tener nuevas líneas adicionales arriba y abajo, así como espacios finales.
Casos de prueba
Entrada seguida de salida.
_
/ \
\_/
__
/ \
/ \
\ /
\__/
____
/ \
/ \
\ \
\ /
\____/
_____
/ \
/ \
/ \
\ \
\ /
\ /
\_____/
_
/ \
/ /
/ /
/ /
/ /
\_/
__
/ \
/ \
/ /
/ /
/ /
/ /
\ /
\__/
Tabla de clasificación
<iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=185760" width="100%" height="100%" style="border: none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>
IEnumerable
de caracteres?Respuestas:
Stax , 28 bytes
Ejecutar y depurarlo
Parece que debería haber una manera de hacerlo principalmente con expresiones regulares, pero todavía estoy buscando ...
fuente
Retina 0.8.2 , 84 bytes
Pruébalo en línea! Funciona con hexágonos irregulares. La E / S no está acolchada. Explicación:
Ensancha el interior del hexágono.
Arregla la parte superior.
Arregla el fondo.
fuente
JavaScript (ES6),
15915615350bytesPruébalo en línea!
Comentado
NB: los caracteres alternativos se utilizan a continuación para los delimitadores de expresiones regulares para evitar que el resaltador de sintaxis SE se vuelva loco.
fuente
Carbón , 48 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Ingrese y concatene todas las líneas excepto la primera. (La entrada en formato JSON haría que la mayoría de esto sea innecesario con un ahorro de 11 bytes).
Cuente el número de
/
s,/
s y_
s en la cadena y úselo para calcular las nuevas longitudes de los lados (en el caso de_
s, como una cadena de_
s de esa longitud).Dibuja el hexágono ampliado.
Solución alternativa, también 48 bytes:
Pruébalo en línea!El enlace es a la versión detallada del código. Explicación:
Ingrese todas las líneas. (La entrada en formato JSON haría que esto sea innecesario con un ahorro de 17 bytes).
Dibuja las secciones superior derecha e inferior izquierda del hexágono por separado.
Cuente el número de
/
s,/
s y_
s en la cadena y úsela para calcular las nuevas longitudes de los lados.Imprima la parte superior o inferior y baje una línea si esta era la línea superior.
Dibuja ambos lados derecho o izquierdo.
fuente
APL (Dyalog Unicode) ,
7574 bytes SBCSPruébalo en línea!
'.+'⎕s'&'
dividir la entrada en líneas↑⍵
mezclar líneas en una matriz⍺⍳
reemplazar' /\_'
con0 1 2 3
(0,0,⍨⍉)⍣3⍉
rodea con una capa de 0s en la parte superior e inferior y dos capas de 0s en la izquierda y derecha{⊃0~⍨1⌷⍵,⍨⍉⍵}⌺3 3
para cada celda, elija la primera no 0 de: superior, inferior, izquierda, derecha del vecindario 3x3 centrado en ella2⌈/
max en pares horizontalmentea×1=(+⍀×a)⌊⊖+⍀⊖×a←
mantener solo el límite exterior de los no 0⍺[
]
reemplazar0 1 2 3
con' /\_'
fuente
PowerShell , 126 bytes
Pruébalo en línea!
fuente
Perl 5 ,
177156145 bytes¿Podría ser más corto? No veo cómo todavía. Con comentarios y nuevas líneas agregadas y encabezado + pie de página:
Pruébalo en línea!
La línea n. ° 1 divide la cadena de entrada de varias líneas en la matriz @l.
La línea # 2 duplica la segunda y la última línea sin los caracteres _.
La línea n. ° 3 agrega espacios donde sea necesario en la línea 2 al penúltimo.
La línea # 4 ensancha los dos lados ___ con un _ y devuelve la matriz @l de líneas como una cadena de varias líneas.
fuente