Dado um hexágono de arte ASCII como entrada, produza um cujos lados tenham uma unidade a mais.
_____
____ / \
/ \ / \
/ \ / \
\ \ => \ \
\ / \ /
\____/ \ /
\_____/
Os hexágonos de entrada terão simetria de 180 graus, mas, caso contrário, os lados podem ter comprimentos diferentes. Acima, os comprimentos laterais (2, 4, 3) aumentam para (3, 5, 4). Os comprimentos laterais serão diferentes de zero.
Os hexágonos são feitos de sublinhados _
, barras /
e barras invertidas \
. Observe que nas bordas horizontais (feitas com sublinhados), a borda superior está em sua própria linha, mas a borda inferior não.
I / O
Vou ser um defensor e exigir formatação ASCII aqui: a entrada e a saída devem ser uma string com novas linhas representando a imagem, não uma lista de linhas. Obviamente, seu código pode imprimir cada linha sucessivamente para produzir a imagem ou ler STDIN uma linha por vez para inserir se o seu idioma puder fazer isso.
Detalhes
A entrada pode incluir uma nova linha à direita opcional, se você desejar, mas, caso contrário, não terá linhas vazias. Você pode optar por não ter espaços à direita na entrada ou espaços para preencher cada linha no mesmo comprimento (o da linha mais longa).
A saída deve estar nivelada com a borda esquerda da tela, como a entrada. Você pode ter novas linhas extras acima e abaixo, além de espaços à direita.
Casos de teste
Entrada seguida de saída.
_
/ \
\_/
__
/ \
/ \
\ /
\__/
____
/ \
/ \
\ \
\ /
\____/
_____
/ \
/ \
/ \
\ \
\ /
\ /
\_____/
_
/ \
/ /
/ /
/ /
/ /
\_/
__
/ \
/ \
/ /
/ /
/ /
/ /
\ /
\__/
Entre os melhores
<iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=185760" width="100%" height="100%" style="border: none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>
IEnumerable
de caracteres?Respostas:
Stax , 28 bytes
Execute e depure
Parece que deve haver uma maneira de fazer isso principalmente com regex, mas ainda estou procurando ...
fonte
Retina 0.8.2 , 84 bytes
Experimente online! Funciona com hexágonos irregulares. A E / S está sem preenchimento. Explicação:
Amplie o interior do hexágono.
Arrume a parte superior.
Arrume o fundo.
fonte
JavaScript (ES6),
159 156 153150 bytesExperimente online!
Comentado
Nota: caracteres alternativos são usados abaixo para os delimitadores de expressões regulares para impedir que o marcador de sintaxe SE fique furioso.
fonte
Carvão , 48 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Insira e concatene todas as linhas, exceto a primeira. (A entrada no formato JSON tornaria a maior parte disso desnecessária, com uma economia de 11 bytes.)
Conte o número de
/
s, se/
es_
na sequência e use-a para calcular os novos comprimentos laterais (no caso de_
s, como uma sequência de_
s desse comprimento).Desenhe o hexágono aumentado.
Solução alternativa, também 48 bytes:
Experimente online! Link é a versão detalhada do código. Explicação:
Insira todas as linhas. (A entrada no formato JSON tornaria isso desnecessário com uma economia de 17 bytes.)
Desenhe as seções superior direita e inferior esquerda do hexágono separadamente.
Contar o número de
/
s,/
s, e_
s na cadeia e uso que para calcular os novos comprimentos laterais.Saída na parte superior ou inferior e mova para baixo uma linha, se essa for a linha superior.
Desenhe os lados direito ou esquerdo.
fonte
APL (Dyalog Unicode) , SBCS de
75 e74 bytesExperimente online!
'.+'⎕s'&'
dividir entrada em linhas↑⍵
misturar linhas em uma matriz⍺⍳
substitua' /\_'
por0 1 2 3
(0,0,⍨⍉)⍣3⍉
surround com uma camada de 0s na parte superior e inferior e duas camadas de 0s na esquerda e direita{⊃0~⍨1⌷⍵,⍨⍉⍵}⌺3 3
para cada célula, escolha o primeiro não-0 entre: superior, inferior, esquerda e direita, no bairro 3x3 centralizado2⌈/
max em pares horizontalmentea×1=(+⍀×a)⌊⊖+⍀⊖×a←
mantenha apenas o limite externo de não-0s⍺[
]
substitua0 1 2 3
por' /\_'
fonte
PowerShell , 126 bytes
Experimente online!
fonte
Perl 5 ,
177156145 bytesPoderia ser mais curto? Não vejo como ainda. Com comentários e novas linhas adicionadas e cabeçalho + rodapé:
Experimente online!
A linha 1 divide a sequência de entrada de várias linhas na matriz @l.
A linha 2 duplica a segunda e a última linha sem os _ caracteres.
A linha 3 adiciona espaços onde for necessário na linha 2 ao penúltimo lugar.
A linha 4 amplia os dois lados ___ com um _ e retorna a matriz de linhas @l como uma sequência de várias linhas.
fonte