In der heutigen Folge von AAOD werden wir einen chinesischen Schrein unterschiedlicher Höhe bauen.
Betrachten Sie die folgenden Beispiele für height ( N
) 1
bis6
N = 1
:
.
|
. ]#[ .
\_______/
. ]###[ .
\__]#.-.#[__/
|___| |___|
|___|_|___|
####/_\####
|___|
/_____\
N = 2
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\___]#.---.#[___/
|__|_| |_|__|
|__|_|___|_|__|
#####/___\#####
|_____|
/_______\
N = 3
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\____]#.-----.#[____/
|__|__| |__|__|
|__|__|_____|__|__|
######/_____\######
|_______|
/_________\
N = 4
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_____]##.-----.##[_____/
|__|__|_| |_|__|__|
|__|__|_|_____|_|__|__|
########/_____\########
|_______|
/_________\
N = 5
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_______________________/
. ]###########[ .
\______]###.-----.###[______/
|__|__|___| |___|__|__|
|__|__|___|_____|___|__|__|
##########/_____\##########
|_______|
/_________\
N = 6
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_______________________/
. ]###########[ .
\___________________________/
. ]#############[ .
\_______]####.-----.####[_______/
|__|__|__|__| |__|__|__|__|
|__|__|__|__|_____|__|__|__|__|
############/_____\############
|_______|
/_________\
und so weiter.
Konstruktionsdetails
Ich bin sicher, dass die meisten Details des Musters klar sind. Hier einige Details:
- Die Tür am Boden des Schreins kann mindestens
1
_
breit und höchstens5
_
breit sein. - Es gibt immer zwei
.
direkt über den Säulen um die Tür (zwei vertikal|
). - Die Treppe beginnt mit der gleichen Breite wie die Tür und steigt wie im Muster gezeigt an
- Die
]##..##[
Blöcke über jeder Dachebene vergrößern sich2
von oben nach unten. - Die
\__...__/
Dachebenen vergrößern sich4
von oben nach unten. - Die Wandblöcke um die Tür sollten mindestens
1
_
und höchstens3
_
zwischen den beiden liegen|
. Priorität haben die äußeren Wandblöcke, sodass derjenige, der der Tür am nächsten liegt, für jede Ebene eine unterschiedliche Größe erhält. - Der Raum zwischen
.
und]
(oder[
) wird#
im Dach direkt über den Türen ausgefüllt .
Herausforderungsdetails
- Schreiben Sie eine Funktion oder ein vollständiges Programm, das eine positive Ganzzahl größer als
0
über das Argument STDIN / ARGV / function oder das nächstgelegene Äquivalent liest und (an STDOUT oder das nächstgelegene Äquivalent) dasN
chinesische Heiligtum ausgibt - Der Zeilenumbruch ist optional.
- Es sollten entweder keine oder genügend Leerzeichen vorhanden sein, um die Ausgabe im minimalen Begrenzungsrechteck aufzufüllen.
- Es sollten keine führenden Leerzeichen vorhanden sein, die nicht Teil des Musters sind.
Bestenliste
Der erste Beitrag der Serie generiert eine Rangliste.
Um sicherzustellen, dass Ihre Antworten angezeigt werden, beginnen Sie jede Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
N=1
Fall 1? Warum nicht 3 und haben kleinere Seitenfenster wie imN=2
Fall?N=1
Fall auch das erste Dach nicht zu lang (breit)?#
neben.
der]
und[
darüber zu stützen . Über die Startdachgröße - Das ist die Dachgröße im oberen Dach jeder Höhe.Antworten:
CJam, 200 Bytes
Zeilenumbrüche hinzugefügt, um ein Scrollen zu vermeiden. Probieren Sie es online aus
Kurze Erklärung:
Das Programm erstellt die linke Hälfte des Schreins (einschließlich der mittleren), kehrt sie dann um und ersetzt einige Zeichen, um die rechte Hälfte zu erhalten. Eine Reihe von n Leerzeichen wird während der Konstruktion als Zahl ~ n (bitweise "nicht") dargestellt und am Ende durch die tatsächlichen Leerzeichen ersetzt.
Das Programm beginnt mit den obersten 2 Zeilen, stellt dann für jede Dachebene alle vorherigen Zeilen mit 2 Leerzeichen voran und fügt das neue Dach hinzu (2 Zeilen). Das letzte Dach wird modifiziert, um den Teil "über der Tür" hinzuzufügen.
Als nächstes wird die obere Wand gebaut, indem "| __" wiederholt und auf die richtige Länge gekürzt wird, gefolgt von einem festen "_ |" und Räume. Die Wand wird dann dupliziert und die Türbereiche durch Unterstriche ersetzt. Schließlich wird der untere Teil Zeile für Zeile aufgebaut.
quelle
Perl,
332 316294Versuch es mit mir .
C 371
Versuch es mit mir .
JavaScript, 365
Das obige kann fast 1 zu 1 in JavaScript übersetzt werden:
Verwenden:
quelle
s
. Es sei denn, Sie ordnen es dynamisch zu.Python 2,
356352347344 BytesDies baut den Schrein im Grunde Linie für Linie auf. Die Funktion
p
druckt eine Zeichenfolge mit den Leerzeichen, die zum Zentrieren erforderlich sind.Ich habe Python 2 verwendet , um viele Bytes zu speichern, da das Python 3- Map-Objekt nicht ausgelöst wird. Ich denke, ich sollte immer in Python 2 Golf spielen , spart nur ein paar Bytes mehr (auch wenn es nur darum geht, die Eingabe nicht in int zu analysieren). Hehehe, es ist nicht so, als wäre Code in erster Linie schön zum Golfen.
Edit: und natürlich brauche ich die Map jetzt nicht mehr ...
Hier ist der Code in ungolfed Form:
quelle
print(B*(5+2*n-len(s)//2)+s)
inprint B*(5+2*n-len(s)/2)+s
(Entfernen Klammern und Änderung//
in/
).print B*(5+2*n-len(s)/2)+s
bisprint(5+2*n-len(s)/2)*B+s
ändern, können Sie das Leerzeichen danach entfernenprint
.JavaScript ( ES6 ), 440
Bearbeiten Behobener Sturzfehler
Eine Funktion mit der Höhe als Parameter, die an die Konsole ausgegeben wird.
Mit Vorlage Zeichenfolge viel , sind alle Zeilenumbrüche signifikant und gezählt.
Führen Sie das Snippet aus, um es in Firefox zu testen (mit Konsolenausgabe)
Ungolfed- Version für interaktiven Test:
quelle
Haskell, 473 Bytes
quelle
#
C 660 Bytes
Das Muster schien einfach zu unregelmäßig zu sein, um sich etwas Besonderes einfallen zu lassen, insbesondere in einer Sprache ohne Zeichenkettenverarbeitung. Also hier ist mein Brute-Force-Ansatz:
Vor dem Golfen:
Hier gibt es nicht viel zu erklären. Es geht nur Zeile für Zeile und generiert die erforderliche Anzahl jedes Zeichens. Ich habe versucht, den Code selbst kompakt zu halten, aber es summiert sich immer noch.
d
ist die Breite der Tür,w
die Breite jeder Mauer.quelle
c(char*s){for(;*s;)putchar(*s++);}
==>#define c printf
;r(n,c){for(j=0;j++<n;)putchar(c);}
==>r(n,C){while(n--)putchar(C);}