Soit une chaîne s vide, de longueur paire, et un entier positif n, représentant sa hauteur, composez une pyramide en appliquant les règles suivantes:
La pyramide doit contenir n lignes non vides; les retours à la ligne sont autorisés. Pour chaque 1 <= i <= n, la i-ème ligne doit contenir la chaîne avec chaque caractère individuel répété à la place i fois; abcd répété 3 fois car tel devient aaabbbcccddd. Chaque ligne doit être centrée avec des espaces de remplissage de manière à ce que le milieu de chaque ligne soit aligné verticalement. Les espaces de fin à la fin de chaque ligne sont autorisés. Vous pouvez également avoir jusqu'à une nouvelle ligne principale, mais aucun autre espace avant la première ligne.
Il n'est pas garanti que la chaîne d'entrée soit un palindrome.
Cas de test
s = 'o-o o-o', n = 10:
o-o o-o
oo--oo oo--oo
ooo---ooo ooo---ooo
oooo----oooo oooo----oooo
ooooo-----ooooo ooooo-----ooooo
oooooo------oooooo oooooo------oooooo
ooooooo-------ooooooo ooooooo-------ooooooo
oooooooo--------oooooooo oooooooo--------oooooooo
ooooooooo---------ooooooooo ooooooooo---------ooooooooo
oooooooooo----------oooooooooo oooooooooo----------oooooooooo
Réponses:
05AB1E , 9 octets
Essayez-le en ligne!
γ
était en grande partie inspiré par la réponse d'Adnan; maisS
fonctionnerait aussi.la source
05AB1E , 11 octets
Utilise le codage 05AB1E . Essayez-le en ligne!
la source
»
relie les tableaux internes par des espaces. Le remplacer parJ
devrait fonctionner (et je pense que vous devriez poster cela comme une réponse différente).Gelée ,
14 à13 octetsEssayez-le en ligne!
Comment ça marche
la source
C # (.NET Core) ,
139 137 136130 octetsEssayez-le en ligne!
Retourne une énumération de
string
s avec les lignes du dessin. Une fois rejoint le résultat est comme ça:la source
(n-i-1)*s.Length/2
. Et j'aime vos cas de test. +1 :)ಠ_ಠ
intensifie~i
est équivalent à-i-1
», de sorte que vous pouvez enregistrer un octet en changeant(n-i-1)
à(n+~i)
.s=>n=>...
pour un autre octetnew string(' '...
avec"".PadLeft(...
Cheddar ,
7164 octetsSauvegardé 7 octets grâce à @ValueInk
Essayez-le en ligne! Je vais ajouter une explication dans un peu
Explication
la source
center
fonction que vous pouvez utiliser comme celle que j'ai sur ma réponse Ruby, car cela pourrait également économiser des octets.Ruby , 58 octets
Essayez-le en ligne!
la source
Java 8,
188186185183 183181173 octets-2 octets (185 → 183) en raison d'une correction de bugs (il s'agissait de
n+1
lignes en sortie au lieu den
). Il n'arrive pas souvent qu'un correctif de bogue sauve des octets. :)-2 octets (183 → 181) grâce à @ OlivierGrégoire
Explication:
Essayez ici.
la source
r="",q=s.format("%"+x+"s",r)
sauvegarder 2 octets. Beaucoup de mouvement pour seulement deux octets :(s.format("%"+x+"s",r)
directement, j'ai pu économiser 8 octets de plus après votre golf. :)JavaScript (ES6), 85 octets
Prend des entrées dans la syntaxe de currying
(string)(height)
. Inclut une nouvelle ligne principale.Démo
Afficher l'extrait de code
la source
Charbon de bois , 19 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
Nous avons besoin de lignes répétées plusieurs
1..n
fois. Le moyen le plus simple d'y parvenir est de passer de 0 à n en boucle, car la boucle 0 est fondamentalement non-op.Positionnez le curseur de sorte que la ligne résultante soit centrée.
Et voici à quel point il est simple d’imprimer chaque caractère à plusieurs
i
reprises.la source
Python 2 ,
7577 octetsEssayez-le en ligne!
la source
center
construit? J'ai vraiment besoin de lire la documentation parfois: Pn-1
lignes.9
lignes de pyramide quand l'entrée est10
...SOGL V0.12 , 14 octets
Essayez-le ici!
la source
∫dI
.Javascript, 105 octets
Après quelques années de repos, le Stretch Maniac est de retour, avec un peu plus d’instruction cette fois-ci.
la source
s=>n=>[...Array(x=n)].reduce(a=>a+'\n'.padEnd(--x*s.length/2+1)+s.replace(/./g,c=>c.repeat(n-x)),'')
- vous devrez remplacer le'
s par des backticks et le\n
par une nouvelle ligne.Haskell ,
797369 octetsEssayez-le en ligne!
la source
..
, vous pouvez laisser tomber lediv
:(' '<$[1,3..(n-m)*length s])
.APL (Dyalog) ,
3331 octets2 octets joués au golf grâce à @ZacharyT en supprimant les parenthèses inutiles
Essayez-le en ligne!
Explication
L'argument de droite
⍵
est la chaîne et l'argument de gauche⍺
est le nombre.la source
⍺-⊢
?SWI Prolog, 398 octets
Ce n'est pas la solution la plus compacte (peut-être réinventer la roue au lieu d'utiliser des procédures intégrées), mais cela semble fonctionner.
Tester:
Explication:
w et s écrit la quantité appropriée d'espaces de début:
ré gère la "duplication" des caractères et e est sa facilité récursive:
une et l sont ajoutés au résultat (peut-être existe-t-il une procédure intégrée?):
o crée la sortie:
et finalement le p est la méthode principale :
la source
Japt ,
20 + 1 = 2119 + 1 = 2014 octetsSort un tableau de lignes - ajoutez 2 octets si cela n'est pas autorisé.
Essaye-le
Explication
la source
SpUl
de ... attendez, tant pis :( Vous pouvez sauvegarder un octet en remplaçant(V-X
parXnV
, si je ne me trompe pas.n
; merci @ ETHproductions.PHP, 113 octets:
Courez avec
php -nr '<code>' '<string>' <N>
ou testez-le en ligne .panne
la source
CJam , 36 octets
Essayez-le en ligne!
la source
T-SQL, 223 octets
La saisie s'effectue via la table préexistante t avec les colonnes s et n , conformément à nos normes IO .
Pas grand chose à expliquer, c'est une boucle imbriquée assez simple, utilisant
@i
pour les lignes et@j
pour parcourir les caractères de la chaîne qui sont desREPLICATED
@i
fois:la source
R ,
12595 octetsEssayez-le en ligne!
Explication:
C'est assez simple, diviser la chaîne et répéter les éléments
i
foisrep(s,e=i)
(e
c'est l'abréviation deeach
) en boucle. La partie délicate estrep('',(n-i)/2*length(s)+1)
. C'est la chaîne de remplissage, mais c'est un tas de chaînes vides. Je dois ajouter 1 car sinon, le résultat estcharacter(0)
un vecteur de longueur nulle etcat
, qui sépare par défaut ses éléments avec des espaces, désaligne la dernière ligne.la source
Mathematica, 97 octets
contribution
la source
Tcl,
143142141138 octetsTester:
Remarque: le "cd" à la fin de la procédure empêche l'impression du résultat de l'heure en dessous de la pyramide, mais modifie le répertoire en cours - un effet secondaire qui n'est pas explicitement interdit.
Merci à sergiol de lui avoir laissé un indice pour sauvegarder un octet ... et un autre indice en vue de sauver un octet supplémentaire.
Merci à aspect (sur le chat tcl) d’avoir encore 3 octets sauvés!
la source
Swift, 232 octets
Ça pourrait probablement être mieux, mais je n'ai pas beaucoup de temps pour refactoriser.
Cette réponse utilise Swift 4, elle ne peut donc pas être exécutée actuellement en ligne.
la source
LOGO,
9795 octetsEssayez le code sur l'interpréteur FMSLogo.
Définir une fonction
f
qui prend deux entrées,:s
et:n
puis imprimer le résultat.la source
Java 8,
164148 octetsExplication:
la source
Rouille, 107 octets
lien parc
Définit une fonction anonyme qui prend une tranche de chaîne et un nombre, imprimant le motif souhaité sur la sortie standard. Il suppose que la tranche de chaîne ne contient que des caractères ASCII, mais le défi ne spécifie jamais qu'une prise en charge complète de l'unicode est nécessaire. Pour être correct pour unicode également, il faudrait 117 octets:
L'explication est assez simple:
la source
SOGL V0.12 , 8 octets
Essayez-le ici!
Explication:
Je n'avais pas envie de mettre à jour mon ancienne réponse ici car elle utilise une méthode différente et utilise une nouvelle fonctionnalité (autre que le défi) -
╚
la source
Python 2 ,
7977 octetsEssayez-le en ligne!
Edit: -2 bytes avec la permission de @FlipTack
la source
[i*(n-m)for i in s]
, car il.join
est capable de prendre un générateur, ce qui devrait vous donner deux octets.Excel VBA, 98 octets
Fonction de fenêtre immédiate VBE anonyme qui prend l’entrée sous forme de chaîne de
[A1]
et int de[B1]
sortie ensuite dans la fenêtre immédiate de VBEla source