Skip to content

Instantly share code, notes, and snippets.

@SamuelM333
Last active April 10, 2018 16:02
Show Gist options
  • Save SamuelM333/da8a51921b8998c644615909e4143fbf to your computer and use it in GitHub Desktop.
Save SamuelM333/da8a51921b8998c644615909e4143fbf to your computer and use it in GitHub Desktop.
import math
texto = "Aunque esta etapa se identifica con el uso de útiles de piedra tallada, también se utilizaron otras materias primas orgánicas para construir diversos artefactos"
ancho = 20
result = """
Aunque esta etapa se
identifica con el
uso de útiles de
piedra tallada,
también se
utilizaron otras
materias primas
orgánicas para
construir diversos
artefactos
"""
ancho = 30
result = """
Aunque esta etapa se
identifica con el uso de
útiles de piedra tallada,
también se utilizaron otras
materias primas orgánicas para
construir diversos artefactos
"""
def alinear_linea(longitud, len_linea, palabras_a_agregar_a_linea):
linea = ""
if len(palabras_a_agregar_a_linea) == 1:
linea += palabras_a_agregar_a_linea[0] + ("." * int(longitud - len(palabras_a_agregar_a_linea[0])))
elif len(palabras_a_agregar_a_linea) > 1:
espacios_a_agregar = (longitud - len_linea) / (len(palabras_a_agregar_a_linea) - 1)
ceil_espacios = int(math.ceil(espacios_a_agregar))
floor_espacios = int(math.floor(espacios_a_agregar))
decimal = (espacios_a_agregar - int(espacios_a_agregar)) * 10
for i in range(len(palabras_a_agregar_a_linea)):
linea += palabras_a_agregar_a_linea[i]
if i + 1 != len(palabras_a_agregar_a_linea):
# n n n n
if decimal == 0:
linea += "." + ("." * int(espacios_a_agregar) if espacios_a_agregar > 0 else "")
len_linea += espacios_a_agregar
# n n n-1 n-1
elif decimal == 5:
if i + 1 < len(palabras_a_agregar_a_linea) / 2:
linea += "." + ("." * ceil_espacios)
len_linea += ceil_espacios
else:
linea += "." + ("." * floor_espacios)
len_linea += floor_espacios
# n n n n-1
elif decimal > 5:
if i + 1 < len(palabras_a_agregar_a_linea) - 1:
linea += "." + ("." * ceil_espacios)
len_linea += ceil_espacios
else:
linea += "." + ("." * floor_espacios)
len_linea += floor_espacios
# n n-1 n-1 n-1
else:
if i == 0:
linea += "." + ("." * ceil_espacios)
len_linea += ceil_espacios
else:
linea += "." + ("." * floor_espacios)
len_linea += floor_espacios
return linea
def alinear_parrafo(parrafo, longitud):
lista_palabras = parrafo.split()
res = ""
len_linea = 0
palabras_a_agregar_a_linea = []
palabra_index = 0
while palabra_index < len(lista_palabras):
palabra = lista_palabras[palabra_index]
huecos = len(palabras_a_agregar_a_linea) - 1 if len(palabras_a_agregar_a_linea) > 0 else 0
if len_linea + len(palabra) + huecos < longitud:
# Paso 1: meter palabras contando los espacios
palabras_a_agregar_a_linea.append(palabra)
len_linea += len(palabra)
palabra_index += 1
else:
# Paso 2: determinar espacios extra
len_linea += len(palabras_a_agregar_a_linea) - 1
# Paso 3 Alinear linea agregando espacios
linea = alinear_linea(longitud, len_linea, palabras_a_agregar_a_linea)
# Paso 4 Agregar linea al parrafo, salto de linea y resetar variables para empezar de nuevo
len_linea = 0
palabras_a_agregar_a_linea = []
res += linea + "\n"
if len(palabras_a_agregar_a_linea) > 0:
# Paso 3 Alinear linea agregando espacios (para última linea)
len_linea += len(palabras_a_agregar_a_linea) - 1
res += alinear_linea(longitud, len_linea, palabras_a_agregar_a_linea)
return res
if __name__ == '__main__':
print(alinear_parrafo(texto, 20), "\n")
print(alinear_parrafo(texto, 30), "\n")
texto = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
print(alinear_parrafo(texto, 15), "\n")
print(alinear_parrafo(texto, 30), "\n")
print(alinear_parrafo("This is an example of text justification.", 16), "\n")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment