Escreva um programa ou função que receba um número inteiro positivo N e emita os primeiros números N desse padrão em zigue-zague de amplificação, usando apenas as linhas necessárias:
26
25 27 .
10 24 28 .
9 11 23 29 .
2 8 12 22 30 44
1 3 7 13 21 31 43
4 6 14 20 32 42
5 15 19 33 41
16 18 34 40
17 35 39
36 38
37
Então, se N é 1
a saída é
1
Se N for 2
, a saída é
2
1
Se N é 3
a saída é
2
1 3
Se N é 4
a saída é
2
1 3
4
Se N é 10
a saída é
10
9
2 8
1 3 7
4 6
5
Se N é 19
a saída é
10
9 11
2 8 12
1 3 7 13
4 6 14
5 15 19
16 18
17
e assim por diante.
Notas
Cada pico ou calha do zigue-zague atinge seu ponto a mais uma linha da linha com a
1
do que o pico ou calha anterior.N não está limitado a
44
. O ziguezague cresce no mesmo padrão e N maior deve ser suportado.Números com vários dígitos devem "tocar" apenas nos cantos, conforme mostrado. Verifique se isso funciona quando N está
100
acima.Não deve haver linhas vazias (ou apenas espaço) na saída, exceto uma nova linha à direita opcional.
Qualquer linha pode ter qualquer quantidade de espaços à direita.
Pontuação
O código mais curto em bytes vence. O desempatador é a resposta anterior.
Respostas:
Geléia ,
413729 bytesExperimente online!
Como funciona
fonte
PHP,
211177164163 bytesPreveja os picos com
$n
e aumente a matriz dinamicamente em qualquer direção, usando($x, $y)
o cursor de saída.Os números estão alinhados
str_pad()
e a saída final é aimplode()
dessa matriz de strings ($g
).Teste online!
Atualização: removidos 34 bytes, livrando-se do desnecessário array_pad (). Update2: seguiu o conselho de @ insertusernamehere para reduzi-lo um pouco mais. Update3: seguiu o conselho de @ Lynn de salvar mais um byte com ~ õ, o que impõe o uso do conjunto de caracteres LATIN-1. (não está disponível no emulador PHP online, portanto não está incluído)
fonte
$arr = [];
, você pode consultar$arr[anything]
. Alguns casos produzirão avisos, mas esses serão ignorados aqui. Observe que ler coisas como essa provavelmente não ajudará muito a aprender um idioma. Seu comentário me fez perceber que eu poderia reduzi-lo ainda mais, pois inicialmente pensei que precisaria preencher minha matriz, mas não preciso. :)for($x=0,$d=-1,$h=$n=2,$y=$a=1;$a<=$argv[1];$y+=$d){$g[$y]=str_pad($g[$y],$x).$a;$x+=strlen($a);if($a++==$n){$h+=2;$n+=$h-1;$d*=-1;}}ksort($g);echo implode("⏎",$g);
(Substitua ⏎ com uma nova linha real.)~õ
é uma alternativa de dois bytes para"⏎"
.Pitão,
6053524642393836343231 bytes39: Agora está em pé de igualdade com a versão corrigida por bug do Jelly , e eu superei a versão concorrente de Dennis!
38: Eu tenho Dennis fora de golfe!
36: Dennis voltou a jogar golfe!
34: Ainda mais baixo que a versão corrigida por erros!
31: 32 -> 31 graças a Dennis.
Experimente online!
Como funciona
fonte
MATLAB, 148 bytes
Observe que os espaços estão ausentes no Oitava, pois o MATLAB imprime o caractere indexado com
0
como espaço, enquanto a oitava apenas omite esse caractere.Explicação:
fonte
Haskell,
144142 bytesExemplo de uso:
Como funciona:
Edit: Obrigado @Lynn por dois bytes!
fonte
JavaScript (ES6), 213 bytes
Onde
\n
representa um caractere literal de nova linha. Explicação:Para encurtar
pow(-1,ceil(sqrt(i)))
, reescrevo-o, pois,sqrt(i-1)&1||-1
no entanto, isso não funciona,i=0
portanto, para corrigir o problema, eu adiciono 1, mas isso muda o sinal do resultado e é por isso que eu acabon-=
.fonte
Python 2, 137 bytes
Veja a saída no ideone .
fonte