Vorausgesetzt, die folgenden Eingaben in das Programm:
- Liste der Blockstartzeichen
- Liste der Blockendezeichen
- Eine zu formatierende Zeichenfolge
Formatieren Sie die Zeichenfolge mit den Blöcken, die durch die beiden eingerückten Zeichensätze begrenzt sind.
Die Formatierung erfolgt mit zwei Leerzeichen pro Ebene, und die Klammern werden wie im folgenden Beispiel dargestellt gesetzt. Sie können davon ausgehen, dass die Sätze der öffnenden und schließenden Zeichen nicht zusammenfallen.
ZB für {[(<
und }])>
als öffnende und schließende Zeichensätze und folgende Zeichenfolge:
abc{xyz{text[note{comment(t{ex}t)abc}]}}
Folgende Ausgabe wird erwartet:
abc
{
xyz
{
text
[
note
{
comment
(
t
{
ex
}
t
)
abc
}
]
}
}
Sie dürfen die Liste der Zeichen in Klammern nicht hart codieren. Wie die Eingabe erfolgt, ist jedoch nicht festgelegt. Dies können entweder Befehlszeilenargumente oder Standardeingaben sein.
code-golf
string
whitespace
balanced-string
Prashant Bhate
quelle
quelle
./program 'p' 'q' <<< '1p23p45q67q8'
Oder braucht es nur Unterstützung{[(<
und}])>
?Antworten:
Ruby,
1061019695Die Eingabe erfolgt über die Kommandozeile.
quelle
~-j+=1
anstelle von verwenden(j+=1;j-1)
. Außerdem können Sie durch Verwenden von$.
Überall anstelle vonj
die entfernenj=0
, wodurch ein anderes Zeichen gespeichert wird.Perl -
1319694 ZeichenZumindest scheint es Raum zu geben, um gängige Ausdrücke zu eliminieren, aber es ist eine kurze Darstellung, die das Beispiel behandelt, sowie Joey Adams 'Hypothese über beliebige Klammern.
Es gab in der Tat viel Raum für Verbesserungen:
... und noch ein bisschen mehr:
quelle
Mathematica (nicht Code Golf)
Prüfung
Als Bonus kann die folgende Funktion verwendet werden, um mathematische Ausdrücke zu formatieren
EDIT (Nicht-Code-Golf) Aktualisiert mit feiner granularer Kontrolle über die Art und Weise, wie Zeilenumbrüche gerendert werden
Ausgabe
quelle
indent
. Ist Ihr Ziel maximal knapper Code oder Lesbarkeit? Es gibt eine Reihe von Möglichkeiten, diesen Code zu verkürzen, wenn dies tatsächlich Ihr Ziel ist. Außerdem: "Sie dürfen die Liste der Zeichen in Klammern nicht hart codieren." doch ist das nicht genau das, was du hier getan hast? Wie auch immer, es tut mir leid, so negativ zu klingen. Es erscheint mir nur als seltsame Antwort auf Ihre eigene Herausforderung.JavaScript,
255227205 ZeichenHey, seine Länge passt perfekt in ein Byte! : DEs ist eine Funktion, übergebe ihr die Startzeichen, die Endzeichen und dann den Text.
quelle
Python - 162 Zeichen
quelle
Python 2.7.X - 136 Zeichen
Verwendung : $ ./foo.py '(' ')' '(ab (cd (ef) gh) ij)'
Resultierende Ausgabe:
quelle
print
Anweisungen?C -
213209Ich hasse dumme Fehler ...>. <
Liest left-parens aus dem ersten Befehlszeilenargument, right-parens aus dem zweiten Argument und rückt stdin ein.
Hübsch gedruckt und kommentiert:
quelle
C (
159225 Zeichen)Es hat mich 66 zusätzliche Zeichen gekostet, nur um den Fehler mit den leeren Zeilen zu beheben :( Ehrlich gesagt, ich brauche eine neue Herangehensweise, aber ich werde es vorerst einen Tag nennen.
Ein ziemlich schneller und schmutziger Ansatz. Es hat den Fehler, Leerzeilen zwischen aufeinanderfolgenden schließenden Klammern zu erzeugen, aber sonst macht es den Job (oder so denke ich). Irgendwann in dieser Woche werde ich noch einmal darauf zurückgreifen, um eine bessere und sauberere Lösung zu finden.
char * b ist die öffnende Klammer, char * e die schließende Klammer und char * s die Eingabezeichenfolge.
quelle
Perl - 69 Bytes
TMTOWTDI vereinfacht den Code
quelle
Scala (2,9), 211 Zeichen
quelle
Perl -
8985 BytesEine Version von Hojung Youns Antwort, die die Blockzeichen über zwei Argumente akzeptiert.
Genannt wie:
quelle
Python3,
184182 ZeichenBeispiel:
quelle
_,p,q,t=sys.argv
Groovy, 125
Sie können das Skript in einer Datei indent.groovy speichern und es mit folgendem Befehl ausprobieren:
groovy indent.groovy "abc {xyz {text [hinweis {kommentar (t {ex} t) abc}]}" "{[(" ") ]} "
quelle
Python - 407
Eine ungolfed Version des Programms:
Die Argumente für das Programm lauten (in der angegebenen Reihenfolge): die öffnenden Klammern, die schließenden Klammern und der einzurückende Text.
Beispiel ($ ist die Eingabeaufforderung):
quelle
D (300)
benötigt eine nullterminierte Zeichenkette für die Begrenzungsprüfung (ansonsten
if(*s)
muss die geändert werden inif(s.length)
)quelle
Java
Non
codegolf version
! Angenommen, wir haben diese Version von split () , die delims enthält,quelle
StringUtils
ist nicht Teil des Standard JDK.C 284 Zeichen ohne Leerzeichen
Ich bin kein Fan von Verschleierung, aber gut ...
Verwendung: ./Programm start_brackets end_brackets string_to_parse
quelle
php
(187)(153)Die Funktion akzeptiert Zeichenfolgen, öffnende Begrenzer und endende Begrenzer als Argumente.
quelle
C 256
Parameter:
Ich habe den Code getrennt, um die horizontale Bildlaufleiste zu umgehen.
Das vollständige Programm besteht aus 363 Zeichen.
quelle
VB.net (? C)
Die Sprache eignet sich nicht zum Code-Golfen, daher habe ich einen ungewöhnlichen Ansatz gewählt. Verwenden eines Ablaufverfolgungslisteners zur Ausgabe an die Konsole.
Verwendet Befehlszeilenargumente für die Eingabe
quelle
Powershell, 146 Bytes
Ungolfed Erklärung
quelle
C, 181 Zeichen
So ziemlich der einfachste Ansatz, den man sich vorstellen kann. Durchlaufen Sie die Zeichenfolge (v [3]). Wenn es sich um eine linke Klammer handelt (wie in v [1] definiert), erhöhen Sie die Einrückungsstufe. Wenn es sich um eine rechte Klammer handelt (wie in v [2] definiert), verringern Sie die Einrückungsstufe .
quelle
C
114121Nicht sehr schön, aber eine Lösung. Je nachdem, ob die Eingabe in Klammern beginnt oder endet, kann eine leere Zeile vor oder nach der Eingabe erscheinen.
Mit der neuen Einschränkung ist dieser Ansatz für das Golfen fast unbrauchbar.
quelle