Écrivez un programme (ou une fonction) qui accepte un entier positif.
Si l'entrée est 1
, imprimez (ou retournez) deux diamants voisins côte à côte, chacun avec une longueur de côté d'une barre oblique:
/\/\
\/\/
Pour chaque entrée N
supérieure à 1, regardez la sortie pour N-1
et pour chaque paire de diamants voisins, insérez un nouveau diamant entre eux dont la longueur latérale est la somme des longueurs latérales des deux voisins. Imprimez (ou retournez) ce nouveau motif de diamant.
Donc, quand 2
est entrée, nous regardons la sortie 1
et pouvons voir qu'il y a deux diamants voisins, tous deux de longueur latérale 1. Donc, nous insérons un diamant de longueur latérale 2 (1 + 1) entre eux:
/\
/\/ \/\
\/\ /\/
\/
Pour l'entrée, 3
nous regardons la sortie 2
et ajoutons deux diamants de longueur latérale 3 (1 + 2 et 2 + 1) entre les deux paires de diamants voisins:
/\ /\
/ \ /\ / \
/\/ \/ \/ \/\
\/\ /\ /\ /\/
\ / \/ \ /
\/ \/
Poursuivant le modèle, la sortie pour 4
est:
/\ /\
/\ / \ / \ /\
/ \ /\ / \ / \ /\ / \
/ \ / \ / \ /\ / \ / \ / \
/\/ \/ \/ \/ \/ \/ \/ \/\
\/\ /\ /\ /\ /\ /\ /\ /\/
\ / \ / \ / \/ \ / \ / \ /
\ / \/ \ / \ / \/ \ /
\/ \ / \ / \/
\/ \/
Etc.
Vos sorties peuvent avoir des espaces de fin sur toutes les lignes mais seulement jusqu'à un retour à la ligne de fin (et aucun retour à la ligne de début).
Le code le plus court en octets gagne.
Réponses:
Pyth,
5049 octetsManifestation
Explication:
la source
u.iGsM.:G2tQjT9
dans ma solution (partielle). Je n'ai jamais regardé votre réponse ...Lisp commun, 425
Exemple
Non golfé
la source
CJam,
595857 octetsMerci à @ MartinBüttner d'avoir joué au golf sur 1 octet.
Essayez-le en ligne dans l' interpréteur CJam .
Idée
Pour l'entrée 3 , par exemple, nous générons
en faisant tourner la chaîne
\
et en remplaçant certaines barres obliques inverses par des barres obliques.Ensuite, nous compressons le tableau résultant (transposons les lignes et les colonnes) pour obtenir la moitié inférieure de la sortie souhaitée.
La moitié supérieure est octet par octet égale à la moitié inférieure en sens inverse.
Code
la source
Rév.1: Ruby 170
Nouvelle méthode évitant de créer le gros diamant et de le réduire.
Rév 0: Ruby, 187
Les tailles des diamants sont calculées conformément à la relation de récurrence de https://oeis.org/A002487 Ainsi, nous faisons le tableau
a
contenant tous les éléments pour toutes les lignes de 1 àn
. Nous ne sommes intéressés que par les derniers1<<n-1
éléments (Ruby nous permet de les obtenir du tableau en utilisant des index négatifs, -1 étant le dernier élément du tableau), plus un inital à1
partir de la position 0.Ligne par ligne et diamant par diamant, nous dessinons la ligne de caractères pour le plus gros diamant, puis découpons les colonnes du milieu pour obtenir la ligne du diamant requis. Rev 1 est plus court, mais j'ai aimé cette méthode.
L'arithmétique modulaire est utilisée pour boucler autour de sorte que la même expression ajoute tout
/
directement et de même une expression ajoute tout\
directement.Non testé dans le programme de test
la source