Les pyramides mayas étaient (et sont) une partie importante de l'architecture ancienne, qui étaient généralement utilisées à des fins religieuses.
C'étaient généralement des pyramides à degrés, mais les marches sur chacune étaient trop raides pour grimper. Les prêtres grimperaient jusqu'au sommet d'eux via des escaliers alternatifs pour effectuer des cérémonies. Les pyramides ont également été utilisées comme points de repère en raison de leur hauteur, et parfois même utilisées comme lieux de sépulture pour les hauts fonctionnaires.
Le défi
Écrivez un programme qui peut imprimer un schéma pyramidal basé sur les spécifications de l'utilisateur (voir ci-dessous).
Exigences
Prenez une entrée de deux variables séparées par des espaces.
L'entrée doit être acceptée via STDIN (ou l'alternative la plus proche).
La sortie doit être via STDOUT (ou l'alternative la plus proche).
Contribution
Hauteur comme tout entier positif. Ceci est utilisé comme largeur du niveau de base (en blocs). Chaque niveau suivant de la pyramide a la largeur
n - 1
oùn
est la largeur de l'étage précédent (en blocs).Taille de bloc qui sera 1 ou tout entier positif impair ≤ (inférieur à) 10.
Blocs
La taille de bloc donnée détermine la largeur (et la hauteur) de chaque pièce individuelle. Essentiellement, il y a des i^2
espaces à l'intérieur de la boîte visible où i
est la taille du bloc.
Un bloc 1x1 ressemblerait à ceci:
+++
| |
+++
Alors qu'un bloc 5x5 ressemblerait à ceci:
+++++++
| |
| |
| |
| |
| |
+++++++
Blocs adjacents horizontalement
Les blocs côte à côte horizontalement doivent avoir leurs parois centrales fusionnées en une seule.
Vous devez avoir ceci:
+++++
| | |
+++++
Au lieu de quelque chose comme ça:
++++++
| || |
++++++
Blocs adjacents verticalement (bonus de -5%)
Les blocs verticalement côte à côte ont une exception spéciale: le mur du milieu peut être fusionné en un seul.
Donc, au lieu de blocs 1x1 ressemblant à ceci:
+++
| |
+++
+++++
| | |
+++++
Ils pourraient ressembler à ceci:
+++
| |
+++++
| | |
+++++
Exemples
Input: 3 1
Output:
+++
| |
+++
+++++
| | |
+++++
+++++++
| | | |
+++++++
OR
+++
| |
+++++
| | |
+++++++
| | | |
+++++++
Input: 2 3
Output:
+++++
| |
| |
| |
+++++
+++++++++
| | |
| | |
| | |
+++++++++
OR
+++++
| |
| |
| |
+++++++++
| | |
| | |
| | |
+++++++++
Tableau d'affichage
Pour être classé sur le tableau de bord, mettez votre réponse dans ce format:
# Language, Score
Ou si vous obtenez le bonus -5%:
# Language, Score (Bytes - 5%)
Votre score n'est qu'un nombre entier. Si votre score est décimal, arrondissez au nombre entier.
1 1
?3 2
?2 3
, elle se terminerait quandn - 1 = 0
oùn
est la largeur de l'étage précédent en blocs.Réponses:
Pyth, 45 (47 octets - 5%)
Essayez-le ici .
la source
JavaScript (ES6), 161 (169-5%)
166 (174-5%)En utilisant des chaînes de modèle, les 2 nouvelles lignes sont significatives et comptées.
Testez l'exécution de l'extrait ci-dessous dans un navigateur EcmaScript 6. Firefox ok, pas Chrome car il ne prend pas en charge l' affectation de la déstructuration .
Code expliqué après l'extrait.
Moins de golf
la source
Rubis, 124 (130 - 5%)
Avec commentaires
la source
Python 2, 117 (123 octets)
L'idée est de construire le haut des briques
p
comme+++++++++
et le côtév
comme| | |
. Le sommet commence au fur+
et à mesure quen+1
+
chaque couche est augmentée . Le côté commence au fur|
et à mesure par desn
espaces et a|
. Chaque couche, nous augmentons les sommets et les côtés, puis imprimons un haut etn
côtés.Pour les centrer, nous imprimons d'abord un tiret
l
. Il se compose d'un certain nombre d'espaces qui évoluent avec la hauteur actuelleh
. Pour le mettre à jour, nous décrémentons la variable de hauteurh
jusqu'à ce qu'elle atteigne0
, après quoi le calque actuel affleure le bord gauche de l'écran. Nous imprimons le haut une fois de plus pour faire la couche inférieure, et nous avons terminé.la source
Python 2, 200 (210 - 5%)
J'ai utilisé la multiplication de chaînes et supprimé les espaces supplémentaires.
la source