Su trabajo es tomar una entrada de cadena y un número y alinear la cadena a la derecha, haciendo que el ancho del texto sea el número. Cuando una línea es demasiado larga, sepárela y coloque el resto en la siguiente línea, repitiendo hasta que no sea necesario. Si una línea es más corta que el ancho, rellene con espacios. Pueden aparecer varias líneas nuevas y deben tratarse como cualquier otro carácter individual.
Por ejemplo, la cadena
Programming
Puzzles
&
Code
Golf
y el número 5
produciría:
Progr
ammin
g
Puzzl
es
&
Code
Golf
Mientras que la misma cadena y el número 10
producirían:
Programmin
g
Puzzles
&
Code
Golf
La cuerda
a
b
y el número 5 produciría:
a
<-- note the 5 spaces
b
¡El código más corto gana!
Programming Puzzles\n&\nCode Golf
?Respuestas:
Pyth, 14 bytes
Demostración
Utiliza el operador de almohadilla de Pyth.
fuente
Pitón 2, 84
Toma como entrada una cadena con nuevas líneas y un número, e imprime el resultado. Para cada línea en la entrada, toma e imprime
n
caracteres a la vez, usando el incorporadorjust
para rellenar la izquierda con espacios antes de imprimir.Arreglé el caso de la línea vacía con el truco
w=w or' '
. Probablemente haya un método mejor, pero no voy a pensar mucho en ello.fuente
CJam, 21 bytes
Gracias a @ Sp3000 por jugar 1 byte y allanar el camino para 3 más.
Pruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
Pyth, 16
Pruébalo en línea aquí
Explicación
fuente
Perl, 39 bytes
36 bytes + 3 bytes para
-ni
. El ancho de ajuste se pasa como argumento a-i
.Maneja las líneas en blanco correctamente rellenándolas con espacios:
Cómo funciona
Esta solución utiliza el operador de sustitución para recorrer la entrada, guardando un byte sobre el
for
ciclo equivalente . Sin embargo, el verdadero truco está en la expresión regular en el LHS de la sustitución:Con el modificador global, esto coincidirá con los
$^I
caracteres a la vez; cuando quedan menos de$^I
caracteres en la cadena, coincidirá todo hasta el final. La alternancia con^$
se requiere para manejar líneas en blanco. Por ejemplo:El RHS de la sustitución simplemente se usa
printf
para rellenar a la izquierda el fragmento coincidente con espacios.fuente
$^I
!Javascript (ES6), 107
Desearía que JS tuviera una función de almohadilla integrada. Oh bien.
Explicación:
fuente
Julia, 126 bytes
Sin golf:
fuente
Bash,
62,61+ función, 59Más corto si
N
puede establecerlo la persona que llama, en lugar de tener que leerlo como la primera línea de entrada.Esto no puede manejar líneas vacías en la entrada. De lo contrario, esto no somete los datos de entrada a la división de palabras, la expansión del nombre de ruta ni los trata como algo más que solo datos sin procesar.
read -n$N
salva a un personaje, pero vamos aread
machacar\
.Se
[[ $r ]]&&
necesita porqueread -n4
no puede mirar hacia adelante para ver que el próximo carácter es una nueva línea. Por lo tanto, se establecer
en una cadena de 4 caracteres, y la siguiente lectura produce una cadena vacía de cero caracteres. Filtrar estas nuevas líneas falsas sin filtrar nuevas líneas reales requeriría un estado de seguimiento: si la línea anterior era de longitud máxima o no. Se necesitaría más código o un enfoque totalmente diferente.[[ $r ]]
es más corto de[ -n "$r" ]
lo necesario para evitar errores si la línea comienza con-z foo
, o es*
o algo, si lo usó[ $r ]
.La justificación ocurre con la cadena de formato estándar printf "% 4s".
Prueba con
fuente
-r
en el conteo de bytes. 2.f()(while ... done)
es un poco más corto.[[ $r ]]&&
N, si 4 =, una línea de entrada de longitud 4 producirá una línea de salida en blanco donde no había una antes. Debido a queread
devuelve una cadena de 4 caracteres, luego ve una nueva línea en la próxima llamada y regresa de inmediato. Además, gracias por el()
consejo. No sabía que pudieras definir los fns de esa manera.while
que ya está compuesto, ni siquiera necesita los paréntesis:f()while ... done
Haskell, 108 bytes
Ejemplo de uso:
Cómo funciona
fuente
GNU awk + bash, 70
Usar bash para colocar el conteo en el programa awk es un problema. más pequeño que leerlo con un
NR==1{N=$0}
bloque.Lee una línea a la vez. Dividir en un máximo de 4 fragmentos de caracteres, usando FPAT. (coincide con los campos, en lugar de los separadores. Extensión GNU). printf cada campo por separado. (ORS predeterminado = \ n).
La
/^$/
regla está ahí para imprimir líneas vacías, que tienen NF = 0 y, por lo tanto, no imprimen en absoluto en el otro bloque. Entonces, a diferencia de mi solución pure-bash, esto realmente funciona en el caso general.Semi-sin relación, pero mi idea hasta ahora para perl es 112 caracteres para solo el código perl:
Esto se come una de las nuevas líneas y es demasiado largo.
$/=\1
lee un byte a la vez. Anexamos $ l. Probablemente una línea a la vez con enfoque dividido de ancho fijo sería más corta.fuente
Bash + GNU utils, 41
La cadena se ingresa a través de STDIN, el ancho se ingresa mediante la línea de comandos arg:
fuente
Python 2, 151 bytes
Esta es una adaptación de la respuesta de @ xnor anterior, ya que la suya no maneja correctamente las nuevas líneas.
El
for
bucle fue cambiado de:a:
Ejemplo
fuente
C #, 143 bytes
Linq te permite hacer expresiones bastante retorcidas.
GroupBy
es útil aquí, pero es una pena que no puedan crear sobrecargas de funciones tomando el índice.Asignar la lambda a un
Func<string, int, string>
para ejecutarloMenos golfizado:
fuente
Groovy, 63 bytes
Devuelve la cadena correctamente alineada. No sabía que había una función padLeft (y padRight, padCenter) hasta ahora.
fuente
JavaScript
174136fuente
Ceilán, 107
fuente
Matlab, 99 bytes
¡Gracias a @beaker por eliminar 6 bytes!
Uso y función anónima:
Defina la función y use
ans
para llamarla:fuente
Burlesque, 28 bytes
Igual que la versión siguiente, pero trata la línea 1 como el número y las otras líneas como la cadena.
Uso como en:
Versión anterior (16 bytes):
Ejemplo:
fuente