Rectangles Unicode

10

Donné

  • une matrice ade caractères deu=" ╶╺╵└┕╹┖┗╴─╼┘┴┶┚┸┺╸╾━┙┵┷┛┹┻╷┌┍│├┝╿┞┡┐┬┮┤┼┾┦╀╄┑┭┯┥┽┿┩╃╇╻┎┏╽┟┢┃┠┣┒┰┲┧╁╆┨╂╊┓┱┳┪╅╈┫╉╋"
  • les coordonnées d'une sous - matrice comme x, y, w, h(gauche, haut, largeur> 1, la hauteur> 1)
  • une épaisseur tde 1 (comme dans ) ou 2 (comme dans )

rendre une bordure intérieure pour la sous-matrice avec l'épaisseur spécifiée, en tenant compte des lignes existantes.

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

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

Lors du remplacement d'un fragment de ligne, la nouvelle épaisseur doit être la plus élevée de l'ancienne épaisseur et t.

On ne parle pas de l' analyse d' entrée ou de trouver la complexité de Kolmogorov d'Unicode, de sorte que vous pouvez supposer a, u, x, y, w, h, tsont à votre disposition en tant que variables. En outre, vous pouvez placer le résultat dans une variable rau lieu de le renvoyer ou de le produire, tant qu'il rest du même type que a.

Si votre langage vous oblige à mettre du code dans des fonctions (C, Java, Haskell, etc.) et que votre solution consiste en une seule fonction, vous pouvez omettre l'en-tête et le pied de page de la fonction.

Test plus grand:

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

// output
r=['┏┱─────┐         ┌┐     ┎──┲━┓',
   '┠╂──┬──┴─────────┼┼─────╂──╄━┛',
   '┃┃  │            ││     ┃  │  ',
   '┠╂──╆━━┓  ┏━━━━┓ ││    ┌╂┰┐│  ',
   '┃┃  ┗━━╃──╂────╂─┴╆━┱──┴╂┸┴┘  ',
   '┃┃     │  ┃    ┃  ┃ ┃   ┃     ',
   '┗┹─────┘  ┗━━━━┛  ┗━┛   ╹     ']
ngn
la source
l'entrée sera-t-elle toujours valable 0 <= x < x + w < width(a)et 0 <= y < y + h < height(a)?
tsh
@tsh oui, l'entrée sera valide
ngn
Bah, ma police par défaut est douteuse - elle montre certains de ces caractères avec la mauvaise lourdeur sauf si vous zoomez beaucoup.
Neil
@Neil Je suis désolé pour ça. Une solution de contournement consiste à coller les exemples dans un éditeur où vous pouvez choisir la police.
ngn
1
À propos de votre prime - il est impossible d'attribuer trois primes de 150 répétitions. Vous devez doubler le nombre de représentants chaque fois que vous commencez une autre prime sur la même question.
MD XF

Réponses:

2

JavaScript, 218 octets

(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 doit être considéré comme un tableau de tableau de caractères.

tsh
la source
comme mentionné ci-dessus, vous pouvez remplacer (a,x,y,w,h,t,u)=>...parr=...
ngn
2

Python 3 , 226 201 197 octets

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))]

Essayez-le en ligne!

Non 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]
TFeld
la source
(p%3,p%9//3,p%27//9,p//27)[o]p//3**o%3enregistre un tas d'octets. Puis max(…)*3**o for3**o*max(…)forenregistre un de plus. Et puis vous pouvez en extraire un de plus en insérant le 3**et en mélangeant Ppour l'indexer, ce qui o%5-1donne: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
Euh, cette dernière étape est une mauvaise idée. Au lieu de cela, vous pouvez le faire R=rangeet le descendre à 201
Lynn
1

JavaScript (ES6), 174 octets

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)

Neil
la source