Os mosaicos hexagonais , ou inclinações do avião, são tricolores - o que significa que, usando apenas três cores, como Vermelho, Azul e Verde, cada hexágono pode ser colorido sem dois hexágonos que compartilham uma borda que compartilha uma cor. Um exemplo parcial mostrando esse padrão.
Dada uma disposição hexagonal parcial em ASCII (via STDIN, leitura de um arquivo, etc.), altere as cores dos caracteres (via códigos ANSI, manipulação de imagem etc.) para ajustar-se a essa coloração. A torção é o meio dos hexágonos (as *
abaixo) são as três cores, e as linhas entre elas precisam ser uma mistura das *
cores correspondentes das duas hexágonos . Se a linha estiver na borda externa, ela deve corresponder à correspondente *
.
Por exemplo, dada a telha hexagonal parcial de
/ \ / \ / \ / \
| * | * | * | * |
\ / \ / \ / \ /
| * | * | * |
\ / \ / \ /
suponha que decidimos colorir o hexágono superior esquerdo *
para vermelho e seus dois vizinhos para azul e verde (no sentido horário). Então a |
linha precisa ser magenta e a /
linha precisa ser amarela. Se continuarmos colorindo, acabaremos com algo assim (ampliado para maior clareza):
Ou, para uma entrada de
/ \
| * |
/ \ /
| * |
/ \ /
| * |
\ /
você pode pintá-lo dessa maneira (ampliado para maior clareza):
Alguns casos de teste adicionais (seu código deve ser capaz de lidar com eles):
/ \ / \
| * | * |
\ / \ /
| * |
/ \ / \
| * | * |
\ / \ /
/ \
| * |
\ / \
| * |
/ \ /
| * |
\ /
/ \
| * |
\ /
Regras
- É garantido que a entrada possui pelo menos um hexágono e nenhuma entrada terá um "furo".
- Você não precisa começar sua coloração com vermelho, desde que mantenha a regra das três cores.
- Se o ladrilho parcial puder ser bicolor, você poderá fazê-lo sem penalidade (como no segundo exemplo) - não será necessário extrapolar o ladrilho parcial para um ladrilho completo.
- Os centros do hexágono
*
devem ser coloridos em vermelho, azul ou verde, enquanto as linhas entre eles devem ser ciano, amarelo ou magenta. Por exemplo, ter uma Magenta*
não é permitido e um Vermelho|
ou\
ou/
deve estar na borda externa do desenho. Veja Cores abaixo. - Se o seu console não tiver essas cores exatas, use a aproximação mais próxima e especifique na sua resposta qual aproximação você está usando.
- Os espaços em branco à esquerda ou à direita, incluindo as novas linhas à direita, são aceitáveis desde que os caracteres estejam alinhados.
- O mosaico parcial pode ser inserido com preenchimento de espaço para formar um retângulo, se isso facilitar o código.
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- A saída pode ser no console, salva como imagem, etc.
- Lacunas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
Cores e misturas de cores:
As três cores base disponíveis são (com códigos de cores no formato decimal RGB):
- Vermelho
(255,0,0)
- Verde
(0,255,0)
- Azul
(0,0,255)
As combinações são:
- Vermelho e Verde combinam para fazer Amarelo
(255,255,0)
- Azul e verde combinam para fazer ciano
(0,255,255)
- Vermelho e azul combinam para fazer Magenta
(255,0,255)
fonte
*
Respostas:
JavaScript (ES6),
219203201 bytesExplicação: Cada caractere é envolto em uma
font
tag para definir sua cor, que é calculada verificando cada quadrado, mais os quadrados dois à esquerda e à direita, mais os quatro quadrados um na diagonal, por*
se combinando as cores de todos.*
s encontrado. As*
cores são escolhidas simplesmente tomando seu módulo de coordenadas horizontais 3 e deslocando uma máscara de bits adequadamente. Editar: salvou 2 bytes mudando de#RRGGBB
para#RGB
cores.fonte
JavaScript (ES6), 210 bytes (usando HTML + CSS)
Semelhante à minha abordagem de tela ; localiza todos os
*
s na string de entrada e grava hexágonos na página na forma de<pre>
elementos absolutamente posicionados . Comomix-blend-mode
está definido comolighten
, a adição de cores é realizada automaticamente quando os caracteres se sobrepõem.Mostrar snippet de código
fonte
Python 2 , 279 bytes
Experimente online!
Golfe e conserto graças a user202729!
-27 bytes graças a Mr. Xcoder
-24 bytes graças a Jonathan Frech
fonte
2-abs(i)
está2-(i&1)
neste contexto, 336 bytes.\033
pode ser\33
(salvando um byte) ou o\x1b
caractere real ( salvando três bytes ).=
e a;
por dois,
e a=
.Python 2 ,
346331 bytesExperimente online!
fonte
HTML (Tela) + JavaScript (ES6), 13 + 251 = 264 bytes
Localiza todos os
*
s na sequência de entrada e pinta um hexágono ASCII na tela nas posições correspondentes. PorqueglobalCompositeOperation='lighter'
a adição de cores é realizada automaticamente quando os caracteres se sobrepõem.HTML
Javascript
Um multiplicador e um
scale()
comando adicional foram adicionados ao snippet para visibilidade.Mostrar snippet de código
Veja também minha abordagem baseada em CSS .
fonte
MATLAB / oitava , 223 bytes
No formato de código um pouco mais limpo:
A entrada é tomada como uma matriz 2D, como digitar o seguinte quando a entrada é solicitada:
MATLAB, pelo que sei, não tem a capacidade de produzir cores para o console (exceto para hacks Java sujos que estou descontando). Como tal, a saída é impressa em uma figura.
A coloração é obtida encontrando a localização de todos
*
na entrada e, em seguida, em uma matriz de cores RGB (p
), uma caixa 5x3 de 1s (255 na representação de cores MATLAB) é escrita centralizada sobre o*
. A caixa é gravada na cor correspondente ao índice mod-3 ao longo de cada linha, com linhas pares tendo o índice de cores alterado por um deslocamento.Isso produz uma matriz de cores em que quaisquer caixas que se sobrepõem resultarão na cor mista necessária. O exemplo acima produz a seguinte matriz de cores.
As regiões branca e preta são irrelevantes porque nesses locais é impresso um espaço, o que significa que na verdade não vemos a cor incorreta.
Depois que a matriz de cores é criada, exibimos cada caractere em uma figura usando o
text
comando, configurando a cor do texto para a entrada correspondente na matriz de cores. O exemplo acima exibirá:fonte