Se le dará un entero positivo Ncomo entrada. Su tarea es construir un Semi-Zigzag, de Nlados, cada uno de longitud N. Dado que es relativamente difícil describir claramente la tarea, aquí hay algunos ejemplos:
N = 1:O
N = 2:O OO
N = 3:OO OO OOO
N = 4:OOOOO OO OO OOOO
N = 5:OOOOOO OOO OOO OOO OOOOOON = 6:OOOOOOO OOO OOO OOO OOO OOOOOOOOOOOON = 7:OOOOOOOOO OOOO OOOO OOOO OOOO OOOO OOOOOOOOOOOOOO
Como puede ver, un Semi-Zigzag está hecho de líneas diagonales y horizontales alternas, y siempre comienza con una línea diagonal superior izquierda a inferior derecha. Tenga en cuenta que los caracteres en las líneas horizontales están separados por un espacio.
Reglas
Usted puede elegir cualquier no está en blanco personaje en lugar de
O, incluso puede ser inconsistente.Puede generar / devolver el resultado como una Cadena o como una lista de Cadenas, cada una representando una línea .
Es posible que tenga una nueva línea al final o al final.
Se aplican las lagunas predeterminadas .
Puede tomar entrada y proporcionar salida por cualquier medio estándar .
Si es posible, agregue un enlace de prueba a su envío. Voy a votar cualquier respuesta que muestre los esfuerzos de golf y tenga una explicación.
Este es el código de golf , por lo que gana el código más corto en bytes en cada idioma .

