Ausgehend von einer nicht leeren Zeichenfolge s mit gerader Länge und einer positiven Ganzzahl n, die ihre Höhe darstellt, erstellen Sie eine Pyramide nach den folgenden Regeln:
Die Pyramide sollte n nicht leere Zeilen enthalten. nachgestellte Zeilenumbrüche sind erlaubt. Für jede 1 <= i <= n sollte die i-te Zeile die Zeichenfolge enthalten, wobei jedes einzelne Zeichen i-mal an der richtigen Stelle wiederholt wird. abcd wird dreimal wiederholt und zu aaabbbcccddd. Jede Zeile sollte mit Abständen zentriert sein, sodass die Mitte jeder Zeile vertikal ausgerichtet ist. Leerzeichen am Ende jeder Zeile sind zulässig. Sie können auch bis zu eine führende neue Zeile, jedoch kein anderes Leerzeichen vor der ersten Zeile einfügen.
Es ist nicht garantiert, dass die Eingabezeichenfolge ein Palindrom ist.
Testfall
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
Antworten:
05AB1E , 9 Bytes
Probieren Sie es online!
γ
wurde in kurzer Zeit von Adnans Antwort inspiriert;S
würde aber auch funktionieren.quelle
05AB1E , 11 Bytes
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
quelle
»
verbindet die inneren Arrays durch Leerzeichen. Das Ersetzen durchJ
sollte funktionieren (und ich denke, Sie sollten das als eine andere Antwort posten).Jelly ,
1413 BytesProbieren Sie es online!
Wie es funktioniert
quelle
C # (.NET Core) ,
139 137 136130 BytesProbieren Sie es online!
Gibt eine Aufzählung von
string
s mit den Linien der Zeichnung zurück. Nach dem Beitritt sieht das Ergebnis so aus:quelle
(n-i-1)*s.Length/2
. Und ich mag deine Testfälle. +1 :)ಠ_ಠ
intensiviert~i
ist äquivalent zu-i-1
“, so dass Sie ein Byte durch Änderung speichern kann(n-i-1)
zu(n+~i)
.s=>n=>...
für ein anderes Byte Currying verwendennew string(' '...
mit"".PadLeft(...
Cheddar ,
7164 Bytes7 Bytes dank @ValueInk eingespart
Probieren Sie es online! Ich werde gleich eine Erklärung hinzufügen
Erläuterung
quelle
center
Funktion hat, die Sie wie ich für meine Ruby-Antwort verwenden können, da dies möglicherweise auch Bytes einsparen könnte.Ruby , 58 Bytes
Probieren Sie es online!
quelle
Java 8,
188186185183181173 Bytes-2 Bytes (185 → 183) aufgrund eines Bugfixes (es wurden
n+1
stattdessen Zeilen ausgegebenn
). Es kommt nicht oft vor, dass ein Bugfix Bytes spart. :)-2 Bytes (183 → 181) dank @ OlivierGrégoire
Erläuterung:
Probieren Sie es hier aus.
quelle
r="",q=s.format("%"+x+"s",r)
2 Byte gespeichert werden sollen . Viel Bewegung für nur zwei Bytes :(s.format("%"+x+"s",r)
direkte Verwendung konnte ich nach dem Golfspielen 8 weitere Bytes einsparen. :)JavaScript (ES6), 85 Byte
Übernimmt Eingaben in der Currying-Syntax
(string)(height)
. Beinhaltet eine führende Newline.Demo
Code-Snippet anzeigen
quelle
Holzkohle , 19 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Wir brauchen Zeilen, die sich
1..n
mehrmals wiederholen . Der einfachste Weg, dies zu erreichen, ist eine Schleife von 0 nach n, da die Schleife 0 im Grunde genommen ein No-Op ist.Positionieren Sie den Cursor so, dass die resultierende Linie zentriert ist.
Und so einfach ist es, jedes Zeichen mehrmals zu drucken
i
.quelle
Python 2 ,
7577 BytesProbieren Sie es online!
quelle
center
eingebautes? Ich muss wirklich manchmal die Dokumente lesen: Pn-1
Zeilen.9
Pyramidenlinien zurück, wenn die Eingabe10
...SOGL V0.12 , 14 Bytes
Probieren Sie es hier aus!
quelle
∫dI
.Javascript, 105 Bytes
Nach ein paar Jahren ist der Stretch Maniac zurück, hoffentlich diesmal etwas besser ausgebildet.
quelle
s=>n=>[...Array(x=n)].reduce(a=>a+'\n'.padEnd(--x*s.length/2+1)+s.replace(/./g,c=>c.repeat(n-x)),'')
- Sie müssen das'
s durch Backticks und das\n
durch eine wörtliche Newline ersetzen.Haskell ,
797369 BytesProbieren Sie es online!
quelle
..
, können Sie einfach auf dasdiv
:(' '<$[1,3..(n-m)*length s])
.APL (Dyalog) ,
3331 Bytes2 Bytes dank @ZacharyT durch Entfernen unnötiger Klammern golfen
Probieren Sie es online!
Erläuterung
Das rechte Argument
⍵
ist die Zeichenfolge und das linke Argument⍺
ist die Zahl.quelle
⍺-⊢
?SWI-Prolog, 398 Bytes
Es ist nicht die kompakteste Lösung (vielleicht das Rad neu erfinden, anstatt eingebaute Verfahren anzuwenden), aber es scheint zu funktionieren.
Prüfung:
Erläuterung:
w und s schreiben die richtige Anzahl von führenden Leerzeichen:
d verwaltet die "Vervielfältigung" von Zeichen und e ist die rekursive Funktion:
a und l hängen an das Ergebnis an (möglicherweise gibt es eine eingebaute Prozedur?):
o erstellt die Ausgabe:
und schließlich ist das p die Hauptmethode :
quelle
Japt ,
20 + 1 = 2119 + 1 = 2014 BytesGibt ein Array von Zeilen aus - fügen Sie 2 Bytes hinzu, wenn dies nicht zulässig ist.
Probier es aus
Erläuterung
quelle
SpUl
um ... warten, macht nichts :( Sie ein Byte speichern kann allerdings durch den Ersatz(V-X
mitXnV
, wenn ich mich nicht irre.n
; danke @ETHproductions.PHP, 113 Bytes:
Laufen Sie mit
php -nr '<code>' '<string>' <N>
oder testen Sie es online .Nervenzusammenbruch
quelle
CJam , 36 Bytes
Probieren Sie es online!
quelle
T-SQL, 223 Bytes
Die Eingabe erfolgt über bereits vorhandene Tabelle t mit Spalten s und n , je unseren IO - Standards .
Es ist nicht viel zu erklären, es ist eine ziemlich einfache verschachtelte Schleife, die
@i
für die Zeilen verwendet wird und@j
um durch die Zeichen der Zeichenfolge zu gehen, dieREPLICATED
@i
Zeiten sind:quelle
R ,
12595 BytesProbieren Sie es online!
Erläuterung:
Es ist ziemlich unkompliziert, die Zeichenfolge zu teilen und die Elemente in der Schleife
i
jedes Mal zu wiederholenrep(s,e=i)
(diese
ist die Abkürzung füreach
). Der schwierige Teil istrep('',(n-i)/2*length(s)+1)
. Dies ist die Füllzeichenfolge, aber es sind ein paar leere Zeichenfolgen. Ich muss 1 hinzufügen, da das Ergebnis sonstcharacter(0)
ein Vektor mit der Länge Null ist undcat
die letzte Linie standardmäßig durch Leerzeichen voneinander trennt.quelle
Mathematica, 97 Bytes
Eingang
quelle
Tcl,
143142141138 BytesPrüfung:
Anmerkung: Die "cd" am Ende des Vorgangs verhindert, dass das Ergebnis der Zeit unterhalb der Pyramide ausgedruckt wird, ändert jedoch das aktuelle Verzeichnis - ein Nebeneffekt, der nicht ausdrücklich verboten ist.
Vielen Dank an Sergiol für einen Hinweis zum Speichern eines Bytes ... und einen weiteren Hinweis zum Speichern eines weiteren Bytes.
Dank Aspekt (im tcl-Chat) für weitere 3 Bytes gespart!
quelle
Schnell, 232 Bytes
Wahrscheinlich könnte es besser sein, aber ich habe nicht viel Zeit zum Umgestalten.
Diese Antwort verwendet Swift 4, sodass sie derzeit nicht online ausgeführt werden kann.
quelle
LOGO,
9795 BytesProbieren Sie den Code im FMSLogo-Interpreter aus.
Definieren Sie eine Funktion,
f
die zwei Eingaben annimmt,:s
und:n
drucken Sie dann das Ergebnis aus.quelle
Java 8,
164148 BytesErläuterung:
quelle
Rust, 107 Bytes
Laufgitter-Link
Definiert eine anonyme Funktion, die ein Zeichenfolgen-Slice und eine Zahl verwendet und das gewünschte Muster in der Standardausgabe ausgibt. Es wird davon ausgegangen, dass das Zeichenfolgen-Slice nur ASCII-Zeichen enthält, die Abfrage gibt jedoch niemals an, dass eine vollständige Unicode-Unterstützung erforderlich ist. Um auch für Unicode korrekt zu sein, wären 117 Bytes erforderlich:
Die Erklärung ist ziemlich einfach:
quelle
SOGL V0.12 , 8 Bytes
Probieren Sie es hier aus!
Erläuterung:
Ich hatte keine Lust, meine alte Antwort hier zu aktualisieren, da sie eine andere Methode verwendet und eine neue (äh als die Herausforderung) Funktion verwendet.
╚
quelle
Python 2 ,
7977 BytesProbieren Sie es online!
Edit: -2 Bytes mit freundlicher Genehmigung von @FlipTack
quelle
[i*(n-m)for i in s]
, da.join
ein Generator verwendet werden kann, der zwei Bytes enthalten sollte.Excel VBA, 98 Bytes
Anonyme VBE-Direktfensterfunktion, die Eingaben als Zeichenfolge von
[A1]
und int übernimmt und[B1]
dann an das VBE-Direktfenster ausgibtquelle