Unicode-Rechtecke

10

Gegeben

  • eine Matrix avon Zeichen ausu=" ╶╺╵└┕╹┖┗╴─╼┘┴┶┚┸┺╸╾━┙┵┷┛┹┻╷┌┍│├┝╿┞┡┐┬┮┤┼┾┦╀╄┑┭┯┥┽┿┩╃╇╻┎┏╽┟┢┃┠┣┒┰┲┧╁╆┨╂╊┓┱┳┪╅╈┫╉╋"
  • die Koordinaten eines Submatrix wie x, y, w, h(links, oben, Breite> 1, Höhe> 1)
  • eine Dicke tvon 1 (wie in ) oder 2 (wie in )

Rendern Sie einen inneren Rand für die Submatrix mit der angegebenen Dicke unter Berücksichtigung vorhandener Linien.

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

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

Beim Überschreiben eines Linienfragments sollte die neue Dicke größer sein als die alte Dicke und t.

Es geht nicht um Eingabe Parsen oder die Kolmogorov - Komplexität von Unicode zu finden, so dass man davon ausgehen kann a, u, x, y, w, h, tSie als Variablen zur Verfügung steht. Sie können das Ergebnis auch in eine Variable reinfügen, anstatt es zurückzugeben oder auszugeben, solange res vom selben Typ ist wie a.

Wenn Ihre Sprache Sie zwingt, Code in Funktionen (C, Java, Haskell usw.) einzufügen, und Ihre Lösung aus einer einzigen Funktion besteht, können Sie die Funktionskopf- und -fußzeile weglassen.

Größerer Test:

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

// output
r=['┏┱─────┐         ┌┐     ┎──┲━┓',
   '┠╂──┬──┴─────────┼┼─────╂──╄━┛',
   '┃┃  │            ││     ┃  │  ',
   '┠╂──╆━━┓  ┏━━━━┓ ││    ┌╂┰┐│  ',
   '┃┃  ┗━━╃──╂────╂─┴╆━┱──┴╂┸┴┘  ',
   '┃┃     │  ┃    ┃  ┃ ┃   ┃     ',
   '┗┹─────┘  ┗━━━━┛  ┗━┛   ╹     ']
ngn
quelle
Wird der Eingang immer halten 0 <= x < x + w < width(a)und 0 <= y < y + h < height(a)?
tsh
@tsh ja, Eingabe wird gültig sein
ngn
Bah, meine Standardschrift ist zwielichtig - sie zeigt einige dieser Zeichen mit der falschen Schwere, es sei denn, Sie zoomen viel hinein.
Neil
@Neil Das tut mir leid. Eine Problemumgehung besteht darin, die Beispiele in einen Editor einzufügen, in dem Sie die Schriftart auswählen können.
ngn
1
Über Ihr Kopfgeld - es ist unmöglich, drei Kopfgelder mit 150 Wiederholungen zu vergeben. Sie müssen die Anzahl der Wiederholungen jedes Mal verdoppeln, wenn Sie ein weiteres Kopfgeld für dieselbe Frage starten.
MD XF

Antworten:

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 sollte als Array von Array von char genommen werden.

tsh
quelle
wie oben erwähnt, werden Sie ersetzen erlaubt (a,x,y,w,h,t,u)=>...mitr=...
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))]

Probieren Sie es online aus!

Ungolfed:

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
quelle
(p%3,p%9//3,p%27//9,p//27)[o]p//3**o%3speichert eine Reihe von Bytes. Dann max(…)*3**o for3**o*max(…)forspeichert noch einen. Und dann können Sie noch einen herausholen, indem Sie das einfügen 3**und herumschlurfen, Pum es zu indizieren o%5-1, was ergibt: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
Ähm, dieser letzte Schritt ist eine schlechte Idee. Stattdessen können Sie es tun R=rangeund es auf 201
Lynn
1

JavaScript (ES6), 174 Byte

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
quelle