Einführung
Es ist 2600 v. Chr. Und die Menschen bauen jetzt Pyramiden. Sie haben bereits die Basis der Pyramide geschaffen, wissen aber nicht, wie sie fortfahren sollen. Also haben sie dich um Hilfe gerufen.
Die Regeln für die Herstellung einer Pyramide sind recht einfach. Für die Ebene über der vorherigen Ebene müssen Sie nur diese Schritt-für-Schritt-Anleitung befolgen:
Schneiden Sie die Kanten der vorherigen Ebene ab.
Über dem
/
Zeichen muss sich ein\
Zeichen befinden und umgekehrt. Dies gilt für alle Zeichen mit Ausnahme der Kanten.Das Zeichen ganz links ist immer ein
/
und das Zeichen ganz rechts ist immer ein\
.
Nehmen wir ein Beispiel für eine Pyramidenbasis:
//\/\/\\
Wir schneiden die Ränder ab und lassen:
/\/\/\
Wir ersetzen die Schrägstriche durch umgekehrte Schrägstriche und umgekehrt:
\/\/\/
Das Zeichen ganz links ist immer ein /
und das Zeichen ganz rechts ist immer ein \
, also ändern wir das:
//\/\\
Wir platzieren diese Ebene auf der vorherigen Ebene:
//\/\\
//\/\/\\
Wir fahren weiter, bis der Gipfel erreicht ist (wie es aussieht) /\
). Also, irgendwann bekommen wir:
/\
//\\
//\/\\
//\/\/\\
Dies ist, was Sie ausgeben müssen.
Die Aufgabe
Geben Sie auf der Grundlage einer Pyramide (mit einer Länge von mehr als 3) die vollständige Pyramide aus. Sie können davon ausgehen, dass das Zeichen ganz links /
und das Zeichen ganz rechts a ist \
. Sie können auch davon ausgehen, dass die Länge der Basis immer gerade ist . Die Verwendung von nachgestellten Leerzeichen ist zulässig. Die Verwendung von führenden Leerzeichen ist ebenfalls zulässig, solange die Pyramide an Ort und Stelle bleibt. Die Verwendung von 1 Trailing und 1 Leading Zeilen ist zulässig.
Testfälle
Input: /\\\
Output:
/\
/\\\
Input: //\\///\/\
Output:
/\
/\\\
/\///\
///\\\/\
//\\///\/\
Input: /////////////\
Output:
/\
/\\\
/////\
/\\\\\\\
/////////\
/\\\\\\\\\\\
/////////////\
Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
Antworten:
Gelee ,
28 26 2524 Bytes-4 Bytes dank Dennis
Rezept:
(mit Limonade servieren, diese Pyramiden machen durstige Arbeiter)
Stellen Sie sich bei TryItOnline Ihre eigene Pyramide zusammen oder probieren Sie alle vom OP empfohlenen Verkostungen aus
quelle
Retina ,
59565452 BytesProbieren Sie es online!
Beispielausgabe
quelle
Pyth -
2726 BytesReduziert sich um die im OP angegebene Operation, bis sie sich wiederholt, was für die leere Zeile der Fall ist.
Test Suite .
quelle
Python 2, 78 Bytes
Eine rekursive Funktion, die eine Zeichenfolge ausgibt. Jede Ebene der Pyramide wird mit der darüber liegenden Ebene an den rekursiven Aufruf angehängt. Das Präfix
p
, das als Newline-Zeichen beginnt, erhält ein Leerzeichen mehr, um das Dreieck zu bilden. Die nächste Ebene wird durch Vertauschen der Schrägstriche, Abschneiden der ersten und letzten beiden Symbole und Einfügen in einen linken und rechten Schrägstrich erstellt.Python 3 können , indem Sie ein Byte speichern
*99
in dertranslate
, wie die Länge-256 Forderung fallen gelassen wurde.quelle
Haskell,
98949085 BytesAnwendungsbeispiel (Hinweis: In Haskell müssen Backslashes innerhalb von Literal-Strings maskiert werden
\\
):Einfacher Rekursionsansatz: Erledigt
#
die Arbeit durch Mappings
, bei dem das/
und\
auf die inneren Elemente gekippt wird . Der zusätzliche Parametert
verfolgt die Einrückungsstufe und wird bei jedem rekursiven Aufruf um ein Leerzeichen erweitert.Hinweis: Der zweite rekursive Aufruf von
#
(->l#""
) springt direkt zum Basisfall und ist nur ein kurzer Wegl
,\
eine neue Zeile hinzuzufügen, dh zu ersetzen++l++"\\\n"
.Edit: @xnor 5 Bytes gespeichert. Vielen Dank!
quelle
l++"\\\n"
sieht aus wiel#""
.s
ist[c|x<-s,c<-"ab",c/=x]
.++"\\\n"
, aber ich habe diesen verpasst. Vielen Dank!Python 3,
108 104 101 94 91 8988 Bytes-7 Bytes dank xnor (lassen Sie mich wissen, dass wir nicht drucken müssen!)
-3 Bytes dank xnor (Deklaration außerhalb der Funktionsdeklaration [d'oh])
-1 Bytes dank Dennis (Ersetzen)
f,b='/\\'
durchb,f='\/'
)Teste es auf ideone . Hinweis: Die Eingabe wurde für doppelten Backslash angepasst (gerade rohe Zeichenfolgen funktionieren nicht, wenn sie mit einer ungeraden Anzahl von Backslashs enden).
quelle
f,b='/\\'
außerhalb der Funktion deklarieren .JavaScript (ES6),
91.86ByteDie Ausgabe enthält ein führendes Zeilenumbruchzeichen.
quelle
Ruby, 80 Bytes
Ungolfed
Sehen Sie es auf ideone: http://ideone.com/HN0l0Y
quelle
f
im Körper nicht gesehenBatch, 137 Bytes
Praktischerweise bedeutet meine Verwendung von
%~2
und%1
, dass ich keine Bytes ausgeben musssetlocal
. Erläuterung: Da Batch keine Ersetzungen für die leere Zeichenfolge vornimmt, müssen wir die nächste Ebene mit den "falschen" Kanten einrichten, die dann im Rahmen der Zeichenfolgenersetzung korrigiert werden.quelle
BASH (sed + sort)
7166 Byteseingabe kommt von stdin.
Beispiel:
Erklärung:
-n
- Auto-Druck unterdrücken:l
- undtl
zurück zum Anfang verzweigen, wenn diese Zeile etwas anderes war als/\
p
- diese Zeile druckeny|\\/|1\\|;y|1|/|
-\
mit1
,/
mit\
und dann1
mit/
th;:h
- testen und an die gleiche Stelle springen, damit nur die nächste Ersetzung getestet wird späters|\\.(.*)./| /\1\\|
- ersetzen Sie die äußeren zwei Schrägstriche auf jeder Seite durch{space}/
und\
sort
-space
kommen Sie vor,/
damit alles in die richtige Reihenfolge gebracht wirdquelle
05AB1E,
423836 BytesProbieren Sie es online!
Erläuterung:
(Danke an Emigna für den Hinweis
DD -> Ð
undDR -> Â
).quelle
Dg;GDðK¦¦¨¨„/\‡'\«R'/«ðN׫R}r»
spart 7 Bytes.Los,
300276 BytesLange Version:
quelle
import(."regexp";."os")
Spart 2 BytesPerl,
5352 BytesBeinhaltet +1 für
-p
Führen Sie mit der Eingabe auf STDIN, z
pyramid.pl
:quelle
05AB1E , 31 Bytes
Erläuterung
Probieren Sie es online aus
quelle
> <> ,
186179175171 BytesOh Mann, das ist definitiv meine bisher größte> <> Antwort.
Es bleibt wahrscheinlich noch ein bisschen Golf zu spielen (der untere Bereich ist ziemlich verschwenderisch)
Probieren Sie es online aus
quelle
Powershell, 142 Bytes
quelle
C #, 250 Bytes
Kann definitiv weiter golfen werden, aber mein Gehirn ist kaputt gegangen, also habe ich beschlossen, es so zu lassen, wie es momentan ist.
quelle