Alineando líneas!
Dado un carácter y una cadena multilínea, su trabajo consiste en rellenar cada línea de la cadena para que se alineen entre el delimitador dado.
Ejemplos
Entrada:
,
Programming, Puzzles
And, Code golf
Salida:
Programming, Puzzles
And, Code golf
Entrada
La entrada será una cadena multilínea y un carácter (con el que se alineará), puede tomarlos en el orden / formato que desee. El personaje aparecerá exactamente una vez por línea. Cada línea de la entrada puede tener una longitud diferente.
La entrada puede ser a través de argumentos de función o STDIN.
Salida
La salida debe ser la misma cadena centrada. Se le permite una nueva línea final y ningún espacio en blanco final.
La salida debe rellenarse con la cantidad mínima de espacios. No puede eliminar ningún espacio en blanco inicial en la entrada (si existe).
La salida puede ser de retorno de función o STDOUT.
fuente
Respuestas:
Pyth, 18 bytes
fuente
APL (37)
APL simplemente no es muy bueno en el procesamiento de cadenas (o no soy bueno en el golf, por supuesto).
Esto toma el carácter como argumento izquierdo y la cadena multilínea como argumento derecho. Se supone que la cadena de varias líneas termina en un salto de línea (p . Ej., En
A\nB\nC\n
lugar deA\nB\nC
). Dado que puedo usar "cualquier formato que desee", y este también es el formato convencional para archivos de texto, creo que esto es razonable.Explicación:
S←⌽⍵
: invierte la cadena y la almacenaS
.R←S⊂⍨S=⊃S
: se divideS
en su primer carácter y almacena la matriz de cadenas enR
.⍺⍳¨⌽¨R
: invierte cada cadenaR
y luego encuentra el índice de ⍺ (el carácter) en cada cadena.(⌈/-+)
: resta cada uno de los índices del índice más grande, dando la cantidad de espacios necesarios' '/⍨¨
: para cada uno de esos valores, genera tantos espaciosR,¨
: agrega los espacios a cada cadenaR
.∊
: une todas las cuerdas⌽
: invertirlo (para recuperar el pedido original)Ejemplo:
fuente
CJam,
232220 bytesGracias a Dennis por guardar 2 bytes.
Esto lee las líneas de los argumentos de la línea de comandos y el carácter de STDIN.
El intérprete en línea no admite argumentos de línea de comandos, pero puede probar una versión equivalente aquí.
Explicación
fuente
Pip ,
222018 + 1 = 19 bytesToma cadenas como argumentos de línea de comandos y delimitador de STDIN ( idea tomada de la respuesta CJam de Martin ). Utiliza la
-n
bandera para imprimir valores de salida en líneas separadas.Y un ejemplo de ejecución:
fuente
JavaScript ES 2015, 113 bytes
No es tan corto como los idiomas de golf publicados hasta ahora. Toma la entrada como dos argumentos de función, por ejemplo
f(',','Programming, Puzzles\nAnd, Code golf')
. El fragmento a continuación no tiene golf e incluye un método fácil de probar.fuente
Pyth,
2724 bytesActualizado para el último Pyth .
Demo en vivo.
Versión de 27 bytes
Demo en vivo.
fuente
jbm
al comienzo de su respuesta, debe comenzar a pensar de inmediatoV
.b
Julia, 117 bytes
Sin golf:
fuente
Python 3, 85 (IDLE 3.2.2, Windows)
Muy claro. Esto encuentra la posición del personaje en la cadena dos veces: una para encontrar el máximo (bueno, una vez por línea), y una vez para encontrar el desplazamiento. Traté de combinar estos pero fue más largo.
Python 3 se usa para desempaquetar la entrada. MY IDLE parece tomar cadenas multilínea como entrada.
fuente
c
obtiene el delimitador ys
obtiene una lista vacía. Llamadas posteriores parainput()
devolver las líneas restantes una por una.Jalea , 12 bytes
Pruébalo en línea!
Dado y golfed con coinheringaahing caird en J Elly H yper T lluvia (JHT) , nuestra práctica sala de chat jalea.
Cómo funciona
El tercer argumento de línea de comando (primera entrada) debería ser la cadena de varias líneas, y el carácter debería ser el cuarto argumento de línea de comando (segunda entrada).
No estoy seguro de si se permite tomar entradas como una lista de líneas, por lo que esto toma una cadena de varias líneas como entrada. Si se permitiera:
10 bytes
Pruébalo en línea!
fuente
Matlab / Octave, 106 bytes
Función que usa tres argumentos separados para carácter, cadena, cadena; y da resultado en stdout:
Ejemplo en Matlab:
O pruébelo en línea con el intérprete Octave.
fuente
Julia, 80 bytes
Sin golf:
fuente
JavaScript (ES6), 105
Usando cadenas de plantilla, las 2 nuevas líneas son significativas y contadas.
Pruebe a ejecutar el fragmento en cualquier navegador compatible con EcmaScript 6 (es decir, FireFox. Chrome no admite parámetros predeterminados)
fuente
Python 2, 93 bytes
Llamado así:
fuente
C # 4.0,
329,320,307 bytesVersión sin golf:
Acepta un máximo de 9999 líneas ...
fuente
Dyalog APL ,
222016 bytes-4 gracias a ngn.
APL en realidad no es tan malo en el procesamiento de cadenas, si se le permite trabajar con matrices. En este desafío, podemos elegir el formato más apropiado, que para APL significa un vector de vectores de texto como argumento izquierdo, y el delimitador como argumento escalar derecho. Esto incluso maneja múltiples delimitadores por línea, y alinea el primero de cada línea.
⊣,¨⍨
anteponer cada línea con' '⍴¨⍨
tantos espacios como⌈.⍳
el índice más a la derecha del personaje entre las líneas-
menos⍳¨
el índice del personaje en cada línea¡Prueba APL en línea! (
↑
agregado a la salida de impresión verticalmente)¿Prima? Funciona para cualquier número de cadenas y delimitadores (se alinea por el extremo izquierdo).
fuente
⊣,¨⍨' '⍴¨⍨⌈.⍳-⍳¨
C #, 191
Como una función. Aproximadamente un portado de mi respuesta JS.
fuente
Ruby, 74 bytes
y llámalo como
fuente
R, 68 bytes
Función sin nombre que toma
3
entradas;c
cuál es el carácter a alinear,x
es la primera cadena yy
la segunda cadena.En R, la función
regexpr
devuelve la posición de un patrón dado en una cadena. La solución funciona mediante la aplicaciónregexpr
en ambas cadenas y repitiendo espacios en blanco equivalentes a la diferencia y, posteriormente, solo imprime ambas entradas separadas por una nueva línea.fuente
Python 2,
6766 bytesLlamado con:
fuente
Moonscript, 138 bytes
Esto devuelve una función que toma 2 argumentos. El primero es la cadena, el segundo es el carácter para alinear. Estos argumentos son el argumento implícito @, y n.
Primero, agrego una nueva línea a la cadena, para facilitar el procesamiento.
Ahora, genero una lista de las posiciones de cada carácter de alineación, usando
gmatch
. Luego, reemplazo la nueva línea antes de cada línea con el número correcto de espacios, luego recorto la nueva línea que agregué al principio.fuente
Lua, 169 bytes
No es tan breve como otras respuestas, pero esta es la primera: D
fuente
Retina , 71 bytes
Pruébalo en línea! Nota: Esto deja el carácter de alineación en la salida; Se puede eliminar a un costo de 4 bytes. Si solo hay que alinear dos cadenas, entonces para 52 bytes:
Explicación:
Esto coincide con el carácter de alineación.
Esto coincide con la primera línea y también realiza un seguimiento de cuántos caracteres había antes del carácter de alineación. (.NET mantiene una pila de coincidencias para cada variable, en este caso,
$3
).Esto coincide con la segunda línea, tratando de dar cuenta de tantos caracteres como encontramos en la primera línea.
?<-3>
hace que la coincidencia haga estallar la pila para cada personaje, hasta que esté vacía, en cuyo punto la coincidencia falla, y(.)*
luego coincide con los caracteres restantes antes del carácter de alineación. En este punto tenemos las siguientes variables:$1
contiene el carácter de alineación$2
contiene la primera línea$3
contiene una pila cuya longitud es el prefijo de la primera línea menos el prefijo de la segunda línea$4
contiene la segunda línea$5
contiene una pila cuya longitud es el prefijo de la segunda línea menos el prefijo de la primera línea$#5$*
luego prefijos el número necesario de espacios para que la primera línea se alinee con la segunda, y viceversa para$#3$*
.Una lógica similar se aplica a la respuesta principal, excepto que aquí tenemos que encontrar dos líneas que no se alinean para que podamos alinearlas (aquí es donde
?(5)
entra) y luego repetir la alineación sobre todas las líneas hasta que todas estén igualmente alineadas .fuente
Lisp común, 101 bytes
El primer parámetro es el carácter, el segundo es una lista de cadenas a alinear.
Pruébalo en línea!
fuente