Respuestas:
Carbón de leña , 24 bytes
Pruébalo en línea!
-5 gracias a Neil .
AST:
fuente
FN§⟦↘→↗→⟧ι⁻Iθ¹→(15 bytes solamente), pero las listas de direcciones no parecen funcionar correctamente en Charcoal. Una pena.FN✳§⟦↘→↗→⟧ι⁻θ¹Otrabajará después de que Dennis tire,✳siendo enviado a la direcciónPython 2 ,
157153bytesPruébalo en línea!
n*3/2*~-n+1es el ancho de cada línea: ⌊3n / 2⌋ · (n − 1) + 1 caracteres.q*n+s*(4*n-6)representa las filas superior e inferior. Si lo repetimos y cortamos[2*(n-1):], obtenemos la fila superior; si cortamos[5*(n-1):]obtenemos la fila inferior. De ahí la definición depy las llamadas ap(2)yp(5). Pero dado que necesitamos la repetición y el corte de longitud de línea para todas las demás líneas de todos modos, reutilizamospen el bucle.i*s+s+o+…es solo una expresión aburrida para las filas del medio.n>1>p(5)n≯1provocará un cortocircuito sip(5)no se evalúa. Por lo tanto, es la abreviatura deif n>1:p(5).fuente
Mathematica,
1261251211121048986 bytes#es el número de entrada para una función anónima (finalizada por la final&).m=" "&~Array~{#,#^2-#+1};crea una matriz de caracteres de espacio del tamaño correcto rellenando una matriz de dimensiones dadas#,#^2-#+1con las salidas de la función anónima constante "generar un espacio"" "&.Do[foo,{j,#},{i,#}]es un par de bucles anidados DO, dondejoscila entre1a#y en el interior de que losirangos de1a#.m[[1[i,#,-i][[j~Mod~4]],j#-#+i+1-j]]="X"establece la parte correspondiente de la matriz para que sea el carácterXbasado enjyi. El-iutiliza la indexación negativa para salvar bytes desde#-i+1. (Olvidé escribirMod[j,4]comoj~Mod~4en la versión original de este código). Jenny_mathy señaló que podemos usar el residuo modular para indexar directamente en la lista (en lugar de usarSwitch) para guardar 9 bytes, y JungHwan Min señaló que no ' No es necesario usarlo,ReplacePartya que podemos establecer una parte de una matriz y que1[i,#,-i][[j~Mod~4]]utiliza el comportamiento extraño y la generalidad de[[foo]]guardar bytes sobre{1,i,#,-i}[[j~Mod~4+1]]Puede probar esto en el sandbox de Wolfram Cloud pegando código como el siguiente y presionando Shift + Enter o el teclado numérico Enter:
fuente
ReplacePartaquí.m=ReplacePart[...]puede serm[[{1,i,#,-i}[[j~Mod~4+1]],j#-#+i+1-j]]="X": puedeSetunaPartde una lista. Eso elimina 15 bytes.{1,i,#,-i}[[j~Mod~4+1]]También puede ser1[i,#,-i][[j~Mod~4]]. Este truco funciona porque[[0]]devuelve elHeadde una expresión.C ++,
321234 bytes-87 bytes gracias a Zacharý
Devuelve un vector de cadenas
fuente
Mathematica, 179 bytes
editar para @JungHwanMin
fuente
Mod[z,4]==0puede reemplazar conMod[z,4]<1?Mod[#,4]con#~Mod~4de -1 bytes?05AB1E ,
212019 bytesCódigo
Utiliza el nuevo modo de lienzo:
Utiliza la codificación 05AB1E . Pruébalo en línea!
Explicación:
Para la entrada 6 , esto proporciona los siguientes argumentos (en el mismo orden) para el lienzo:
Para explicar lo que hace el lienzo, elegimos el primer conjunto de argumentos de la lista anterior.
El número 6 determina la longitud de la cadena que se escribirá en el lienzo. El relleno se usa para escribir en el lienzo, que en este caso es
O. Se ejecuta cíclicamente a través de la cadena de relleno. La dirección de la cadena está determinada por el argumento final, la dirección. Las direcciones son:Esto significa que el 3 establece la dirección hacia el sureste , que también se puede probar en línea .
fuente
SOGL V0.12 , 36 bytes
Pruébalo aquí!
La idea básica es para cada número del rango de entrada elegir agregar una parte diagonal u horizontal punteada, en cuyo caso cambiará la matriz para facilitar la adición. Explicación:
Si no se permitiera la entrada de 1, entonces
ο.∫2%?.╝}F2\?№@.┌Ο};1w⁄Hh1ž}.4%1>?№también funcionaría. Si se permitieran números aleatorios flotando.∫2%?.╝}F2\?№@.┌Ο};1w⁄Hh1ž}.4%1>?№también funcionaría. Si no fuera flojo e implementado‼,}F2%?podría ser reemplazado‼por -4 bytesfuente
Mathematica,
10687 bytesDevuelve un
SparseArrayobjeto deStrings. Para visualizar el resultado, puede agregarloGrid@. Lanza un error por caso1, pero es seguro ignorarlo.Explicación
Establecer
iyja 1.Establecer
kcomo entrada - 1.Establecer
lenk*input + 1Iterar
ltiempos, empezando por0, incrementándose1cada vez ...Agregue el componente imaginario de
iaj...Si la iteración actual es divisible por
k, multipliqueipor la unidad imaginaria ...Cree un
Ruleobjeto que cambie el elemento en la posición{j, current iteration + 1}a"o"Cree un
SparseArrayobjeto utilizando losRuleobjetos generados , con dimensión{input, l}, utilizando" "como en blanco.¡Pruébalo en Wolfram Sandbox!
fuente
SparseArraycuenta como una matriz? Se puede visualizar usandoGridoMatrixForm, pero normalmente no lo consideraría como "una lista de cadenas" aquí. Si una matriz 2D de caracteres es suficiente, eso corta 8 bytes de mi solución (12 antes de la ayuda de Jenny_mathy), por ejemplo.SparseArrayrespuestas, por lo que supongo que está bien.Python 3 ,
228 226 224 215 197195 bytes-11 bytes Gracias a @Mr. Xcoder
-2 bytes Gracias a @Mr. Xcoder
Pruébalo en línea!
Explicación y código menos golfizado:
fuente
c+=i%(n-1)<1conc+=i%~-n<1de bytes -2if 2>n:return'o'es bastante redundante. Hice una solución con enc+=i%[~-n,n][2>n]<1lugar dec+=i%~-n<1.Haskell , 197 bytes
Pruébalo en línea!
Gracias a @Lynn: arreglé los espacios entre
Os en segmentos horizontales del zigzag, ¡pero costó muchos bytes!Algunas explicaciones:
res una fila de la salida: tiene el0 y y y y y 0 x x x 0 y ...formato, el númeroxyydependiendo de la fila y la inicialnx='0'yy=' 'x=' 'yy=' 'x=' 'yy='0'take(div(3*n)2*(n-1)+1)corta una fila infinita en el lugar correcton=1:take nmaneja este caso.fuente
replicate n xpuede ser reemplazado porx<$[1..n]. Además, su respuesta carece de espacios entreOs en segmentos horizontales del zigzag.Python 2 ,
155151146137 bytesPruébalo en línea!
fuente
`L`[2::5]''.join(L)