Vous recevrez un entier positif N
en entrée. Votre tâche consiste à construire un semi-zigzag, de N
côtés, chacun de longueur N
. Puisqu'il est relativement difficile de décrire clairement la tâche, voici quelques exemples:
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
Comme vous pouvez le voir, un semi-zigzag est composé de lignes diagonales et horizontales alternées, et il commence toujours par une ligne diagonale de haut en bas à gauche en bas à droite. Notez que les caractères sur les lignes horizontales sont séparés par un espace.
Règles
Vous pouvez choisir une non-espaces blancs caractère au lieu de
O
, il peut même être incompatible.Vous pouvez afficher / renvoyer le résultat sous forme de chaîne ou de liste de chaînes, chacune représentant une ligne .
Vous pouvez avoir une nouvelle ligne de fin ou de début.
Les échappatoires par défaut s'appliquent.
Vous pouvez prendre des entrées et fournir des sorties par n'importe quel moyen standard .
Si possible, veuillez ajouter un lien de test à votre soumission. Je vais voter pour toute réponse qui montre les efforts de golf et a une explication.
C'est le code-golf , donc le code le plus court en octets dans chaque langue gagne!
Réponses:
Fusain , 24 octets
Essayez-le en ligne!
-5 merci à Neil .
AST:
la source
FN§⟦↘→↗→⟧ι⁻Iθ¹→
(15 octets uniquement), mais les listes d'instructions ne semblent pas fonctionner correctement dans Charcoal. Dommage.FN✳§⟦↘→↗→⟧ι⁻θ¹O
fonctionnera après le retrait de Dennis,✳
étant dirigé vers la directionPython 2 ,
157153 octetsEssayez-le en ligne!
n*3/2*~-n+1
est la largeur de chaque ligne: ⌊3n / 2⌋ · (n − 1) + 1 caractères.q*n+s*(4*n-6)
représente les lignes supérieure et inférieure. Si nous le répétons et coupons,[2*(n-1):]
nous obtenons la rangée du haut; si nous coupons,[5*(n-1):]
nous obtenons la ligne du bas. D'où la définition dep
et les appels àp(2)
etp(5)
. Mais comme nous avons de toute façon besoin de la répétition et du découpage de la longueur de ligne pour toutes les autres lignes, nous les réutilisonsp
dans la boucle.i*s+s+o+…
est juste une expression ennuyeuse pour les rangées du milieu.n>1>p(5)
court-circuitera sin≯1
, causantp(5)
de ne pas être évalué. Par conséquent, c'est un raccourci pourif n>1:p(5)
.la source
Mathematica,
126125121 1211121048986 octets#
est le numéro d'entrée pour une fonction anonyme (terminé par la finale&
).m=" "&~Array~{#,#^2-#+1};
crée une matrice de caractères d'espace de la bonne taille en remplissant un tableau de dimensions données#,#^2-#+1
avec les sorties de la fonction anonyme constante "sortie d'un espace"" "&
.Do[foo,{j,#},{i,#}]
est une paire de boucles imbriquées, où Do estj
compris entre1
à#
et à l' intérieur de ce que lesi
plages de1
à#
.m[[1[i,#,-i][[j~Mod~4]],j#-#+i+1-j]]="X"
définit la partie correspondante de la matrice comme étant le caractèreX
basé surj
eti
. Le-i
utilise une indexation négative pour enregistrer les octets#-i+1
. (J'ai oublié d'écrireMod[j,4]
commej~Mod~4
dans la version originale de ce code.) Jenny_mathy a souligné que nous pouvons utiliser le résidu modulaire pour indexer directement dans la liste (plutôt que d'utiliserSwitch
) pour économiser 9 octets, et JungHwan Min a souligné que nous ne l'avons pas fait '' t besoin d'utiliserReplacePart
car nous pouvons définir une partie d'un tableau et qui1[i,#,-i][[j~Mod~4]]
utilise le comportement étrange et la généralité de[[foo]]
pour enregistrer des octets sur{1,i,#,-i}[[j~Mod~4+1]]
Vous pouvez tester cela dans le sandbox Wolfram Cloud en collant du code comme le suivant et en appuyant sur Maj + Entrée ou sur le pavé numérique Entrée:
la source
ReplacePart
ici.m=ReplacePart[...]
peut êtrem[[{1,i,#,-i}[[j~Mod~4+1]],j#-#+i+1-j]]="X"
- Vous pouvezSet
unePart
d'une liste. Cela supprime 15 octets.{1,i,#,-i}[[j~Mod~4+1]]
peut aussi l'être1[i,#,-i][[j~Mod~4]]
. Cette astuce fonctionne car[[0]]
renvoie leHead
d'une expression.C ++,
321234 octets-87 octets grâce à Zacharý
Renvoie un vecteur de chaînes
la source
Mathematica, 179 octets
modifier pour @JungHwanMin
la source
Mod[z,4]==0
être remplacé parMod[z,4]<1
?Mod[#,4]
par#~Mod~4
pour -1 octets?05AB1E ,
212019 octetsCode
Utilise le nouveau mode canevas:
Utilise l' encodage 05AB1E . Essayez-le en ligne!
Explication:
Pour l'entrée 6 , cela donne les arguments suivants (dans le même ordre) pour le canevas:
Pour expliquer ce que fait le canevas, nous choisissons le premier ensemble d'arguments dans la liste ci-dessus.
Le nombre 6 détermine la longueur de la chaîne qui sera écrite dans le canevas. Le remplissage est utilisé pour écrire sur la toile, ce qui est le cas dans ce cas
O
. Il parcourt cycliquement la chaîne de remplissage. La direction de la chaîne est déterminée par l'argument final, la direction. Les directions sont:Cela signifie que le 3 définit la direction vers le sud-est , qui peut également être essayée en ligne .
la source
SOGL V0.12 , 36 octets
Essayez-le ici!
L'idée de base est de choisir pour chaque numéro de la plage d'entrée l'ajout d'une partie diagonale ou horizontale en pointillés, auquel cas il retournera le tableau pour un ajout plus facile. Explication:
Si l'entrée de 1 n'était pas autorisée,
ο.∫2%?.╝}F2\?№@.┌Ο};1w⁄Hh1ž}.4%1>?№
cela fonctionnerait aussi. Si des nombres aléatoires flottants étaient autorisés,.∫2%?.╝}F2\?№@.┌Ο};1w⁄Hh1ž}.4%1>?№
cela fonctionnerait aussi. Si je n'étais pas paresseux et implémenté‼
,}F2%?
pourrait être remplacé par‼
pour -4 octetsla source
Mathematica,
10687 octetsRenvoie un
SparseArray
objet deString
s. Pour visualiser la sortie, vous pouvez ajouterGrid@
. Lance une erreur pour la casse1
, mais il est sûr de l'ignorer.Explication
Réglez
i
etj
sur 1.Réglez
k
sur entrée - 1.Réglez
l
surk*input + 1
Itérer les
l
temps, à partir de0
, en incrémentant à1
chaque fois ...Ajoutez le composant imaginaire de
i
àj
...Si l'itération courante est divisible par
k
, multipliezi
par l'unité imaginaire ...Créer un
Rule
objet qui change l'élément à sa position{j, current iteration + 1}
en"o"
Créez un
SparseArray
objet en utilisant lesRule
objets générés , avec dimension{input, l}
, en utilisant" "
comme blanc.Essayez-le sur Wolfram Sandbox!
la source
SparseArray
compte comme un tableau? Il peut être visualisé en utilisantGrid
ouMatrixForm
, mais je ne le compterais pas normalement comme "une liste de chaînes" ici. Si un tableau 2D de caractères suffit, cela coupe 8 octets de ma solution (12 avant l'aide de Jenny_mathy), par exemple.SparseArray
réponses, donc je suppose que ça va.Python 3 ,
228 226 224 215 197195 octets-11 octets Merci à @Mr. Xcoder
-2 octets Merci à @Mr. Xcoder
Essayez-le en ligne!
Explication et code moins golfé:
la source
c+=i%(n-1)<1
parc+=i%~-n<1
-2 octetsif 2>n:return'o'
est assez redondant. J'ai fait un contournement avecc+=i%[~-n,n][2>n]<1
au lieu dec+=i%~-n<1
.Haskell , 197 octets
Essayez-le en ligne!
Grâce à @Lynn: correction des espaces entre
O
s sur les segments horizontaux du zigzag, mais cela a coûté beaucoup d'octets!Quelques explications:
r
est une ligne de la sortie: elle a le0 y y y y y 0 x x x 0 y ...
format, le nombrex
ety
selon la ligne et l'initialen
x='0'
ety=' '
x=' '
ety=' '
x=' '
ety='0'
take(div(3*n)2*(n-1)+1)
coupe une ligne infinie au bon endroitn=1
:take n
gère ce cas.la source
replicate n x
peut être remplacé parx<$[1..n]
. De plus, il manque dans votre réponse les espaces entre lesO
s sur les segments horizontaux du zigzag.Python 2 ,
155151146 146137 octetsEssayez-le en ligne!
la source
`L`[2::5]
économise un octet de plus''.join(L)