Dada una entrada de una cadena que representa una definición de función, envíe la cadena con líneas nuevas y espacios insertados para que los argumentos de la función estén separados y alineados con la línea nueva.
La cadena de entrada seguirá el siguiente patrón:
Primero, comenzará con un prefijo, que siempre tiene al menos un carácter y no contiene ninguno de los caracteres
,()
.Un paréntesis abierto (
(
) marcará el comienzo de la lista de argumentos.Seguirá una lista de cero o más argumentos. Estos están separados por la cadena
", "
(una coma y luego un espacio). Ninguno de los argumentos contendrá ninguno de los caracteres,()
.Un paréntesis cerrado (
)
) marcará el final de la lista de argumentos.Por último, se puede encontrar un postfix, que tiene cero o más caracteres y puede contener los caracteres
,()
.
La cadena de entrada consistirá únicamente en ASCII imprimible (lo que significa que nunca contendrá una nueva línea).
La salida debe ser:
El prefijo, copiado literalmente, y el paréntesis abierto.
La lista de argumentos, esta vez separada no por
", "
una coma, una nueva línea y tantos espacios como sea necesario para alinear verticalmente el primer carácter de cada argumento.El cierre paren y postfix (si existe) textualmente.
Como se trata de code-golf , ganará el código más corto en bytes.
Casos de prueba (formato: entrada de una sola línea seguida de salida seguida de una nueva línea doble):
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>>" "
es realmente inteligente ...Japt, 23 bytes
¡Pruébelo en línea!
Cómo funciona
fuente
Perl,
6252 + 2 = 54 bytesRequiere la
-p
bandera:Cómo funciona:
fuente
Retina, 31 bytes
Tenga en cuenta los espacios al final de ambas líneas.
Reemplazamos cada espacio que tiene la expresión regular
^([^(])*\([^)]*,
antes. La cadena de reemplazo será una nueva línea y el número de capturas con([^(])*
más un espacio.Una explicación más coherente viene más tarde.
Pruébelo en línea aquí.
fuente
ES6,
6867 bytesEsto funciona extrayendo la lista de argumentos de la cadena original y reemplazando cada separador de argumentos con sangría calculada a partir de la posición de la lista de argumentos dentro de la cadena original.
Editar: guardado 1 byte gracias a @ETHproductions.
fuente
.split`, `.join(...)
lugar de.replace(...)
. Resulta que el otro es un byte más corto:s=>s.replace(/\(.*?\)/,(s,n)=>s.replace(/, /g,`,\n `+` `.repeat(n)))
Pyth,
3530 bytesPruébalo aquí!
Explicación:
fuente
Groovy,
1378995 bytesGroovy no es la "herramienta adecuada para el trabajo" ™.Editar: funciona bien cuando tienes a alguien con cerebro usándolo ...Pruebas:
Algo descabellado:
fuente
Retina , 47 bytes
El recuento de bytes asume la codificación ISO 8859-1.
Pruébalo en línea!
fuente
JavaScript (ES6), 85
Prueba
fuente
"x y z(x
como puede ver,"
por eso estaba pensando que era un espacio libre. De ahí la eliminaciónJalea , 39 bytes
Pruébalo en línea!
fuente