유니 코드 사각형


10

주어진

  • a의 문자 행렬u=" ╶╺╵└┕╹┖┗╴─╼┘┴┶┚┸┺╸╾━┙┵┷┛┹┻╷┌┍│├┝╿┞┡┐┬┮┤┼┾┦╀╄┑┭┯┥┽┿┩╃╇╻┎┏╽┟┢┃┠┣┒┰┲┧╁╆┨╂╊┓┱┳┪╅╈┫╉╋"
  • 같은 행렬의 좌표 x, y, w, h(좌측 상부 폭> 1, 높이> 1)
  • 두께 t(1에서와 같이 ) 또는 2 (같이 )

기존 선을 고려하여 지정된 두께로 하위 행렬의 내부 경계를 렌더링합니다.

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

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

선 조각을 덮어 쓰는 경우 새 두께는 이전 두께와의 두께보다 커야합니다 t.

이것은 당신이 가정 할 수 있도록 입력 구문 분석 또는 유니 코드의 콜 모고 로프의 복잡성을 찾는 것에 대해 아니다 a, u, x, y, w, h, t변수 등을 사용할 수 있습니다. 또한 결과 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

Bah, 내 기본 글꼴은 dodgy입니다. 크게 확대하지 않으면 일부 무거운 문자가 표시됩니다.
Neil

@Neil 죄송합니다. 한 가지 해결 방법은 글꼴을 선택할 수있는 편집기에 예제를 붙여 넣는 것입니다.
ngn

1
현상금 정보-150 회 보상 바운티 3 개를 수여하는 것은 불가능합니다. 같은 질문에 대해 다른 현상금을 시작할 때마다 담당자 수를 두 배로 늘려야합니다.
MD XF

답변:


2

자바 스크립트, 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

파이썬 (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 for3**o*max(…)for하나 더 저장합니다. 그리고 다음과 같이 색인을 생성하기 위해 인라인 3**과 셔플 링을 통해 한 번 더 알아낼 수 있습니다 .Po%5-1sum(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, 그 마지막 단계는 나쁜 생각입니다. 대신 당신은 R=range그것을 할 수 있고 201
Lynn

1

자바 스크립트 (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)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.