Unicode長方形


10

与えられた

  • aからの文字の行列u=" ╶╺╵└┕╹┖┗╴─╼┘┴┶┚┸┺╸╾━┙┵┷┛┹┻╷┌┍│├┝╿┞┡┐┬┮┤┼┾┦╀╄┑┭┯┥┽┿┩╃╇╻┎┏╽┟┢┃┠┣┒┰┲┧╁╆┨╂╊┓┱┳┪╅╈┫╉╋"
  • 部分行列の座標xywh(左、上、幅> 1、高さ> 1)
  • t1(のように)または2(のように)の厚さ

既存の線を考慮して、指定された太さで部分行列の内側の境界をレンダリングします。

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

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

線のフラグメントを上書きする場合、新しい太さは古い太さとのどちらか大きいほうになりtます。

これは、あなたが取ることができるので、入力の解析またはUnicodeのコルモゴロフ複雑性を見つけることに関するものではありませんauxywht変数として使用可能です。また、と同じ型でrあれば、結果を返すか出力する代わりに変数に入れることもできます。ra

言語によってコードを関数(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 2017

@tshはい、入力は有効です
ngn '29

ええと、私のデフォルトのフォントは怪しげです-大きくズームインしない限り、これらの文字のいくつかは間違った重さで表示されます。
Neil

@ニール申し訳ありません。回避策の1つは、フォントを選択できるエディターに例を貼り付けることです。
ngn 2017

1
あなたのバウンティについて-150-repバウンティを3つ授与することは不可能です。同じ質問で別の賞金を開始するたびに、担当者数を2倍にする必要があります。
MD XF

回答:


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の3226の 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もう1つ保存します。そして、あなたは、インライン化することによって、よりから1つをEKEできる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))
リン・

エラー、その最後のステップは悪い考えです。代わりに、それを実行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)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.