Biorąc pod uwagę ciąg znaków reprezentujący definicję funkcji, wypisz ciąg z wstawionymi znakami nowej linii i spacjami, tak aby argumenty funkcji były oddzielone znakiem nowej linii i wyrównane.
Łańcuch wejściowy będzie zgodny z następującym wzorem:
Po pierwsze, rozpocznie się od prefiksu, który zawsze ma co najmniej jeden znak i nie zawiera żadnego ze znaków
,()
.Otwarty nawias (
(
) oznacza wtedy początek listy argumentów.Następnie pojawi się lista zero lub więcej argumentów. Są one oddzielone ciągiem
", "
(przecinek, a następnie spacja). Żaden z argumentów nie będzie zawierał żadnego ze znaków,()
.Zamknięty nawias (
)
) oznacza koniec listy argumentów.Na koniec może zostać znaleziony postfiks, który ma zero lub więcej znaków i może zawierać znaki
,()
.
Łańcuch wejściowy będzie się składał wyłącznie z drukowalnego ASCII (co oznacza, że nigdy nie będzie zawierał nowej linii).
Dane wyjściowe muszą być:
Prefiks, skopiowany dosłownie i otwarty nawias.
Lista argumentów, tym razem oddzielona nie
", "
przecinkiem, lecz przecinkiem, znakiem nowej linii i tyloma spacjami, ile potrzeba do wyrównania w pionie pierwszego znaku każdego argumentu.Zamknięty paren i postfiks (jeśli istnieje) dosłownie.
Ponieważ jest to code-golf , wygra najkrótszy kod w bajtach.
Przypadki testowe (format: wejście jednowierszowe, następnie wyjście, a następnie podwójna nowa linia):
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>>" "
jest naprawdę sprytny ...Japt, 23 bajty
Przetestuj online!
Jak to działa
źródło
Perl,
6252 + 2 = 54 bajtyWymaga
-p
flagi:Jak to działa:
źródło
Retina, 31 bajtów
Zwróć uwagę na spacje na końcu obu linii.
Zastępujemy każde miejsce, które ma
^([^(])*\([^)]*,
przed nim wyrażenie regularne . Zastępujący ciąg będzie nową linią, a liczba przechwyceń z([^(])*
plus jedną spacją.Bardziej spójne wyjaśnienie pojawia się później.
Wypróbuj online tutaj.
źródło
ES6,
6867 bajtówDziała to poprzez wyodrębnienie listy argumentów z oryginalnego ciągu i zastąpienie każdego separatora argumentów wcięciem obliczonym na podstawie pozycji listy argumentów w oryginalnym ciągu.
Edycja: Zapisano 1 bajt dzięki @ETHproductions.
źródło
.split`, `.join(...)
zamiast.replace(...)
. Okazuje się, że drugi jest o bajt krótszy:s=>s.replace(/\(.*?\)/,(s,n)=>s.replace(/, /g,`,\n `+` `.repeat(n)))
Pyth,
3530 bajtówWypróbuj tutaj!
Wyjaśnienie:
źródło
Groovy,
1378995 bajtówGroovy nie jest „odpowiednim narzędziem do pracy” ™.Edycja: Działa dobrze, gdy używasz kogoś z mózgiem…Testy:
Nieco golfisty:
źródło
Siatkówka , 47 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Wypróbuj online!
źródło
JavaScript (ES6), 85
Test
źródło
"x y z(x
jak widać"
, dlatego myślałem, że to jedno wolne miejsce. Stąd usunięcieGalaretka , 39 bajtów
Wypróbuj online!
źródło