Votre objectif est de générer une spirale de Fibonacci avec des nombres.
Exemple d'entrée / sortie
1 -> 1
2 -> 1 1
3 -> 1 1
2 2
2 2
6 -> 8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 1 1 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3
Entrée L'entrée peut être prise via STDIN ou un argument de fonction. Ce sera un numéro unique
Sortie La sortie peut provenir de STDOUT ou de la valeur de retour d'une fonction. Ce devrait être une seule chaîne.
Les espaces supplémentaires à la fin de la ligne ne sont pas autorisés. La sortie peut contenir des chiffres, des sauts de ligne (nouvelles lignes) et des espaces.
L'orientation n'a pas d'importance, cela signifie des rotations et des réflexions. Tant qu'il suit un modèle de spirale de Fibonacci valide.
Les nombres avec différentes quantités de chiffres (par exemple 1 et 13) doivent être alignés à droite. Il peut être nécessaire d'ajouter un espace au tout début d'une ligne pour que tout puisse s'aligner.
1 1 1 1
100 100 should actually be 100 100
Vous pouvez voir un exemple ici
C'est du code-golf, donc le code le plus court en octets gagne!
Numbers with different amounts of digits (e.g. 1 and 13) should be aligned to the left side of the digit a space may need to be added to the very beginning of a line so everything can line up.
Cela semble être plus clair en deux phrases.Réponses:
APL, 23
Explication:
Essayez-le sur tryapl.org
la source
⌸
ou⍤
) sont absents de ce jeu de caractères et ne peuvent pas être utilisés pour évoquer cette règle.Matlab, 84 octets
Une fonction est utilisée. La sortie est en stdout.
Exemples:
Matlab, 78 octets
Idem que ci-dessus, sauf qu'une fonctionnalité de Matlab est exploitée, à savoir qu'elle affiche automatiquement la sortie de la fonction (sous forme de chaîne) dans stdout. Cela évite la conversion en chaîne dans l'approche ci-dessus.
la source
Python 2, 121 octets
Les règles assouplies sur les rotations rendent cela beaucoup plus simple.
Je n'ai pas utilisé de backtick à la place d'
str(a)
ici parce que je ne suis pas sûr que nous puissions avoir plus de places de premier plan que nécessaire, si jamais nous atteignons des longs. Même si, même si c'était le cas, son utilisationa
serait de toute façon plus courte.la source
Ruby,
243242236233222170130 octetsla source
t==value
conditions ent>value
. Par exemple,(t=x%4)>2?s.times{r<<[s]*s}:t>1?s.times{r.map!{|w|w.unshift s}}:t>0?s.times{r.unshift [s]*s}:r.map!{|w|w+=[s]*s}}
Python -
189179174la source
J, 36 octets
Usage:
Méthode:
La fonction fait pivoter le carré actuel et ajoute le nouveau carré au carré actuel.
input-1
. La taille des carrés et les valeurs des éléments proviennent de la taille du rectangle précédent.Explication du code:
Essayez-le en ligne ici.
la source
Haskell,
183176171163 octetsLa fonction est
f
, qui prend un nombre et retourne une seule chaîne:la source
Pyth, 34 octets
Étonnamment, plus de la moitié du code est imprimé / rempli, plutôt que de générer la matrice.
La génération de la matrice est très simple, cependant, elle consiste en une transposition et une inversion, et en ajoutant N lignes contenant N copies de N, N étant le nombre actuel de lignes.
Exemple de sortie pour 7:
la source
Perl,
289 277257 octetsla source
K, 48 octets
Et en action:
Peut-être encore de bonnes opportunités pour le golf.
Le programme consiste essentiellement en deux parties: générer la matrice concaténée et la formater pour la sortie. Le premier est assez simple:
En commençant par une matrice 1x1 contenant 1, créez un vecteur de longueur T de T, où T est la longueur de la matrice de départ sur la première dimension (
t#t:#x
) et attachez-le à chaque ligne de la matrice d'origine (x,\:
). Inverser et transposer le résultat (+|
) le fait pivoter de 90 degrés. Nous faisons cela N-1 fois.Le formatage est assez maladroit, car l'approche naturelle de K pour imprimer une matrice ne permet pas d'aligner les colonnes de chiffres comme nous en avons besoin:
L'idée de base est de prendre l'élément maximum de la matrice (
|//x
), de la convertir en chaîne (unaire$
), de prendre sa longueur plus un (1+#
), puis de formater les éléments de la matrice en chaînes alignées à droite de cette taille. Ensuite, pour ranger, joignez ces chaînes (,/'
) et supprimez l’espace résultant (1_'
).la source
CJam, 48 octets
Essayez-le en ligne
La partie essentielle de la génération du motif semble relativement simple. Faites pivoter le rectangle créé jusqu'à présent et ajoutez un carré de valeurs en bas.
Le code pour le remplissage du résultat est affreux, cependant. J'ai essayé un tas de combinaisons de
f
et:
opérateurs pour appliquer le remplissage à la liste imbriquée, mais rien n'a fonctionné. Si quelqu'un a de meilleures suggestions, elles sont les bienvenues.la source
Wf%
. Aussi, seriez-vous capable de faire quelque chose comme{Se[}ff%
plutôt que:U;{USe[}f%
pour le rembourrage? (Cela pourrait ne pas fonctionner comme cela est, je ne peux pas y penser pour le moment.)Pyth, 29 octets
Manifestation.
Si le remplissage était libre / implicite, comme dans APL, ou si la sortie de matrice était autorisée, il s'agirait de 14 octets:
la source
Ruby, 129 octets
J'ai édité l'autre ruby répondre à un tas, mais mon dernier changement n'est pas accepté ou quelque chose, alors le voici:
la source
ES6, 248 octets
Où
\n
représente un caractère de nouvelle ligne littéral.Ennuis, la mise en forme occupe une grande partie du code.
f
est une fonction d'assistance qui crée un tableau rempli. Il est principalement utilisé pour créer les carrés remplis, mais se double également pour produire les cas de base de la récursivité.g
est le principal gruntwork. Il génère récursivement l'avant dernière solution, la fait pivoter de 180 degrés, puis ajoute les deux carrés suivants.la source