Considérez cette spirale
###########
#
# #######
# # #
# # ### #
# # # # #
# # # # #
# # # #
# ##### #
# #
#########
Départ au centre:
- La première ligne (vers le haut) comporte 3 caractères.
- La deuxième ligne a le même nombre de caractères (3)
- Ensuite, nous ajoutons deux caractères (5) pour les deux côtés suivants.
- Ce motif se poursuit, deux côtés de la même longueur puis augmentez la longueur de 2.
Je veux générer cette spirale pour N lignes.
- Écrivez dans n'importe quelle langue.
- L'entrée / argument, etc. est le nombre de lignes dans votre spirale.
- Chaque ligne commence par le caractère de fin de la ligne précédente dans le sens des 90 degrés dans le sens horaire de la ligne précédente.
- Je me fiche de la quantité d'espace blanc avant ou après chaque ligne, tant que les éléments de la spirale s'alignent.
- Texte de sortie pour dessiner la spirale avec n'importe quel caractère non blanc que vous choisissez.
- Essayez de le faire dans le plus petit nombre d'octets.
Cas de test (en utilisant un hachage en sortie):
N = 1
#
#
#
N = 2
###
#
#
N = 3
###
# #
# #
#
#
N = 10
###########
#
# #######
# # #
# # ### #
# # # # #
# # # # #
# # # #
# ##### #
# #
#########
*
au lieu de#
. Attendu?Réponses:
05AB1E ,
1311 octetsCode:
Merci à Emigna d' avoir économisé deux octets!
Utilise l' encodage 05AB1E . Essayez-le en ligne!
Explication
Les longueurs de chaque bord individuel sur la spirale commencent par la longueur 3 et augmentent progressivement toutes les deux étapes par deux:
Cela nous donne essentiellement la liste souhaitée des longueurs.
Le canevas fonctionne comme une fonction qui fait apparaître trois paramètres (où le paramètre le plus à droite est sauté en premier): <longueur (s)> , <caractère (s)> , <direction (s)> . Le paramètre directions est dans ce cas une liste de nombres. Les nombres qui correspondent aux directions sont:
Dans ce cas, [0, 2, 4, 6] correspond à la liste des directions
[↑, →, ↓, ←]
. Le canevas parcourt chaque longueur extraite de la liste des longueurs, utilise le caractère «#» et parcourt cycliquement la liste des directions.la source
0246S
=3Ý·
Python 2 ,
176170165 165161157 octetsEssayez-le en ligne!
À plusieurs reprises: permet
g
de faire pivoter l'n
itération de la spirale dans une position `` canonique '' (similaire à N = 3 ou N = 7), ajoute un nouveau segment en ajoutant 2 espaces à gauche de chaque ligne existante, puis en remplaçant la dernière ligne avec tous les'#'
s (résultant en une position comparable à N = 4 ou N = 8), et enfin en utilisant àg
nouveau pour le faire revenir à la position correcte. Faire mousser, rincer, répéter.la source
Fusain ,
161514 octets-2 octets grâce à @Neil .
Essayez-le en ligne (verbeux) ou essayez-le en ligne (pur) .
Explication:
La direction d'impression est vers la droite par défaut, et nous voulons commencer vers le haut, nous commençons donc par une rotation de 45 degrés dans le sens antihoraire:
Bouclez ensuite
i
dans la plage[0, input)
:Imprimez une nouvelle ligne pour imiter l'effet de reculer d'une position:
Imprimer "#"
x
fois dans la direction actuelle:Où
x
est3 + i // 2 * 2
::Et puis faites pivoter de 45 degrés dans le sens horaire pour la prochaine itération de la boucle:
la source
⊗÷ι²
est un octet plus court que⁻ι﹪ι²
. En outre, vous pouvez obtenir l'effet de reculer en imprimant un\n
avant le#
s, ce qui vous permettra de supprimer le»#
pour une économie d'octets supplémentaire.⊗÷ι²
, mais quels seraient les changements pour imprimer un\n
avant le#
s? La spirale est incorrecte si j'ajoute lePrint("\n")
.#
allonger encore plus.Python 2 ,
179178 octetsmerci à Kevin Cruijssen pour -1 octet.
Essayez-le en ligne!
Python 2 , 179 octets
Dans cette approche, les formules sont utilisées pour
x
ety
deltas au lieu d'une liste de recherche.Essayez-le en ligne!
la source
n+1+n%2
àn%2-~n
pour -1 octet. Et je dois me souvenir d'0--n/4*2
être 1 plus petit que-(-n/4*2)
. Belle réponse, +1 de ma part.JavaScript (ES6), 185 octets
Bien sûr, cela peut être joué davantage, peut-être avec du curry, mais voici ma très humble tentative. Sauts de ligne ajoutés pour plus de lisibilité sauf avant-dernier caractère
Utilisation:
d(10)
retourne une chaîne selon l'exemple de défi N = 10.Définit une fonction
r(a,n)
pour faire tourner un tableau toura
àn
tour; une fonctions(n)
pour générer un réseau bidimensionnel représentant une spirale de taillen
en tournant et en ajoutant récursivement de l'espacement et des lignes (non retourné à la position de départ); et une fonctiond(n)
pour dessiner une spirale de taillen
, tournée de manière cohérente selon le défi, et rendue sous forme de chaîne retournée.Ce fut un défi vraiment amusant: ¬)
la source