Se le dará un entero positivo N
como entrada. Su tarea es construir un Semi-Zigzag, de N
lados, 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 OOOOOO
N = 6
:OOOOOOO OOO OOO OOO OOO OOOOOOOOOOOO
N = 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✳§⟦↘→↗→⟧ι⁻θ¹O
trabajará después de que Dennis tire,✳
siendo enviado a la direcciónPython 2 ,
157153bytesPruébalo en línea!
n*3/2*~-n+1
es 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 dep
y 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, reutilizamosp
en el bucle.i*s+s+o+…
es solo una expresión aburrida para las filas del medio.n>1>p(5)
n≯1
provocará 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-#+1
con las salidas de la función anónima constante "generar un espacio"" "&
.Do[foo,{j,#},{i,#}]
es un par de bucles anidados DO, dondej
oscila entre1
a#
y en el interior de que losi
rangos de1
a#
.m[[1[i,#,-i][[j~Mod~4]],j#-#+i+1-j]]="X"
establece la parte correspondiente de la matriz para que sea el carácterX
basado enj
yi
. El-i
utiliza la indexación negativa para salvar bytes desde#-i+1
. (Olvidé escribirMod[j,4]
comoj~Mod~4
en 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,ReplacePart
ya 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
ReplacePart
aquí.m=ReplacePart[...]
puede serm[[{1,i,#,-i}[[j~Mod~4+1]],j#-#+i+1-j]]="X"
: puedeSet
unaPart
de 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 elHead
de 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]==0
puede reemplazar conMod[z,4]<1
?Mod[#,4]
con#~Mod~4
de -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
SparseArray
objeto deString
s. Para visualizar el resultado, puede agregarloGrid@
. Lanza un error por caso1
, pero es seguro ignorarlo.Explicación
Establecer
i
yj
a 1.Establecer
k
como entrada - 1.Establecer
l
enk*input + 1
Iterar
l
tiempos, empezando por0
, incrementándose1
cada vez ...Agregue el componente imaginario de
i
aj
...Si la iteración actual es divisible por
k
, multipliquei
por la unidad imaginaria ...Cree un
Rule
objeto que cambie el elemento en la posición{j, current iteration + 1}
a"o"
Cree un
SparseArray
objeto utilizando losRule
objetos generados , con dimensión{input, l}
, utilizando" "
como en blanco.¡Pruébalo en Wolfram Sandbox!
fuente
SparseArray
cuenta como una matriz? Se puede visualizar usandoGrid
oMatrixForm
, 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.SparseArray
respuestas, 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)<1
conc+=i%~-n<1
de bytes -2if 2>n:return'o'
es bastante redundante. Hice una solución con enc+=i%[~-n,n][2>n]<1
lugar dec+=i%~-n<1
.Haskell , 197 bytes
Pruébalo en línea!
Gracias a @Lynn: arreglé los espacios entre
O
s en segmentos horizontales del zigzag, ¡pero costó muchos bytes!Algunas explicaciones:
r
es una fila de la salida: tiene el0 y y y y y 0 x x x 0 y ...
formato, el númerox
yy
dependiendo de la fila y la inicialn
x='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 n
maneja este caso.fuente
replicate n x
puede ser reemplazado porx<$[1..n]
. Además, su respuesta carece de espacios entreO
s en segmentos horizontales del zigzag.Python 2 ,
155151146137 bytesPruébalo en línea!
fuente
`L`[2::5]
''.join(L)