Problema
Inspirado por um desafio anterior, fazendo algo semelhante
Dada a entrada inteira positiva produz n
uma forma que segue esse padrão:
entrada n=1
:
* *
*
* *
entrada n=2
:
** **
****
**
****
** **
entrada n=3
:
*** ***
*** ***
*****
***
*****
*** ***
*** ***
e assim por diante...
Possui estas propriedades:
n*2+1
linhas de altura
os "braços" são n
largos, exceto quando se fundem
a linha central é n
larga
se n
é que as linhas acima e abaixo do centro são n*2
largas
se n
for ímpar, as linhas acima e abaixo do centro são n*2-1
largas
Regras
- Novas linhas à direita aceitas
- Aplicam-se brechas padrão
- Menor bytes de vitória
- A saída pode ser impressa ou uma sequência ou matriz de sequências
Edições
n=0
não precisa ser manuseado- Espaços à direita permitidos
1
em vez de*
e0
em vez de espaço?Respostas:
Carvão ,
1312 bytesObrigado a @ErikTheOutgolfer por um byte
Experimente online!
Esta é a minha primeira resposta a carvão, e tenho certeza de que não é tão bem quanto poderia ser, mas achei que começaria em algum lugar.
fonte
I
para -1.MATL , 16 bytes
Experimente online!
Explicação
Considere a entrada
2
como um exemplo. O conteúdo da pilha é mostrado com os mais recentes abaixo.fonte
Gelatina , 15 bytes
Experimente online!
fonte
»
vetoriza ...V ,
1817 bytesSalvei um byte graças ao truque de entrada de @ DJMcMayhem.
Experimente online!
Explicação
Isso insere
[n]*'*'+[n]*' '+[n]*'*'
Cada iteração do loop do buffer passa de
Para
Onde
|
está o cursor com um por*
baixofonte
Àé*ÄJÀäl
vez deÀá*Àá Àá*
, e você pode<M-c>
, por exemploã
(mnemônico: centro ), mover-se para o meio da linha, que é um byte menor queÀl
. Experimente online!<M-c>
pausas para números mais altos05AB1E , 18 bytes
Experimente online!
Explicação
Exemplo para
n=2
fonte
V , 23 bytes
Experimente online!
Hexdump:
Por qualquer motivo, esse desafio é significativamente mais difícil em V do que o último. Como nossa abordagem geral de n vezes, crescer um 'x' não funcionará aqui, em vez disso, construiremos a parte superior do X, copiá-lo e invertê-lo e, em seguida, anexar as duas partes.
Explicação:
Fazer o recuo no final do loop permite tirar vantagem de terminações implícitas . Isso também cria convenientemente n + 1 linhas, que é exatamente a metade superior do 'X'. Digamos que a entrada foi 4. Então, neste ponto, o buffer fica assim:
E nós estamos na última linha. Então nós:
fonte
ãxx
coisa a princípio, mas acho que quebra por exemplo n = 8?ãl
, ou se você recuar antes de centralizar, mas isso não salva nenhum bytes. Eu não entendo por que ele funciona para números menores.C #,
139 130115 bytes-1 byte, criando uma string e chamando
WriteLine
, salvando a verificação da nova linha.-6 bytes graças a Kevin e suas técnicas principais de golfe!
-2 bytes substituindo
n*3-n
porn*2
.-15 bytes depois que Kevin gentilmente me apontou na direção certa: posso retornar a string em vez de imprimi-la, salvando a chamada em
System.Console.WriteLine()
. E algumas outras dicas também ...Experimente online!
Ungolfed:
Ele apenas percorre as linhas e colunas do espaço necessário para imprimir o X grande e imprime um
'*'
ou um,' '
dependendo da condição.fonte
&&
pode ser&
e||
pode ser|
neste caso.for(int j=0;
pode serfor(int j=0,i;
e, em seguida, você pode remover oint
na frente doi
no loop interno. Além disso, após a primeira alteração de&
e|
, você também pode remover oi++
interior do loop for e alterari==n*3-1?...
parai++==n*3-1?...
.WriteLine
, salvo apenas 1 byte. Então agora não tenho certeza do que fazer com seu último conselho.System.Console.WriteLine
? Retornando a string:n=>{string s="";for(int i,j=0;j<n*2+1;j++,s+="\n")for(i=0;i<n*3;)s+=i>=j&i<j+n|i<=n*3-j-1&i++>n*2-j-1?'*':' ';return s;}
é mais curto [ 120 bytes ] (e também se livra dos colchetes, colocando tudo dentro do loop for. Aqui está um link TIO para mostrar que funciona. Além disso, fique à vontade para adicionar isso (ou o seu) TIO-link para a sua resposta :).WriteLine
no código porque o OP solicitou a saída do X grande, não apenas para devolvê- lo, então achei que a saída do X (chamando oWriteLine
método) deveria fazer parte do código. No entanto, ainda não estou acostumado com as regras do code-golf e não sei quais licenças posso tirar ao escrever o código. Acabei de ver que algumas das outras respostas aqui imprimem o X no código, e outras imprimem no rodapé. Qual é a abordagem válida neste caso?j<n*2+1
pode serj<=n*2
. Também criei uma porta Java 8 da sua resposta com a mesma contagem de bytes, creditando sua resposta incrível, é claro.Haskell ,
888786 bytes-1 graças a @Laikoni
Experimente online!
fonte
zipWith max m(reverse m)
pode ser reduzido parazipWith max(reverse m)m
. É o mesmo quezipWith max=<<reverse$m
, em
pode ser incorporado: Experimente online!Geléia ,
242316 bytesExperimente online!
fonte
MATLAB,
153126 bytes (17,6% ↓)Graças ao comentário do @ LuisMendo, a função
disp()
pode gerar caracteres sem aspas simples, assim eu poderia impedir o usofprintf
comformats
e omitir alguns bytes. Além disso, o comentário dele me lembra que eu preciso usarchar(32)
para apresentar um espaço em vez dechar(0)
(nulo).Experimente online!
MATLAB, 153 bytes
Exemplo de resultado: n = 10
fonte
Python 2 ,
93908983 bytes-3 bytes graças a Freira Furada
-1 byte graças a Zachary T
-6 bytes graças a xnor
[Experimente online!] [TIO-j3xwsktf]
Começa com uma sequência como
'*** '
forn=3
, aplicando-semap/max
para selecionar os*
espaços excedentes para cada posição, depois acrescente um espaço e remova o último caractere da sequência e faça tudo isso de novo.fonte
n*2*' '
comn*' '
?map(max
pode ser feito diretamente sem azip
. Além disso,n*2+1
én-~n
.Haskell , 70 bytes
Experimente online!
Produz uma lista de strings.
Para cada posição da linha
r
, colunac
, usa uma fórmula para determinar se ela cai em uma das duas bandas diagonais e assim é*
.fonte
Java 8,
119118 bytesPorto da incrível resposta C # de @CarlosAlejo , depois que eu o ajudei a jogar algumas coisas. Portanto, certifique-se de votá-lo também!
Experimente aqui.
fonte
Javascript (ES2017),
155157 bytesRetorna uma matriz de seqüências de caracteres. Eu executo operações em matrizes e espelho. Provavelmente isso poderia ser otimizado com matrizes como as outras respostas, mas eu queria ser único.
Edit: Como apontado por Neil, para valores pares de
n
, a linha central não eran
larga, então eu adicionei um módulo para detectar pares / ímpares ao cortar a coluna.Ungolfed
Quadrante
Espelhado horizontalmente
Espelhado verticalmente
fonte
n
- a linha central não én
larga.Mathematica, 148 bytes
fonte
R, 102 bytes
Código:
Teste:
fonte
CJam, 24 bytes
Este é um bloco que pega um número da pilha e gera uma lista de linhas para a pilha.
Explicação:
fonte
Python 2 , 110 bytes
Este programa divide cada linha em 4 partes, primeiros espaços, primeiras estrelas, segundos espaços e depois segundas estrelas. Para cada linha horizontal do X, ele calcula quantas estrelas ou espaços são necessários para cada uma das 4 seções da linha e depois constrói e imprime essa sequência.
fonte
Retina , 144 bytes
Experimente online! Explicação:
Adicione 2n + 1 espaços antes do valor de entrada (um para cada linha de saída).
Substitua cada espaço por a
#
e colete os resultados. Isso fornece uma linha diagonal de#
s, preenchida com espaço em ambos os lados, com o valor de entrada com sufixo.Exclua o valor de entrada original, pois agora temos uma cópia em cada linha.
Construa duas linhas diagonais de n
*
s, com uma coluna separadora den
espaços envolvida em um par de#
s.Nas linhas em que os
*
s estão mais próximos do meio, troque as duas metades. Isso dá uma aparência semelhante> | | <
.Mova os
| |
s para a esquerda o máximo possível, dando uma>> > <
aparência.Para cada espaço entre os
#
, exclua os três caracteres a seguir. Isso une o> <
em umX
.Exclua os
#
s agora desnecessários .fonte