Rectángulos Unicode


10

Dado

  • una matriz ade caracteres deu=" ╶╺╵└┕╹┖┗╴─╼┘┴┶┚┸┺╸╾━┙┵┷┛┹┻╷┌┍│├┝╿┞┡┐┬┮┤┼┾┦╀╄┑┭┯┥┽┿┩╃╇╻┎┏╽┟┢┃┠┣┒┰┲┧╁╆┨╂╊┓┱┳┪╅╈┫╉╋"
  • las coordenadas de una submatriz como x, y, w, h(izquierda, superior, de anchura> 1, altura> 1)
  • un grosor tde 1 (como en ) o 2 (como en )

renderiza un borde interno para la submatriz con el grosor especificado, teniendo en cuenta las líneas existentes.

x=4;y=1;w=2;h=3;t=2;
a=[' ┌───┐',
   '┌┼┐  │',
   '│└┼──┘',
   '└─┘   ']

// output
r=[' ┌───┐',
   '┌┼┐ ┏┪',
   '│└┼─╂┨',
   '└─┘ ┗┛']

Al sobrescribir un fragmento de línea, el nuevo grosor debe ser mayor que el grosor anterior y t.

No se trata de analizar la entrada o la búsqueda de la complejidad de Kolmogorov de Unicode, por lo que puede suponer a, u, x, y, w, h, testán disponibles para usted como variables. Además, puede colocar el resultado en una variable en rlugar de devolverlo o generarlo, siempre que rsea ​​del mismo tipo que a.

Si su lenguaje le obliga a poner código en funciones (C, Java, Haskell, etc.) y su solución consiste en una sola función, puede omitir el encabezado y pie de página de la función.

Prueba más grande:

x=4;y=1;w=24;h=4;t=1;
a=['┏┱─────┐         ┌┐     ┎──┲━┓',
   '┠╂─────┘         ││     ┃  ┗━┛',
   '┃┃               ││     ┃     ',
   '┠╂──┲━━┓  ┏━━━━┓ ││    ┌╂┰┐   ',
   '┃┃  ┗━━┩  ┃    ┃ └╆━┓  └╂┸┘   ',
   '┃┃     │  ┃    ┃  ┃ ┃   ┃     ',
   '┗┹─────┘  ┗━━━━┛  ┗━┛   ╹     ']

// output
r=['┏┱─────┐         ┌┐     ┎──┲━┓',
   '┠╂──┬──┴─────────┼┼─────╂──╄━┛',
   '┃┃  │            ││     ┃  │  ',
   '┠╂──╆━━┓  ┏━━━━┓ ││    ┌╂┰┐│  ',
   '┃┃  ┗━━╃──╂────╂─┴╆━┱──┴╂┸┴┘  ',
   '┃┃     │  ┃    ┃  ┃ ┃   ┃     ',
   '┗┹─────┘  ┗━━━━┛  ┗━┛   ╹     ']

¿la entrada siempre se mantendrá 0 <= x < x + w < width(a)y 0 <= y < y + h < height(a)?
tsh

@tsh sí, la entrada será válida
NGN

Bah, mi fuente predeterminada es dudosa: muestra algunos de esos caracteres con el peso incorrecto a menos que haga un zoom mucho.
Neil

@Neil, lo siento. Una solución alternativa es pegar los ejemplos en un editor donde puede elegir la fuente.
ngn

1
Acerca de su recompensa: es imposible otorgar tres recompensas de 150 repeticiones. Tienes que duplicar el recuento de repeticiones cada vez que comienzas otra recompensa por la misma pregunta.
MD XF

Respuestas:


2

JavaScript, 218 bytes

(a,x,y,w,h,t,u)=>a.map((l,j)=>l.map((c,i)=>u[(g=(a,b)=>a?g(a/3|0,b/3|0)*3+Math.max(a%3,b%3):b)(u.indexOf(c),t*((j==y||j==y+h-1)*((i>x&&i<x+w)*9+(i>=x&&i<x+w-1))+(i==x||i==x+w-1)*((j>y&&j<y+h)*3+(j>=y&&j<y+h-1)*27)))]))

a debe tomarse como conjunto de conjunto de caracteres.


como se mencionó anteriormente, se le permite reemplazar (a,x,y,w,h,t,u)=>...conr=...
ngn

2

Python 3 , 226 201 197 bytes

n,m=x+w-1,y+h-1
r=[*map(list,a)]
R=range
for i in R(x,x+w):
 for j in R(y,y+h):A,B=j in(y,m),i in(x,n);r[j][i]=u[sum(3**o*max((i<n*A,y<j*B,x<i*A,j<m*B)[o]*t,u.index(a[j][i])//3**o%3)for o in R(4))]

Pruébalo en línea!

Sin golf:

n,m=x+w-1,y+h-1
r=[*map(list,a)]
for i in range(x,x+w):
 for j in range(y,y+h):
  p=u.index(a[j][i])
  c=(p%3,p%9//3,p%27//9,p//27)
  A,B=j in(y,m),i in(x,n)
  P=(i<n*A,y<j*B,x<i*A,j<m*B)
  l=sum(max(P[o]*t,c[o])*3**o for o in range(4))
  r[j][i]=u[l]

(p%3,p%9//3,p%27//9,p//27)[o]p//3**o%3guarda un montón de bytes. Entonces max(…)*3**o for3**o*max(…)forguarda uno más. Y luego puede obtener uno más alineando 3**y barajando Ppara indexarlo o%5-1, produciendo:sum(o*max((i<n*A,j<m*B,y<j*B,x<i*A)[o%5-1]*t,p//o%3)for o in(1,3,9,27))
Lynn

Err, ese último paso es una mala idea. En cambio, puedes hacerlo R=rangey bajarlo a 201
Lynn

1

JavaScript (ES6), 174 bytes

r=a.map((l,j)=>l.map((c,i)=>u[c=u.indexOf(c),g=n=>c/n%3<t&&g(n,c+=n),j==y|j==h&&(i>=x&i<w&&g(1),i>x&i<=w&&g(9)),i==x|i==w&&(j>=y&j<h&&g(27),j>y&j<=h&&g(3)),c]),w+=x-1,h+=y-1)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.