Dada a entrada de uma sequência que representa uma definição de função, imprima a sequência com novas linhas e espaços inseridos para que os argumentos da função sejam separados por novas linhas e alinhados.
A sequência de entrada seguirá o seguinte padrão:
Primeiro, ele começará com um prefixo, que sempre tem pelo menos um caractere e não contém nenhum dos caracteres
,()
.Um parêntese aberto (
(
) marcará o início da lista de argumentos.Uma lista de zero ou mais argumentos será seguida. Estes são separados pela cadeia de caracteres
", "
(uma vírgula e depois um espaço). Nenhum dos argumentos conterá nenhum dos caracteres,()
.Um parêntese próximo (
)
) marcará o final da lista de argumentos.Por fim, pode ser encontrado um postfix, que tem zero ou mais caracteres e pode conter os caracteres
,()
.
A sequência de entrada consistirá apenas em ASCII imprimível (o que significa que nunca conterá uma nova linha).
A saída deve ser:
O prefixo, copiado literalmente, e o parêntese aberto.
A lista de argumentos, desta vez separada não por
", "
vírgula, nova linha e quantos espaços forem necessários para alinhar verticalmente o primeiro caractere de cada argumento.O ponto final e o pós-fixos (se existir) literalmente.
Como esse é o código-golfe , o código mais curto em bytes será vencedor.
Casos de teste (formato: entrada de linha única seguida de saída seguida de nova linha dupla):
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>>" "
é realmente inteligente ...Japonês, 23 bytes
Teste online!
Como funciona
fonte
Perl,
6252 + 2 = 54 bytesRequer a
-p
bandeira:Como funciona:
fonte
Retina, 31 bytes
Observe os espaços no final das duas linhas.
Substituímos todo espaço que possui o regex
^([^(])*\([^)]*,
antes dele. A sequência de substituição será uma nova linha e o número de capturas com([^(])*
mais um espaço.Uma explicação mais coerente vem depois.
Experimente online aqui.
fonte
ES6,
6867 bytesIsso funciona extraindo a lista de argumentos da string original e substituindo cada separador de argumentos por recuo calculado a partir da posição da lista de argumentos na string original.
Editar: salvou 1 byte graças a @ETHproductions.
fonte
.split`, `.join(...)
vez de.replace(...)
. Acontece que o outro é um byte mais curto:s=>s.replace(/\(.*?\)/,(s,n)=>s.replace(/, /g,`,\n `+` `.repeat(n)))
Pyth,
3530 bytesExperimente aqui!
Explicação:
fonte
Groovy,
1378995 bytesO Groovy não é a "Ferramenta certa para o trabalho" ™.Edit: Ele funciona muito bem quando você tem alguém com um cérebro usá-lo ...Testes:
Um pouco não-destruído:
fonte
Retina , 47 bytes
A contagem de bytes assume a codificação ISO 8859-1.
Experimente online!
fonte
JavaScript (ES6), 85
Teste
fonte
"x y z(x
como você pode ver,"
é por isso que eu estava pensando que era um espaço livre. Daí a exclusãoGeléia , 39 bytes
Experimente online!
fonte