Mayapyramiden waren (und sind) ein wichtiger Bestandteil der antiken Architektur, die im Allgemeinen für religiöse Zwecke verwendet wurden.
Es waren normalerweise Stufenpyramiden, aber die Stufen waren zu steil, um zu klettern. Die Priester erklommen sie über alternative Treppen, um Zeremonien abzuhalten. Die Pyramiden wurden aufgrund ihrer Größe auch als Wahrzeichen und manchmal sogar als Grabstätten für hochrangige Beamte genutzt.
Die Herausforderung
Schreiben Sie ein Programm, mit dem ein Pyramidenschema auf der Grundlage der Benutzerspezifikationen ausgedruckt werden kann (siehe unten).
Bedarf
Nehmen Sie eine Eingabe von zwei durch Leerzeichen getrennten Variablen vor.
Die Eingabe muss über STDIN (oder die nächstgelegene Alternative) akzeptiert werden.
Die Ausgabe muss über STDOUT (oder die nächstgelegene Alternative) erfolgen.
Eingang
Höhe als positive ganze Zahl. Dies wird als Breite der Basisebene (in Blöcken) verwendet. Jede nachfolgende Stufe der Pyramide hat die Breite ,
n - 1
won
wird die vorherige Bodenbreite (in Blöcken).Blockgröße, die 1 oder eine ungerade positive ganze Zahl ≤ (kleiner als) 10 ist.
Blöcke
Die angegebene Blockgröße bestimmt die Breite (und Höhe) jedes einzelnen Stücks. Im Wesentlichen gibt es i^2
innerhalb des sichtbaren Kastens Leerzeichen, in denen i
die Blockgröße angegeben ist.
Ein 1x1 Block würde so aussehen:
+++
| |
+++
Während ein 5x5-Block so aussehen würde:
+++++++
| |
| |
| |
| |
| |
+++++++
Horizontal benachbarte Blöcke
Bei horizontal nebeneinander angeordneten Blöcken müssen die Mittelwände zu einer einzigen zusammengeführt werden.
Das musst du haben:
+++++
| | |
+++++
Anstelle von so etwas:
++++++
| || |
++++++
Vertikal benachbarte Blöcke (-5% Bonus)
Vertikal nebeneinander liegende Blöcke haben eine besondere Ausnahme: Die Mittelwand kann zu einer zusammengefügt werden.
Also, anstelle von 1x1 Blöcken sieht das so aus:
+++
| |
+++
+++++
| | |
+++++
Sie könnten so aussehen:
+++
| |
+++++
| | |
+++++
Beispiele
Input: 3 1
Output:
+++
| |
+++
+++++
| | |
+++++
+++++++
| | | |
+++++++
OR
+++
| |
+++++
| | |
+++++++
| | | |
+++++++
Input: 2 3
Output:
+++++
| |
| |
| |
+++++
+++++++++
| | |
| | |
| | |
+++++++++
OR
+++++
| |
| |
| |
+++++++++
| | |
| | |
| | |
+++++++++
Anzeigetafel
Geben Sie Ihre Antwort in das folgende Format ein, um in die Rangliste aufgenommen zu werden:
# Language, Score
Oder wenn Sie den Bonus -5% bekommen:
# Language, Score (Bytes - 5%)
Ihre Punktzahl ist nur eine ganze Zahl. Wenn Ihre Punktzahl eine Dezimalzahl ist, runden Sie auf die ganze Zahl auf.
1 1
?3 2
bewirken?2 3
würde es verlassen, wennn - 1 = 0
won
die Breite der vorherigen Etage in Blöcken ist.Antworten:
Pyth, 45 (47 Bytes - 5%)
Probieren Sie es hier aus .
quelle
JavaScript (ES6), 161 (169-5%)
166 (174-5%)Unter Verwendung von Vorlagenzeichenfolgen werden die 2 Zeilenumbrüche signifikant und gezählt.
Testen Sie das folgende Snippet in einem EcmaScript 6-Browser. Firefox ok, nicht Chrome, da es keine Unterstützung für die Destrukturierung gibt .
Code nach dem Snippet erklärt.
Weniger Golf
quelle
Rubin, 124 (130 - 5%)
Mit Kommentaren
quelle
Python 2, 117 (123 Byte)
Die Idee ist , der Ziegel oben aufzubauen
p
wie+++++++++
und Seitev
wie| | |
. Die Oberseite beginnt wie+
folgt und wird umn+1
+
jede Ebene erweitert. Die Seite beginnt als|
und wird durchn
Leerzeichen und a ergänzt|
. Jede Schicht, wir erweitern die Oberseiten und Seiten, dann drucken wir eine Oberseite undn
Seiten.Um sie zu zentrieren, drucken wir zuerst einen Einzug
l
. Es besteht aus einer Reihe von Räumen, die mit der aktuellen Höhe skaliert werdenh
. Um es zu aktualisieren, dekrementieren wir die Höhenvariable,h
bis es trifft0
, wonach die aktuelle Ebene bündig mit dem linken Rand des Bildschirms abschließt. Wir drucken die Oberseite noch einmal, um die untere Ebene zu erstellen, und fertig.quelle
Python 2, 200 (210 - 5%)
Ich habe die String-Multiplikation verwendet und zusätzliche Leerzeichen entfernt.
quelle