nota: a arte das cordas pode parecer horrível aqui por causa da estranheza da fonte SE: P :(
Dada uma lista de quatro tuplas representando os cantos dos retângulos, desenhe retângulos translúcidos um sobre o outro nessa ordem.
Para esse desafio, você deve ter a menor coordenada no canto superior esquerdo e o eixo x aumentando para a direita e o eixo y aumentando para baixo.
Uma tupla de quatro (x0, y0, x1, y1)
ou (x0, x1, y0, y1)
representa os (x, y)
pares de coordenadas dos cantos superior esquerdo e inferior direito de um retângulo (você pode escolher um dos dois formatos para retângulos, mas deve ser consistente)
O que quero dizer com "retângulo translúcido"? Bem, para esse desafio, você usará o caractere de espaço e a maioria dos caracteres de desenho de caixa ; especificamente, todos os usados para desenhar retângulos, incluindo caracteres "em negrito". Quando um retângulo translúcido é desenhado, primeiro todas as linhas finas no espaço ocupado desaparecem e todas as linhas em negrito se tornam finas e, em seguida, o próprio retângulo é desenhado em linhas em negrito.
Por exemplo, se você desenhar um retângulo na parte superior esquerda e depois na parte inferior direita, pode ser algo como isto:
┏━━━━┓
┃ ┃
┃ ┃
┃ ┏━━╇━━┓
┃ ┃ │ ┃
┗━╉──┘ ┃
┃ ┃
┃ ┃
┗━━━━━┛
Para ficar claro, as linhas são iluminadas (negrito -> fino -> nenhum) para todas as linhas estritamente dentro do retângulo (por exemplo, as linhas voltadas para baixo são afetadas pela borda superior, mas não pela borda inferior).
Casos de teste
Algum número de linhas de entrada será fornecido, seguido pela arte em Unicode, para cada caso de teste.
0 0 5 5
5 5 10 10
3 3 7 7
2 2 8 8
┏━━━━┓
┃ ┃
┃ ┏━━╇━━┓
┃ ┃┌─┴─┐┃
┃ ┃│ │┃
┗━╉┤ ├╊━┓
┃│ │┃ ┃
┃└─┬─┘┃ ┃
┗━━╈━━┛ ┃
┃ ┃
┗━━━━┛
14 5 15 9
13 2 15 16
6 4 15 11
┏━┓
┃ ┃
┏━━━━━━╇━┫
┃ │ ┃
┃ │ ┃
┃ │ ┃
┃ │ ┃
┃ │ ┃
┃ │ ┃
┗━━━━━━╈━┫
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┗━┛
6 8 10 11
15 12 16 16
14 10 16 16
9 1 15 15
┏━━━━━┓
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┏━━╉┐ ┃
┃ ┃│ ┃
┃ ┃│ ┌╊┓
┗━━╉┘ │┃┃
┃ │┠┨
┃ │┃┃
┃ │┃┃
┗━━━━╈┩┃
┗┷┛
Regras
- A entrada pode estar em qualquer formato razoável para uma lista de quatro tuplas. A entrada pode ser um indexado ou zero indexados ao longo de cada eixo (isto é, o canto superior esquerdo pode ser qualquer um de
(0, 0)
,(0, 1)
,(1, 0)
,(1, 1)
. - A saída deve ter a arte unicode conforme descrito. A saída pode não ter novas linhas iniciais e pode ter no máximo uma nova linha à direita (após a última linha). O espaço em branco à direita será ignorado para os propósitos deste desafio.
Pontos de código
Os tubos horizontais e verticais em negrito e leves estão na faixa [U+2500, U+2503]
. Os vários tubos de canto estão no intervalo [U+250C, U+251C)
. Os canos de três braços estão ao alcance [U+251C, U+253C)
. Os canos de quatro braços estão ao alcance [U+253C, U+254C)
. Os tubos restantes que podem ser encontrados no meu programa nunca são realmente usados.
Typically this uses only 95 printable (from a total of 128) characters defined by the ASCII Standard from 1963.
Respostas:
Python 3 ,
289286 bytesExperimente online!
Recebe entrada como uma lista de 4 tuplas
(x0, y0, x1, y1)
:, juntamente com os caracteres de desenho de canal, da seguinte maneira:" ╶╺╵└┕╹┖┗╴─╼┘┴┶┚┸┺╸╾━┙┵┷┛┹┻╷┌┍│├┝╿┞┡┐┬┮┤┼┾┦╀╄┑┭┯┥┽┿┩╃╇╻┎┏╽┟┢┃┠┣┒┰┲┧╁╆┨╂╊┓┱┳┪╅╈┫╉╋"
Suporta caixas com largura ou altura zero (usa todos os caracteres de desenho da caixa).
Com base na minha resposta a esta pergunta , mas modificado para alterar as caixas existentes ao desenhar.
'Ungolfed':
fonte
u
como entrada._,_,w,h=
por*_,w,h=
.Q
não precisa de parênteses,Q=(i<X,y<j,x<i,j<Y);
pode ser substituídaQ=i<X,y<j,x<i,j<Y;
por dois bytes salvos.JavaScript (ES6),
298261bytesOnde
\n
representa o caractere literal de nova linha. Com base na minha resposta aos retângulos Unicode . Explicação: Uma matriz de cadeias de espaços é criada para atrair. Cada um desses espaços é processado fazendo um loop sobre todas as caixas na entrada. Os caracteres que ficam fora da caixa são ignorados, mas os que estão na borda ou no interior são processados ainda mais. Para cada um dos quatro segmentos de linha que compõem um caractere (cada um representado por uma potência de 3), existem três possibilidades; a) o segmento fica fora da caixa e deve ser ignorado (obtido com a passagem de um parâmetro de 0 em vez da potência de 3) b) o segmento fica na borda da caixa e deve estar em negrito (obtido chamando ah
função) c) o segmento fica dentro da caixa e deve ser iluminado (alcançado chamando og
função). O caractere é então indexado na cadeia Unicode. Depois que todas as caixas foram processadas, a matriz é unida em novas linhas.Mostrar snippet de código
fonte