При вводе строки, представляющей определение функции, выведите строку со вставленными символами новой строки и пробелами, чтобы аргументы функции были разделены и выровнены по новой строке.
Входная строка будет следовать следующей схеме:
Во-первых, он начинается с префикса, который всегда имеет длину не менее одного символа и не содержит никаких символов
,()
.Открытая скобка (
(
) будет отмечать начало списка аргументов.Список ноль или более аргументов будет следовать. Они разделяются строкой
", "
(запятая, а затем пробел). Ни один из аргументов не будет содержать никаких символов,()
.Закрывающая скобка (
)
) будет отмечать конец списка аргументов.Наконец, может быть найден постфикс, длина которого равна нулю или более и может содержать символы
,()
.
Входная строка будет состоять исключительно из печатного 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>>" "
действительно умный ...Japt, 23 байта
Проверьте это онлайн!
Как это устроено
источник
Perl,
6252 + 2 = 54 байтаТребуется
-p
флаг:Как это устроено:
источник
Сетчатка, 31 байт
Обратите внимание на пробелы в конце обеих строк.
Мы заменяем каждое пространство,
^([^(])*\([^)]*,
перед которым находится регулярное выражение . Заменяющая строка будет новой строкой, а количество перехватов([^(])*
плюс один пробел.Более последовательное объяснение приходит позже.
Попробуйте это онлайн здесь.
источник
ES6,
6867 байтЭто работает путем извлечения списка аргументов из исходной строки и замены каждого разделителя аргументов отступом, рассчитанным по позиции списка аргументов в исходной строке.
Редактировать: 1 байт сохранен благодаря @ETHproductions.
источник
.split`, `.join(...)
вместо.replace(...)
. Оказалось, что другой на байт короче:s=>s.replace(/\(.*?\)/,(s,n)=>s.replace(/, /g,`,\n `+` `.repeat(n)))
Pyth,
3530 байтПопробуй это здесь!
Объяснение:
источник
Groovy,
1378995 байтGroovy не является «Правильным инструментом для работы» ™.Редактировать: это работает просто отлично, когда у вас есть кто-то с мозгом, использующим его ...тесты:
Немного не одураченный
источник
Сетчатка , 47 байт
Количество байтов предполагает кодировку ISO 8859-1.
Попробуйте онлайн!
источник
JavaScript (ES6), 85
Тестовое задание
источник
"x y z(x
как вы можете видеть,"
поэтому я подумал, что это один пробел. Отсюда и удалениеЖеле , 39 байт
Попробуйте онлайн!
источник