Hoje, vamos fazer um hexágono ASCII. Você deve escrever um programa ou função que use um número inteiro positivo n e produza uma grade hexagonal de tamanho n , composta de asteriscos. Por exemplo, um hexágono de tamanho 2 se parece com isso:
* *
* * *
* *
Enquanto um hexágono de tamanho 3 se parece com isso:
* * *
* * * *
* * * * *
* * * *
* * *
Você pode usar qualquer um dos métodos de entrada e saída padrão , por exemplo, STDIO / STDOUT, argumentos de função e valores de retorno ou leitura / gravação de um arquivo.
Você pode assumir que a entrada é sempre válida; portanto, se não for um número inteiro positivo, seu programa poderá fazer o que quiser. Você não no entanto, ter de lidar com o caso especial de um hexágono tamanho 1, que acontece de ser um único asterisco:
*
Os espaços em branco à esquerda e à direita são permitidos desde que a saída seja visualmente a mesma.
Exemplos:
1:
*
2:
* *
* * *
* *
3:
* * *
* * * *
* * * * *
* * * *
* * *
4:
* * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * *
* * * * *
* * * *
5:
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
* * * * *
6:
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
12:
* * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * *
Como de costume, esse é um código de golfe , então as brechas padrão se aplicam e você deve tentar escrever o programa mais curto possível medido em bytes. É claro que alguns idiomas são inerentemente mais curtos ou mais longos que outros, portanto, lembre-se de que o objetivo não é necessariamente ter a menor contagem geral de bytes, mas vencer os envios nos mesmos idiomas ou em idiomas semelhantes.
Que ganhe o melhor jogador de golfe!
fonte
Respostas:
Hexagony + Bash Coreutils, 0 + 3 + 8 = 11 bytes
Inclui +3 para
-g
sinalizador e +8 para|tr . \*
invocação fora do padrão (consulte esta meta post )A entrada é fornecida como argumento para o Hexagony. Quando o intérprete Hexagony é chamado com a
-g N
opção, ele imprime um hexágono de.
s. Em seguida, usamos tr para substituir aqueles por*
s.fonte
hexagony -g $1|tr . \*
, por exemplo , supondo que o intérprete de hexagonia seja nomeado dessa maneira.ruby ./interpreter.rb -g 5|tr . \*
Python 2, 61 bytes
Imprime um espaço à direita no final de cada linha.
Agradecimentos a Erik, o Outgolfer, por salvar um byte.
fonte
int(input())
vez deinput()
e com aprint(' '*j+'* '*(2*n+~j))
substituição usualprint' '*j+'* '*(2*n+~j)
- código legal btw ;-)JavaScript (ES6), 77
81 84@Upvoters: não perca a resposta de @ETHproductions, ou seja, 76 bytes
Edição revisada após alteração nas especificações, espaço à direita permitido
Só pelo chapéu ... ei! Sem chapéu?
Teste
fonte
Hexagonia ,
918786 bytesExperimente online!
Finalmente consegui.
Inicialmente (antes de perceber o quanto os loops são caros), espero que isso possa caber no comprimento lateral 5, mas agora é difícil o suficiente para ajustá-lo no comprimento lateral 6.
Para conseguir isso, preciso modificar um pouco o código linear. De fato, escrever isso me faz perceber uma maneira de reduzir o código linear em
12 bytes.fonte
JavaScript (ES6),
7776 bytesEu disse a mim mesma que não iria dormir até ter estabelecido um novo recorde de ES6 sem olhar para as outras respostas, então aqui está ...
Snippet de teste
fonte
C,
91898074 bytesEu mudei para obter as fórmulas corretas e depois misturei tudo.
Ligue
f
com o número n e imprimirá o hexágono em stdout.Ungolfed e explicado (versão de 80 bytes):
Veja ao vivo em Coliru
Notas:
printf
pode lidar com preenchimento negativo, o que resulta em um caractere alinhado à esquerda com o preenchimento à direita. Assim, tentei algo para o efeito,w = printf("%*c*", y, ' ')
para que ele cuidasse do valor absoluto e pudesse recuperá-lo de seu valor de retorno. Infelizmente, as larguras de preenchimento zero e uma imprimem o caractere por si só, portanto as três linhas centrais eram idênticas.Atualização: Jasen encontrou uma maneira de fazer exatamente isso, imprimindo uma string vazia em vez de um caractere - 6 bytes raspados!
O caractere de backspace é tratado incorretamente pelo Coliru - a execução desse código em um terminal local remove o espaço inicial em cada linha.
fonte
w=printf("\n%*s",abs(y),"");++w<s*printf(" *");
05AB1E ,
1413 bytesCódigo:
Explicação:
Usa a codificação CP-1252 . Experimente online!
fonte
Gelatina , 24 bytes
Experimente online!
A geléia tem vergonha do fato de não ter um átomo de centralização, por isso é batida por 05AB1E e V. Por 11 e 7 bytes, respectivamente!
Se você encontrar alguma maneira de jogar isso, comente. Qualquer ajuda é apreciada.
Explicação :
Bônus: Para descobrir quantas estrelas existem em um hexágono, use o seguinte:
fonte
Oitava,
6258 bytesResposta anterior:
que pode ser chamado como
Experimente (cole) no Octave Online
Por exemplo, a imagem base para
n=5
éque pode ser criado com
O
dilation morphological operator
aplicado 4 vezes na imagem usando a seguinte máscara de vizinho:que pode ser criado com
[k='01010'-48;~k;k]
resultado da dilatação:
substitua 0 e 1 por '' e '*' respectivamente
fonte
postgresql9.6, 290 bytes
sql formatado está aqui:
resultado:
fonte
lpad
poderá economizar alguns bytes. Eu também chamaria o idioma pl / pgsql, mas isso levanta questões sobre se você precisa contardo language plpgsql $$
o fechamento e o fechamento$$;
. Isso seria melhor abordado na meta, se não surgiram antes.DECLARE
s? Um único não funcionaria?V , 17 bytes
Experimente online!
Como de costume, aqui está um hexdump, pois contém caracteres não imprimíveis:
fonte
APL (Dyalog Unicode) ,
403635332725 bytesAssume
⎕IO←0
, ou seja, indexação baseada em zero. A saída contém um espaço à esquerda e um à direita em cada linha.Muito obrigado a @FrownyFrog e @ngn por muito golfe.
Experimente online!
Como funciona
fonte
JavaScript (ES6),
8381 bytesEsta é minha primeira resposta (código golf). Espero ter formatado tudo corretamente.
Diferentemente das 2 respostas atuais do ES6, não estou chamando recursivamente uma função e estou usando o console para saída.
fonte
alert
se especificar o navegador js?alert
editasse, alertaria linha por linha, e não a coisa toda.Haskell,
999779 bytesExplicação: Este programa é baseado na observação de que cada linha de um n-Hexágono contém espaços (nk) seguidos por asteriscos (n + k-1), para alguns k dependentes do número da linha.
Editar: Alterado para mapM_. Eu não sabia que estava disponível sem usar a importação
fonte
Python 2 ,
100978988878179 bytes-1 de @ Flp.Tkc
-6 novamente a partir @Flp
-2 com agradecimentos a @ nedla2004. Eu estava tentando descobrir como me livrar da segunda fatia, mas não pensei nessa :)
Experimente online!
Cria uma matriz para a metade superior e depois adiciona a matriz reversa menos a linha do meio e depois imprime. Imprime exatamente "como está", além do
1
que imprime com um espaço à esquerda (acho que isso é permitido como a*
é visualmente o mesmo que um*
com ou sem um espaço à esquerda).fonte
Lote, 161 bytes
Nota: Trailing space na linha 2. Ungolfed:
fonte
JavaScript (ES6), 83 bytes
fonte
Tela , 9 bytes
Experimente aqui!
Vencendo o built-in: D
Explicação:
Não faço ideia do porquê do estofamento enorme, mas é permitido e estou corrigindo isso em breve ™.fixo? Espero não ter quebrado coisasfonte
Perl 6 , 49 bytes
Experimente online!
Como funciona
fonte
Powershell,
91897868635248 bytesScript de teste:
Saída (espaço extra à esquerda):
Explicação:
fonte
gu
.PHP,
8379 bytesExecute como pipe
-nR
ou experimente online .Isso é próximo da resposta de Kodos ; mas
str_pad
é mais curto do questr_repeat
quando jogado.E a
++
cabeça do laço economiza um pouco mais.fonte
Ruby, 54 bytes
A função lambda recebe n como argumento e retorna uma sequência separada por novas linhas. (
$/
é uma variável que contém o separador de linhas padrão.)no programa de teste
fonte
puts
) na contagem de caracteres. Mas, relendo a definição, ela diz apenas que sua função deve "gerar" o resultado que pode ser lido como "retornar" o resultado. Solução legal.Charly, 125 bytes
Página Charly GitHub: https://github.com/KCreate/charly-lang
fonte
SmileBASIC, 74 bytes
Adiciona um espaço inicial e final.
Esses "hexágonos" parecem horríveis quando os caracteres têm a mesma largura e altura ...
fonte
raquete / esquema
Testando:
fonte
Python 2, 111 bytes
Uma implementação chata e direta (e um programa completo). Gera um espaço em branco à direita em cada linha.
Casos de teste:
fonte
Javascript (ES6), 143 bytes
Finalmente é feriado de Natal (feliz Natal!), Então tenho tempo para jogar golfe.
E garoto, já faz um tempo - daí a grande contagem de bytes.
Aqui vai:
fonte
for(j=c.length-2;j>-1;j--)c.push(c[j])
podem ser escritas comofor(j=a-1;j;c.push(c[--j]))
efor(i=0;i<a;i++){c.push(" ".repeat(a-i-1)+"* ".repeat(i+a-1)+"*")}
podem serfor(i=0;i<a;c.push(" ".repeat(a-i-1)+"* ".repeat(a-1+i++));
. A declaração de retorno pode ser reduzida parareturn a-1?c.join
\ n:"*"
No total, essas alterações economizam 18B (11 + 7 + 1).Java,
157149129127 bytesExperimente online!
fonte
String#repeat(int)
, mas o TIO ainda é o JDK 10, portanto, orepeat(String,int)
método emulado (com a mesma contagem de bytes). O código real em Java 11 seria:s->{for(int j=~--s,t;++j<=s;System.out.println(" ".repeat(t)+"* ".repeat(s-~s-t)))t=j<0?-j:j;}
Hexagonia (linear),
128127126 bytesObserve que isso não é Hexagony, apenas um (meta) idioma Timwi suportado no IDE esotérico, portanto, não é elegível para a recompensa.
No entanto, isso pode ser convertido em uma solução Hexagony
(e acho que será menor que essa solução). Posso fazer isso mais tarde. É preciso mais esforço queeu fiz aqui .A inicial
❢
ocupa 3 bytes (e2 9d a2
). Cada nova linha ocupa 1 byte (0a
).Não Experimente online !. Isso funciona apenas no IDE esotérico.
Código anotado:
fonte
Japt
-R
,1110 bytesExperimente (ou use o TIO para executar vários testes)
Explicação
fonte