Wenn Sie eine Zeichenfolge eingeben, die eine Funktionsdefinition darstellt, geben Sie die Zeichenfolge mit eingefügten Zeilenumbrüchen und Leerzeichen aus, damit die Argumente der Funktion durch Zeilenumbrüche getrennt und ausgerichtet werden.
Die Eingabezeichenfolge folgt dem folgenden Muster:
Zunächst beginnt es mit einem Präfix, das immer mindestens ein Zeichen lang ist und keines der Zeichen enthält
,()
.Eine offene Klammer (
(
) markiert dann den Anfang der Argumentliste.Es folgt eine Liste mit null oder mehr Argumenten. Diese werden durch die Zeichenfolge
", "
(ein Komma und dann ein Leerzeichen) getrennt. Keines der Argumente enthält eines der Zeichen,()
.Eine enge Klammer (
)
) markiert das Ende der Argumentliste.Zuletzt kann ein Postfix gefunden werden, der null oder mehr Zeichen lang ist und die Zeichen enthalten kann
,()
.
Die Eingabezeichenfolge besteht ausschließlich aus druckbarem ASCII (dh, sie enthält niemals eine neue Zeile).
Die Ausgabe muss sein:
Das wörtlich kopierte Präfix und die offene Klammer.
Die Argumentliste, diesmal nicht durch
", "
Komma, Zeilenumbruch und so viele Leerzeichen getrennt, wie erforderlich sind, um das erste Zeichen jedes Arguments vertikal auszurichten.Das nahe Paren und Postfix (falls vorhanden) wörtlich.
Da es sich um Code-Golf , wird der kürzeste Code in Bytes gewinnen.
Testfälle (Format: einzeilige Eingabe, gefolgt von Ausgabe, gefolgt von doppelter Zeilenumbruch):
def foo(bar, baz, quux):
def foo(bar,
baz,
quux):
int main() {
int main() {
fn f(a: i32, b: f64, c: String) -> (String, Vec<i32>) {
fn f(a: i32,
b: f64,
c: String) -> (String, Vec<i32>) {
function g(h) {
function g(h) {
def abc(def, ghi, jkl, mno)
def abc(def,
ghi,
jkl,
mno)
x y z(x, y, z) x, y, z)
x y z(x,
y,
z) x, y, z)
a>>" "
ist wirklich schlau ...Japt, 23 Bytes
Online testen!
Wie es funktioniert
quelle
Perl,
6252 + 2 = 54 BytesBenötigt die
-p
Flagge:Wie es funktioniert:
quelle
Retina, 31 Bytes
Beachten Sie die Leerzeichen am Ende beider Zeilen.
Wir ersetzen jeden Raum, der den regulären Ausdruck
^([^(])*\([^)]*,
vor sich hat. Die ersetzende Zeichenfolge ist eine neue Zeile und die Anzahl der Captures mit([^(])*
plus einem Leerzeichen.Eine schlüssigere Erklärung folgt später.
Probieren Sie es hier online aus.
quelle
ES6,
6867 BytesDies funktioniert, indem die Argumentliste aus der ursprünglichen Zeichenfolge extrahiert und jedes Argumenttrennzeichen durch einen Einzug ersetzt wird, der aus der Position der Argumentliste in der ursprünglichen Zeichenfolge berechnet wird.
Bearbeiten: 1 Byte dank @ETHproductions gespeichert.
quelle
.split`, `.join(...)
statt.replace(...)
. Es stellt sich heraus, dass das andere Byte kürzer ist:s=>s.replace(/\(.*?\)/,(s,n)=>s.replace(/, /g,`,\n `+` `.repeat(n)))
Pyth,
3530 BytesProbieren Sie es hier aus!
Erläuterung:
quelle
Groovy,
1378995 BytesGroovy ist nicht das "richtige Werkzeug für den Job" ™.Bearbeiten: Es funktioniert gut, wenn Sie jemanden mit einem Gehirn haben, das es verwendet ...Tests:
Etwas ungolfed:
quelle
Netzhaut , 47 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online!
quelle
JavaScript (ES6), 85
Prüfung
quelle
"x y z(x
Wie Sie sehen können,"
dachte ich deshalb, es sei ein Leerzeichen entfernt. Daher die LöschungJelly , 39 Bytes
Probieren Sie es online!
quelle