При вводе строки, представляющей определение функции, выведите строку со вставленными символами новой строки и пробелами, чтобы аргументы функции были разделены и выровнены по новой строке.
Входная строка будет следовать следующей схеме:
Во-первых, он начинается с префикса, который всегда имеет длину не менее одного символа и не содержит никаких символов
,()
.Открытая скобка (
(
) будет отмечать начало списка аргументов.Список ноль или более аргументов будет следовать. Они разделяются строкой
", "
(запятая, а затем пробел). Ни один из аргументов не будет содержать никаких символов,()
.Закрывающая скобка (
)
) будет отмечать конец списка аргументов.Наконец, может быть найден постфикс, длина которого равна нулю или более и может содержать символы
,()
.
Входная строка будет состоять исключительно из печатного ASCII (что означает, что она никогда не будет содержать перевод строки).
Выход должен быть:
Префикс, скопированный дословно, и открытая скобка.
Список аргументов, на этот раз разделенный не
", "
запятой, и новой строкой, и столько пробелов, сколько необходимо для вертикального выравнивания первого символа каждого аргумента.Близкое слово и постфикс (если он существует) дословно.
Поскольку это код-гольф , победит самый короткий код в байтах.
Контрольные примеры (формат: однострочный ввод с последующим выводом и двойной новой строкой):
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>>" "
действительно умный ...