Unicode矩形


10

给定

  • a来自的字符矩阵u=" ╶╺╵└┕╹┖┗╴─╼┘┴┶┚┸┺╸╾━┙┵┷┛┹┻╷┌┍│├┝╿┞┡┐┬┮┤┼┾┦╀╄┑┭┯┥┽┿┩╃╇╻┎┏╽┟┢┃┠┣┒┰┲┧╁╆┨╂╊┓┱┳┪╅╈┫╉╋"
  • 子矩阵作为坐标xywh(左,上,宽度> 1,高度> 1)
  • 厚度t为1(如)或2(如

考虑到现有线,以指定的粗细渲染子矩阵的内部边界。

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

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

覆盖线段时,新的厚度应大于旧的厚度和t

这不是关于输入解析或找到统一的柯尔莫哥洛夫复杂性,所以你可以假设auxywht是提供给您的变量。另外,您可以将结果放入变量中,r而不是返回或输出它,只要它r的类型与相同即可a

如果您的语言强迫您将代码放入函数(C,Java,Haskell等)中,并且您的解决方案由单个函数组成,则可以省略函数的页眉和页脚。

更大的测试:

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

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

将输入的一贯主张0 <= x < x + w < width(a)0 <= y < y + h < height(a)
tsh

@tsh是,输入将是有效的
NGN

ah,我的默认字体是躲猫猫-除非您放大很多,否则它会显示某些字符的粗细错误。
尼尔

@尼尔,对此我感到抱歉。一种解决方法是将示例粘贴到可以选择字体的编辑器中。
ngn

1
关于您的赏金-不可能授予三个150重复赏金。每次您在同一问题上再次悬赏时,您必须将代表计数加倍。
MD XF

Answers:


2

JavaScript,218字节

(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 应该作为char数组的数组。


如上所述,您可以(a,x,y,w,h,t,u)=>...r=...
ngn

2

Python 3中226个 201 197字节

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

在线尝试!

取消高尔夫:

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%3保存一堆字节。然后max(…)*3**o for→再3**o*max(…)for保存一个。然后,您可以通过将3**和进行内联和改组P以对其进行索引o%5-1,从而得出一个结果: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

错误,最后一步是个坏主意。相反,您可以R=range将其降低到201
Lynn

1

JavaScript(ES6),174个字节

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)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.