visão global
Dado um número de hexágonos, organize-os em uma forma conectada dentro dos limites de uma imagem artística de 50 por 50 ASCII. A forma escolhida pode ser arbitrária - o que você achar mais favorável ao golfe - desde que esteja conectada. Pode haver orifícios, desde que sejam maiores que um hexágono (caso contrário, o número de hexágonos será ambíguo).
Layout
Todos os hexágonos devem estar no seguinte formato (somente esse tamanho e orientação são válidos):
__
/ \
\__/ Note there are 2 underscores per horizontal edge.
Dois hexágonos são conectados diretamente se compartilharem uma aresta:
__ __
/ \__ / \
\__/ \ \__/
\__/ or / \
\__/
Dois hexágonos não estão conectados se eles compartilham apenas um vértice:
__ __
/ \/ \
\__/\__/
Compartilhar meia borda também não conta como conectado:
__
/ \
\__/
/ \
\__/
Uma coleção de hexágonos é conectada se existir um caminho de qualquer hexágono para outro usando apenas hexágonos conectados diretamente .
Buracos
Um furo do tamanho de um hexágono em uma coleção conectada de hexágonos conta como um hexágono, de modo que qualquer peça de arte ASCII tenha uma contagem de hexágonos inequívoca.
Isso não conta como um buraco, já que o buraco em potencial é um único hexágono:
__
__/ \__
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/ 7 hexagons (not 6 with a hole)
Isso faz contagem como um buraco, uma vez que não corresponde a um único hexágono:
__
__/ \__
/ \__/ \__
\__/ \__/ \
/ \__ \__/
\__/ \__/ \
\__/ \__/
\__/ 8 hexagons with a hole
Entrada e saída
Entrada
Um número inteiro de 1 a 255.
Saída
Uma sequência de arte ASCII representando o número de entrada de hexágonos conectados, conforme descrito acima.
- O número de linhas (substrings separados por nova linha) é no máximo 50, mais uma nova linha à direita opcional.
- As linhas não precisam ter o mesmo comprimento, mas cada uma deve ter no máximo 50.
- Linhas de comprimento zero podem existir acima ou abaixo da forma conectada, desde que o número total de linhas não exceda 50.
- Linhas com espaço apenas podem existir acima ou abaixo da forma conectada, desde que o número total de linhas não exceda 50.
- Os espaços podem aparecer à esquerda da forma, desde que o comprimento da linha não exceda 50 (a forma não precisa ser alinhada à esquerda).
- Os espaços podem aparecer à direita da forma, desde que o comprimento da linha não exceda 50.
- Quaisquer caracteres que não façam parte da forma conectada devem ser espaços ou novas linhas.
Desde que a saída esteja correta, não é necessário que seja consistente de uma execução para a seguinte.
Exemplos
Entrada: 6
Saídas válidas:
__ __ __
/ \__/ \__/ \__
\__/ \__/ \__/ \
\__/ \__/ \__/
__ __
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/
__
__ / \
/ \__ \__/
\__/ \__/ \
\__/ \__/
\__/
/ \
\__/
Saídas inválidas:
__
__/ \__
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/ Invalid for 6 as the centre hole counts as a 7th hexagon.
__ __ __ __
/ \__/ \__/ \ / \
\__/ \__/ \__/ \__/
\__/ \__/ Invalid as the 6 hexagons are not connected.
__ __ __ __
/ \__/ \__/ \/ \
\__/ \__/ \__/\__/
\__/ \__/ Invalid as vertex touching does not count as connected.
__ __ __
/ \__/ \ / \
\__/ \__/ \__/
/ \__/ \
\__/ \__/
\__/ Invalid as the 6 connected hexagons are not the only visible characters.
Ganhando
A resposta mais curta válida em bytes vence.
Entre os melhores
(usando o snippet do cabeçalho de Martin )
fonte
6
. Para uma entrada de255
uma linha horizontal de hexágonos, não caberá na arte ASCII de 50 por 50.Respostas:
CJam,
645755 bytesTeste aqui.
Isso irá gerar o seguinte padrão, em colunas :
Explicação
Isso se baseia na excelente dica de Dennis , usando
.e>
para montar uma saída de arte ASCII de várias peças. Como ele diz,.e>
assume o máximo de duas matrizes (ou cadeias) em elementos e, como os espaços têm o código de caracteres mais baixo, podemos usá-lo para impor outros caracteres em uma grade de cadeias. Além disso, se as duas matrizes não tiverem o mesmo comprimento, os elementos estranhos da matriz mais longa serão simplesmente copiados inalterados. Isso significa que os diferentes padrões nem precisam ter o mesmo tamanho. Para aplicar isso a matrizes bidimensionais (porque não queremos inserir as novas linhas até o final), aplicamos em.e>
pares às linhas, o que fornece..e>
.A idéia básica do código é gerar
N
cópias de um único hexágono movido para a posição correta. "Movemos" o hexágono verticalmente, acrescentando linhas vazias e horizontalmente, acrescentando espaços. Quando terminamos, dobramos todas as cópias juntas, usando o belo:..e>
(provavelmente o operador mais longo que já usei em um programa CJam).Aqui está o código:
fonte
Python 2,
219207 caracteresAceita stdin.
Praticamente apenas cria uma grade de espaços 50x50 e coloca os hexágonos onde apropriado. Após o hexágono 16, que não é necessário a primeira fileira de
h
(o hexágono como uma matriz 2D), de modo que usari>15
para iniciar o intervalo no 1 em vez de 0.c=i*3%48+1;r=(i*3+1)/48*2+i%2
calcula o c olumn e r OW preciso para começar a.n
é um booleano, mas é usado como um número inteiro para corrigir os limites (já queh[0]
são apenas três caracteres para evitar a substituição de itens).Estou muito feliz com este, raspei cerca de 50 bytes desde a versão inicial, especialmente quando me lembrei da
a[x:y]=b
sintaxe.Saída (n = 30):
Como linhas finais de espaço em branco são permitidas, mudei a criação de
g
para apenas criar 50bytearray
s em vez de3+(x>1)+x/16*2
, que é o número exato de linhas necessárias, cortando 12 bytes.fonte
Swift 2.0,
601591 bytesPara correr:
swift hexagons.swift 21
Saída:
Swift's
substringToIndex
estringByReplacingOccurencesOfString
ocupam tantos personagens ...fonte
stringByPaddingToLength
, no entanto, nesse caso, seriam 11 caracteres a mais do que digitar a sequência completa.stringByAppendingString
em Objective-C, mas ainda assim ...C, 238 bytes
Somente espaços e novas linhas necessários são considerados para a contagem de caracteres.
Ele simplesmente cria uma matriz de caracteres, preenche-os na ordem inversa e depois imprime a coisa toda.
fonte
JavaScript (ES6), 265 bytes
Agrupe hexágonos em sequência, da esquerda para a direita, alternando para cima e para baixo - como um favo de mel - até o final de uma linha.
Sem jogar com a descrição (funciona no firefox):
fonte
Ruby, 120
cria uma matriz de 50 seqüências de 50 espaços e substitui 4 caracteres em 3 linhas para adicionar os hexágonos:
Como a primeira linha contém espaços, uma vez que um hexágono tenha sido plotado, não podemos plotar outro abaixo, porque os espaços substituiriam os hexágonos anteriores.
Portanto, os hexágonos são adicionados na forma de um losango de 16x16 (retângulo distorcido) de baixo para cima e inclinados da parte inferior esquerda para a parte superior direita.
A sequência
" __ "
será substituída por outras adicionais\
e/
onde for necessário.Ungolfed in program program
Saída típica (n = 250)
Deve haver mais algumas linhas de espaço em branco na parte superior aqui, totalizando 50, mas não sei se existe uma maneira de obter o Stackexchange para formatar para incluí-los.
fonte