Dada a espiral de tamanho S
e o degrau N
, produza a S*S
espiral "quadrada" com N
asteriscos, construída do raio externo para o interno no sentido horário.
Casos de teste (exemplos) abaixo.
Entrada:
4 3
Saída:
***
Entrada:
4 6
Saída:
**** * *
Entrada:
4 11
Saída:
**** * * * ****
Entrada:
6 18
Saída:
****** * * * * * * ******
Entrada:
6 22
Saída:
****** *** * * * * * * * ******
Entrada:
6 27
Saída:
****** ****** * ** * ** * ** ******
Entrada:
1 1
Saída:
*
Não é necessário lidar com os casos quando:
desde que
N
asteriscos não possam "encaixar" na espiral de determinadasS*S
dimensões.um
N
ouS
é zero.
O desafio é o código-golfe, os bytes mais curtos respondem a vitórias, qualquer idioma pode ser usado.
Sua saída pode ter quantos espaços / linhas à direita (mas não à esquerda) desejados.
S
o tamanho (ou pelo menos de diâmetro ) em vez de raioRespostas:
MATL ,
1716 bytesExperimente online!
Explicação (com exemplo)
Considere entradas
4
e11
como um exemplo.fonte
Stax , 19 bytes
Execute e depure
Começa construindo uma string que possui todos os caracteres no resultado com todos os asteriscos alinhados à esquerda. Em seguida, ele pega fatias cada vez maiores do final da corda e as "envolve" em uma grade à medida que gira a grade.
Aqui está o mesmo programa, descompactado, não destruído e comentado.
Execute e depure
fonte
Python 2 , 117 bytes
Experimente online!
fonte
APL (Dyalog) , 65 bytes
Experimente online!
O código para a matriz espiral é retirado de outra resposta minha .
fonte
N
é estranho :)PHP, 118 bytes
ajustei e joguei minha solução para a Alphabet Spiral .
Corra com
php -nr '<code>' <S> <N>
ou experimente online .fonte
Python 2 , 150 bytes
Experimente online!
fonte
Carvão , 34 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Entrada
N
.Os comprimentos dos braços espirais (excluindo os cantos) são
S-1
,S-1
,S-1
,S-2
,S-2
,S-3
, ...,3
,2
,2
,1
,1
,1
. Isso é formado começando pelo intervalo de0
até, mas excluindo2S
, alterando o 0 para 1, revertendo-o, adicionando 1 a cada elemento após o primeiro e, finalmente, inteiro, dividindo todos os elementos por 2. Essa lista é repetida.Se houver menos estrelas para desenhar do que o comprimento do próximo braço, reduza o braço para esse comprimento.
Desenhe o número apropriado de estrelas.
Subtraia o número de estrelas restantes.
Gire a direção do desenho 90 ° no sentido horário.
fonte
J,
6056 bytes-4 bytes, modificando o processo de construção da espiral, de modo que subtraí-la de y ^ 2 era desnecessária
Experimente online!
Explicação em
breveagora.Explicação:
Exemplos:
fonte
Kotlin ,
361355353334 bytes6 bytes salvos graças a Jonathan
2 bytes salvos mudando para quando
19 bytes salvos mudando para lambda e rastreando bordas externas
Experimente online!
fonte
==' '
possa ser substituído por<'*'
. Tambémd==0
comd<1
ed==3
comd>2
. Parece golfe bastante fundamental, então provavelmente existem outros também!Java 10,
284282281263 bytesUm desafio divertido!
Experimente online aqui .
Agradecimentos a Kevin Cruijssen por jogar 18 bytes.
Versão não destruída:
fonte
var b
é adicionado para que você só tem que fazer ox>0?i<u:i>l
ey>0?j<u:j>l
uma vez cada, em vez de duas vezes cada um.JavaScript (Node.js) ,
167164163 bytes,
vez de mapa (1 byte)Experimente online!
fonte
return a.join` `.split`,`.join``
..split
, `saída doesnt .join`` a espiral "bem"(com novas linhas), então eu acho que é um problema