Escreva o programa mais curto que imprime esta seção de arte ASCII de um ladrilho hexagonal ou favo de mel :
__
__/ \__
__/ \__/ \__
/ \__/ \__/ \
\__/ \__/ \__/
/ \__/ \__/ \
\__/ \__/ \__/
/ \__/ \__/ \
\__/ \__/ \__/
\__/ \__/
\__/
- Nenhuma entrada deve ser tomada.
- Saída para stdout ou a alternativa mais próxima do seu idioma.
- Em vez de um programa, você pode escrever uma função nomeada que não aceita parâmetros e imprime o resultado normalmente ou o retorna como uma string.
- A saída pode ter qualquer número de novas linhas à esquerda e / ou à direita e cada linha na saída pode ter qualquer número de espaços à esquerda e / ou à direita (desde que o padrão esteja alinhado corretamente).
- O código mais curto em bytes vence.
code-golf
ascii-art
kolmogorov-complexity
tiling
hexagonal-grid
Passatempos de Calvin
fonte
fonte
Respostas:
CJam,
4543424140 bytesExperimente online no intérprete CJam .
Como funciona
repete o padrão
\__/
38 vezes e o divide em pedaços de comprimento 21 . Se os pedaços fossem separados por linhas de alimentação, este seria o resultado:Isso contém claramente o favo de mel desejado. Tudo o que resta a fazer é substituir alguns caracteres por espaços, cortar outros e introduzir os feeds de linha.
gera o número inteiro 74 100 000 036 e o converte na matriz [7 4 1 0 0 0 0 0 0 3 6] . Cada elemento da matriz codifica o número de caracteres iniciais da linha correspondente que precisam ser substituídos por espaços. Subtraindo esse número de 16 , também obtemos o comprimento correto para esta linha.
Como um espaço possui um ponto de código mais baixo do que os outros caracteres de L e os operadores vetorizados deixam os caracteres da sequência mais longa que não correspondem a uma das mais curtas intocados,
.e<
substitui os primeiros caracteres D por espaços.fonte
Python 2, 73
Veja-o correr.
Para cada uma das 11 linhas de saída, calcula o número de espaços iniciais
k
como no máximo três funções lineares que formam o envelope do lado esquerdo do hexágono. Como as linhas diagonais têm inclinação3
e-3
, é melhor indexar o número da linha comoi=0,3,...30
.Para criar a malha hexagonal, primeiro ladrilhamos o suficiente da unidade
'\__/ '
. Em seguida, a mudança o[i:]
realinha em 3 para linhas ímpares. Finalmente, pegamos a parte necessária[k:16-k]
, deixando uma margemk
à esquerda e à direita.fonte
CJam,
655655 bytesExperimente online no intérprete CJam .
Idéia
A metade direita de cada linha é uma cópia invertida da metade esquerda com barras e barras invertidas trocadas. Portanto, basta codificar a metade esquerda do favo de mel:
Em vez de analisar esse padrão linha por linha, podemos analisá-lo coluna por coluna:
Surgem padrões óbvios:
_ _ _ _
ocorre cinco vezes./
são seguidos por um\
.Ao substituir todos
/\
,_
,_ _ _ _
e no espaço com um número de 0 a 3, podemos converter a matriz resultante de um número base 4 para uma base maior e armazenar o padrão completo de uma forma compacta.Código
fonte
C,
148144140 bytesCom espaço em branco, sem avisos do compilador e antes de algum código ser ajustado para salvar alguns bytes:
Essa abordagem não usa nenhuma tabela de caracteres / string. Ele percorre todas as 187 (11 linhas, 17 colunas, incluindo novas linhas) e decide qual caractere imprimir para cada posição, com base em uma combinação de condições.
As condições incluem um teste para estar dentro / fora dos 4 cantos, usando 4 equações de linha, com o resultado armazenado na variável
p
. O restante é repetido principalmente a cada 6 caracteres, com as linhas ímpares deslocadas em 3 caracteres em relação às linhas pares.fonte
int
.k;f(r,c,d,p){for(;k<187;putchar(c>15?10:p&d<2&p?95:p&d<3?47:!p|d-5?32:92))r=k/17,c=k++%17,d=(5+c+r%2*3)%6,p=3*r+c-7<33u&3*r-c+8<33u;}
Ruby - 78 bytes
Uma transcrição da solução da xnor (69 bytes):
fonte
11.times
salva 2 bytesJavaScript (ES6), 129
130É uma string pura substituir / substituir / substituir ... sem tirar proveito de nenhuma propriedade geométrica.
Usando cadeias de modelo, todas as novas linhas são significativas e contam.
Execute o snippet no Firefox para testar
fonte
PHP -
1391371071019187 bytesNão sei se essa é a melhor maneira de jogar golfe, mas aqui está minha tentativa:
303646-50 bytes graças a Ismael MiguelTeste online aqui
código antigo:
fonte
<?
vez de<?php
salvar 3 bytes. Em vez de$c=$a.$a."/ \\\n\__".$a.$a."/\n";
, você pode escrever$c="$a$a/ \\\n\__.$a$a/\n";
(já que o PHP expande variáveis em strings). Você pode aplicar a mesma lógica aoecho
para reduzir ainda mais o comprimento. Além disso, você não precisa desse espaço entre aecho
e a sequência.\n
, você pode colocar uma nova linha real e salvar 1 byte por linha.<?="\t __\n\t__",$a='/ \__',"\n __$a$a\n",$c="$a$a/ \\\n\__$a$a/\n","$c$c \__$a/\n\t \__/";
. Lembre-se de substituir\t
por um caractere de tabulação e\n
por uma nova linha real.Lua 146
(novas linhas adicionadas para maior clareza)
fonte
S
três vezes.Dardo - 113
Solução pura de interpolação de cordas, nada extravagante. Operações de string como "substring" são muito detalhadas para competir na prática.
Execute-o no DartPad .
fonte
Javascript ( ES7 Draft ),
969493 bytesInspiração tirada de algumas soluções aqui ...
Edit: -1 de edc65
Comentado:
fonte
.substr(+x+z,16-x-x)
->.slice(+x+z,16-x+z)
-1+x
vez de apenasx
?x
para um número. Sem ele, seria concatenadoz
Python 3,
10087 bytesE uma versão legível do código abaixo. A idéia é codificar os intervalos (começo, comprimento) e depois preencher com a quantidade correta de espaços para centralizar o intervalo.
fonte
Retina , 66 bytes
Cada linha deve ir para seu próprio arquivo e
<LF>
significa uma nova linha real no arquivo. 1 byte por arquivo extra adicionado à contagem de bytes.Você pode executar o código como um arquivo com a
-s
bandeira, mantendo os<LF>
marcadores e talvez alterando-os para novas linhas na saída para facilitar a leitura, se desejar.O algoritmo é composto por 5 etapas simples de substituição (alterar o conteúdo da linha ímpar para o conteúdo da linha par), iniciando a partir de uma sequência de entrada vazia. Os resultados após cada etapa são (delimitados por
=
's):fonte
Javascript,
154151 bytesfonte