Centrar el texto!
En este desafío, centrarás varias líneas.
Ejemplos
Foo
barbaz
Foo
barbaz
Hello
World
Hello
World
Programming Puzzles
&
Code Golf
Programming Puzzles
&
Code Golf
Presupuesto
Cada línea de entrada siempre tendrá al menos un carácter que no sea un espacio en blanco, puede suponer que el único carácter de espacio en blanco son los espacios ( ) y las nuevas líneas. Cada línea de entrada no tendrá espacios en blanco al final o al final (excepto la nueva línea). El espacio en blanco al final de la salida no está permitido.
Debería centrarse entre la línea más larga de la entrada. Si esa línea tiene una longitud uniforme, su programa / función debería preferir centrarse a la izquierda. La longitud máxima de la línea es lo que su lenguaje pueda manejar, pero su programa debería funcionar en líneas de al menos 500 de longitud.
Tabla de clasificación
Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
# Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Este es el código de golf, ¡el código más corto en bytes gana!
fuente
foo(space)(space)(space)bar
es una entrada perfectamente aceptableRespuestas:
Pyth,
1917 bytes2 bytes gracias a Jakube
Demostración
Creo que esta es la primera vez que la función de pad central
.[
es útil. La longitud de la línea más larga se encuentra utilizando transposición no truncada (.T
).Los espacios finales se eliminan agregando un carácter que no sea espacio al frente, eliminando espacios y luego eliminando el carácter agregado.
fuente
vim,
433635 bytesDemasiado bueno para no publicarlo. Tenga en cuenta la nueva línea final; Es significativo.
¡Gracias a @Marth por salvar a un personaje!
formato compatible con vim:
Explicación:
fuente
sor!
para invertir el orden de clasificación, puede usarcol("$")
para obtener la longitud de la primera línea (ahora la más larga desde que se invierte el orden) en lugar de usarG$
, ¡ahorrando un gran total de 1 byte! editar : o podría mantener el orden de clasificación y usarG:let &tw=col("$")
en su lugar.:h :sort
, acabo de descubrir que puede pasar una expresión regular para omitir el texto correspondiente en el orden, por lo que puede usar:sor /./
para ordenar por longitud (+4 bytes), lo que le permite eliminar elVGrx
(-4 bytes) y el segundo deshacer ( -1 bytes). También puede usar|
separadores en lugar de<cr>
encadenar los comandos, lo que le permite omitir el:
anteriorlet
(-1 bytes) (tenga en cuenta que debe usar lasor!
solución entonces,G
no es un comando ex). Entonces:sor! /./|let &tw=col("$")|u|%ce
(con un final<CR>
) debería ahorrar 2 bytes.Mathematica, 96 bytes
No me pregunten cómo funcionó, solo jugueteé con él hasta que produjo el resultado correcto.
fuente
Funciton , no competitivo
Este desafío ha resaltado la falta de una función de "valor máximo" (y valor mínimo) para las secuencias diferidas, así que ... las agregué a la biblioteca central (se llaman ⊤ y ⊥, respectivamente). Por lo tanto, no me molesté en enviar esto como una respuesta de golf (tendría que incluir la declaración de función ⊤ para ser válida), así que aquí está solo el programa principal.
Ejecute
(function(){$('pre,code').css({lineHeight:5/4,fontFamily:'DejaVu Sans Mono'});})()
en la consola de su navegador para obtener una mejor representación.Explicación
Creo que esta puede ser la primera respuesta de Funciton en este sitio que utiliza expresiones lambda.
ǁ
para dividir la cadena de entrada en las nuevas líneas (ASCII 10). Esto devuelve una secuencia perezosa.ɱ
(mapa), dándole una lambda que calcula la longitud de cada cadena, y luego pasamos la secuencia final⊤
para obtener la longitud de la línea más larga.ɱ
, dándole un lambda que calcula la longitud de cada cadena, lo resta de la longitud máxima de línea calculada anteriormente, divisiones que por 2 (en realidad SHIFT-derecho 1), genera que muchos espacios (ASCII 32) y luego concatena la cadena en esos espacios. (Por razones geométricas, declaró una‡
función que llama‼
(concatenación de cadenas) con los parámetros invertidos).ʝ
para volver a unir todas las cadenas, usando nuevas líneas (ASCII 10) como separador.fuente
Retina ,
5452 bytesLa
\t
s se puede reemplazar con pestañas reales, pero la he usado\t
aquí, porque de lo contrario SE convertirá las pestañas a espacios. Tenga en cuenta que hay un espacio inicial en la segunda línea.Pruébalo en línea.
Explicación
La idea básica es hacer coincidir una línea que sea al menos dos caracteres más corta que la línea más larga (o técnicamente, dos caracteres más cortos que cualquier otra línea), y rodearla en dos espacios. Esto se repite hasta que ya no podamos encontrar una línea de este tipo, lo que significa que todas las líneas están dentro de un carácter de la longitud máxima (donde el único carácter debe tener en cuenta los desajustes de paridad, y garantiza que estas líneas se desplazan hacia la izquierda) centrar).
En cuanto a la expresión regular real:
Simplemente coincide con cualquier línea mientras empuja una captura al grupo
1
para cada personaje.Es una mirada hacia atrás que se corresponde de derecha a izquierda y mueve el cursor al comienzo de la cadena, de modo que la búsqueda anticipada en el interior pueda verificar la cadena completa. Tenga en cuenta que debido a la falta de un ancla, la búsqueda anticipada podría aplicarse desde cualquier otro lugar, pero eso no crea coincidencias adicionales. Sabemos que
[^\t]
siempre coincidirá con cualquier carácter en la cadena, porque la entrada está garantizada para contener solo espacios y saltos de línea en lo que respecta al espacio en blanco.Esta búsqueda anticipada intenta encontrar una línea que tenga al menos dos caracteres más que la que estamos haciendo coincidir actualmente.
[^\t]*
se mueve a través de la cadena para poder coincidir con cualquier línea.^
asegura que empecemos desde el principio de la línea...
luego coincide con los dos caracteres adicionales que requerimos para la línea más larga. Ahora(?<-1>.)+
coincide con los caracteres individuales en esa línea mientras emerge del grupo1
(tenga en cuenta que.
no puede coincidir con un salto de línea, por lo que está limitado a una línea). Finalmente,(?(1)^)
afirma que logramos vaciar todo el grupo1
. Si la línea es más corta de lo requerido, esto no es posible, porque no hay suficientes caracteres en la línea para saltar del grupo 1 con la frecuencia suficiente para vaciarla.fuente
Jolf , 3 bytes
Sin competencia, pregunta de actualización de fechas posteriores.
Pruébalo aquí! .
¯ \ _ (ツ) _ / ¯ Pensé que sería una función útil.
fuente
JavaScript (ES6),
9391 bytes¡2 bytes guardados gracias a @ edc65 !
Explicación
Prueba
Mostrar fragmento de código
fuente
.repeat
acepta y trunca valores no enteros, por lo que no es necesario|0
CJam,
262319 bytes¡Mi primera vez usando CJam! Cuatro bytes guardados gracias a Martin Büttner. Pruébalo en línea.
Explicación
fuente
qN/_z,f{1$,m2/S*\N}
LabVIEW, 3 o 35 primitivas de LabVIEW
Encuentra líneas hasta que no quede ninguna, luego calcula cuántos espacios agregar y pone todo junto.
Alternativamente, podría usar la alineación central incorporada en los indicadores de cadena, aunque se siente como hacer trampa.
fuente
Pitón 2,
8381 bytesGracias a @xnor por guardar 2 caracteres
entrada de ejemplo:
salida de ejemplo:
Y termina en segundo lugar con 84 bytes usando str.center () y str.rstrip (gracias @JF).
fuente
len
a una variable que usa dos veces, que se iguala en 5 caracteres (comorange
). Además, puede usarmap
para la lista de comp.str.rstrip()
después de llamarcenter
para deshacerse del espacio final.len(max(a,key=len))
, vea esto .TeaScript , 24 bytes
Recorre las líneas, agrega
floor((max line length - line length) / 2)
espacios al principio.Sin golf
Pruébalo en línea
fuente
PowerShell, 58
67byteshasta 58 bytes gracias a los comentarios de @ mazzy:
$a
, recorre cada cadena con|%{...}
.string.padleft()
método en cada cadena, a través de un% -member
acceso directo, que toma la longitud de línea final deseada como parámetro.array_longest_line_length/2 + current_line_length/2
current_line_length/2
->$_.length/2
fuente
Emacs Lisp, 203 bytes
Sin golf:
Centrado:
fuente
HTML, 40 bytes
Mostrar fragmento de código
El
</xmp>
fragmento incluye una etiqueta porque el visor de fragmentos de código desea que mis etiquetas estén equilibradas.fuente
MATL , 22
31bytesCada línea se ingresa con una línea final (es decir, una enterpulsación de tecla). Una línea vacía (dosenter pulsaciones de teclas) marca el final de la entrada.
Ejemplo
Explicación
fuente
Ruby,
766861 bytesEjecución de muestra:
fuente
->t{(s=t.split$/).map{|l|l.center s.map(&:size).max}}
center
camino primero, pero según tengo entendido, eso solo rompería la regla "No se permite el espacio en blanco al final de la salida". Gracias por la&:size
parte. También probé eso también, pero ciertamente golpeé algo alrededor de la sintaxis.Haskell,
1118177 bytesEntrada a la función f, la salida no se imprime.
Uso: cargar en el intérprete
ghci center.hs
y luego si desea imprimir la salida de f en una cadena dadaputStr$f"Programming Puzzles\n&\nCode Golf"
Editar: Gracias a nimi por 34 bytes, ¡buen trabajo! :RE
fuente
map
:<$>
.replicate(...)' '
puede ser sustituido por[1.. ...]>>" "
. En resumen:unlines[([1..div(maximum(l<$>q)-l w)2]>>" ")++w|w<-q]
.l1 >> l2
realiza (longitud l1) copias de l2 y las concatena. Por ejemplo,"abcd" >> [1,2]
->[1,2,1,2,1,2,1,2]
(<- 4 copias de 1,2 en una sola lista). En nuestro caso, lo[1..n]>>" "
que es n copias de un espacio es lo mismo que lo quereplicate
hace.R, 126 bytes
código
sin golf
Probablemente hay formas mucho mejores de hacerlo, aún trabajando en ello.
fuente
Gema, 160 bytes
Escrito principalmente para mi curiosidad por ver qué se puede hacer en un lenguaje sin la estructura de matriz adecuada y la instrucción de bucle adecuada.
Ejecución de muestra:
fuente
Perl 6 , 61 bytes
uso:
fuente
for @l {
, afeitar 2 bytes, y cambiarput " "
aput" "
, afeitar otro byte. ¿Es eso cierto para Perl 6? (No sé Perl 6.) Además, su salida como se muestra aquí no coincide con la salida requerida; ¿Es eso un error tipográfico?Japt,
2825Pruébalo en línea!
Cómo funciona
fuente
PHP , 98 bytes
Pruébalo en línea!
Sin golf:
Salida:
fuente
05AB1E , 2 bytes
Construido ftw ¯ \ _ (ツ) _ / ¯
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
(La preferencia a la derecha sería con una mayúscula en su
.C
lugar: vea las diferencias ).fuente
Japt , 1 byte
Pruébalo o ejecuta todos los casos de prueba
fuente