Escriba un programa o función que tome un entero positivo N y genere los primeros N números de este patrón de zigzag amplificador, usando solo las líneas necesarias:
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
Entonces, si N es 1
la salida es
1
Si N es 2
, la salida es
2
1
Si N es 3
la salida es
2
1 3
Si N es 4
la salida es
2
1 3
4
Si N es 10
la salida es
10
9
2 8
1 3 7
4 6
5
Si N es 19
la salida es
10
9 11
2 8 12
1 3 7 13
4 6 14
5 15 19
16 18
17
y así.
Notas
Cada pico o valle del zigzag alcanza su punto una línea más lejos de la línea con el
1
mismo que el pico o valle anterior.N no se limita a
44
. El zigzag crece en el mismo patrón y se debe admitir N más grande.Los números con varios dígitos solo deben "tocarse" en sus esquinas, como se muestra. Asegúrese de que esto funcione cuando N sea
100
y superior.No debe haber líneas vacías (o solo espacio) en la salida, excepto una nueva línea final opcional.
Cualquier línea puede tener cualquier cantidad de espacios finales.
Tanteo
El código más corto en bytes gana. Tiebreaker es la respuesta anterior.
Respuestas:
Jalea ,
413729 bytesPruébalo en línea!
Cómo funciona
fuente
PHP,
211177164163 bytesPredecir los picos con
$n
y aumentar la matriz dinámicamente en cualquier dirección, utilizando($x, $y)
el cursor de salida.Los números están alineados
str_pad()
y el resultado final es elimplode()
de esa matriz de cadenas ($g
).¡Pruébalo en línea!
Actualización: eliminó 34 bytes al deshacerse del array_pad () innecesario. Actualización2: siguió los consejos de @ insertusernamehere para acortarlo un poco más. Actualización 3: siguió el consejo de @ Lynn de guardar un byte más con ~ õ que impone el uso del juego de caracteres LATIN-1. (no disponible en el emulador PHP en línea, por lo que no está incluido allí)
fuente
$arr = [];
, puede consultar$arr[anything]
. Algunos casos generarán avisos, pero estos se ignoran aquí. Tenga en cuenta que leer cosas como esta probablemente no lo ayudará mucho a aprender un idioma. Sin embargo, su comentario me hizo darme cuenta de que podría acortarlo, ya que inicialmente pensé que necesitaría rellenar mi matriz, pero no lo hago. :)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);
(Reemplace ⏎ con una nueva línea real.)~õ
es una alternativa de dos bytes a"⏎"
.Pyth,
6053524642393836343231 bytes39: Ahora está a la par con la versión de Jelly corregida por errores , ¡y he superado la versión competitiva de Dennis!
38: ¡He superado a Dennis!
36: ¡He superado a Dennis nuevamente!
34: ¡Incluso más bajo que su versión corregida!
31: 32 -> 31 gracias a Dennis.
Pruébalo en línea!
Cómo funciona
fuente
MATLAB, 148 bytes
Tenga en cuenta que faltan espacios en Octave, ya que MATLAB imprime el carácter indexado
0
como un espacio, mientras que octave simplemente omite ese carácter.Explicación:
fuente
Haskell,
144142 bytesEjemplo de uso:
Cómo funciona:
Editar: ¡Gracias @Lynn por dos bytes!
fuente
JavaScript (ES6), 213 bytes
Donde
\n
representa un carácter de nueva línea literal. Explicación:Para acortarlo,
pow(-1,ceil(sqrt(i)))
lo reescribo porque,sqrt(i-1)&1||-1
sin embargo, esto no funciona,i=0
así que para solucionarlo, agrego 1, pero luego voltea el signo del resultado, por lo que termino conn-=
.fuente
Python 2, 137 bytes
Ver el resultado en ideone .
fuente