Distribuye hasta 100 palabras sin espacios en líneas de uno a 80 puntos de código, minimizando el espacio sobrante al cuadrado salvo en la última línea.
Flujos de trabajo · Ajuste de líneas con irregularidad mínima ×
def wrap_words(words, width):
words = tuple(words)
if type(width) is not int or not 1 <= width <= 80 or len(words) > 100:
raise ValueError("wrap.limit")
if any(type(w) is not str or not w or len(w) > width or any(c.isspace() for c in w) for w in words):
raise ValueError("wrap.word")
n = len(words)
costs, ends = [0] * (n+1), [0] * n
for i in range(n-1, -1, -1):
used, best = 0, None
for j in range(i, n):
used += len(words[j]) + (j > i)
if used > width:
break
cost = 0 if j == n-1 else (width-used)**2 + costs[j+1]
if best is None or cost < best:
best, ends[i] = cost, j+1
costs[i] = best
lines, i = [], 0
while i < n:
lines.append(" ".join(words[i:ends[i]]))
i = ends[i]
return lines
✳Distribuye hasta 100 palabras sin espacios en líneas de uno a 80 puntos de código, minimizando el espacio sobrante al cuadrado salvo en la última línea.
✓ CambiosRevisa antes de aplicar ↗
Vista ilustrativa
Revisa antes de aplicar
Compara el comportamiento real con el resultado esperado. Si una prueba falla, investiga la causa antes de hacer más cambios.
Modelos
Configura un endpoint compatible con OpenAI o Anthropic usando la URL base y, si hace falta, una clave API. Prueba la conexión. Un servidor local debe estar en ejecución; las herramientas remotas pueden enviar datos por separado.
Proyecto
Prueba entrada vacía y cortes alternativos, rechazando palabras vacías o largas sin atribuir ancho visual de terminal.
def wrap_words(words, width):
words = tuple(words)
if type(width) is not int or not 1 <= width <= 80 or len(words) > 100:
raise ValueError("wrap.limit")
if any(type(w) is not str or not w or len(w) > width or any(c.isspace() for c in w) for w in words):
raise ValueError("wrap.word")
n = len(words)
costs, ends = [0] * (n+1), [0] * n
for i in range(n-1, -1, -1):
used, best = 0, None
for j in range(i, n):
used += len(words[j]) + (j > i)
if used > width:
break
cost = 0 if j == n-1 else (width-used)**2 + costs[j+1]
if best is None or cost < best:
best, ends[i] = cost, j+1
costs[i] = best
lines, i = [], 0
while i < n:
lines.append(" ".join(words[i:ends[i]]))
i = ends[i]
return lines
Espacio de programación con IA
Da al cambio de composición de texto un objetivo revisable
LineCitrine ofrece un entorno de programación para Windows destinado a desarrolladores que analizan decisiones de formato de salida con un modelo de IA conectado. Una solicitud de composición resulta más fácil de revisar cuando define qué constituye un resultado mejor. Abre la carpeta del proyecto e incorpora a la conversación el formateador, su consumidor y una entrada representativa antes de pedir un cambio.
Un ejemplo solicita saltos de línea de texto plano que minimicen el cuadrado del espacio no utilizado, tratando la última línea por separado. Define explícitamente las palabras permitidas, el límite de anchura y la regla de coste. Pide al modelo que compare distintas distribuciones con ese objetivo. Distingue la longitud en puntos de código de la anchura en columnas visibles para que la propuesta no prometa silenciosamente comportamientos que exceden la representación elegida.
Revisa la modificación sugerida con distribuciones alternativas, una entrada vacía y una palabra que supere la anchura admitida. Ejecuta las comprobaciones del proyecto y calcula los costes esperados de los pequeños ejemplos elegidos. El resultado debe conservar las palabras y cumplir el objetivo indicado, no simplemente parecer equilibrado con una fuente. Incluye el formato consumidor si impone requisitos adicionales.
Un endpoint compatible con OpenAI o de Anthropic admitido proporciona la conexión de modelos de LineCitrine. Donde se ofrezcan modelos de IA sin restricciones, puedes seleccionar uno con las credenciales necesarias. El modelo y el servidor determinan las restricciones, los límites de contexto y las herramientas disponibles; el objetivo de composición sigue siendo un requisito que tú defines y verificas.
Preguntas sobre una propuesta de saltos de línea
¿Qué debe indicar la solicitud sobre la última línea?
Indica si su espacio no utilizado contribuye al coste. El objetivo ilustrativo lo excluye, lo que puede cambiar los saltos preferidos. Incluye un ejemplo pequeño donde esa elección importe y compara la salida propuesta con la regla de coste que realmente deseas.
¿Puede la anchura en puntos de código sustituir a la anchura del terminal?
En general, no. Las marcas combinantes y los caracteres anchos pueden ocupar un espacio distinto de su cantidad de puntos de código. Explicita la medida en tu contrato. Si importan las columnas del terminal, define ese requisito por separado y revisa el tratamiento necesario en tu entorno real de renderizado.
¿Cómo reviso una optimización sin confiar en su explicación?
Utiliza entradas pequeñas con varias alternativas de saltos y calcula sus costes esperados de forma independiente. Comprueba que la propuesta selecciona un mínimo permitido por la regla indicada. Ejecuta después casos más amplios del proyecto para detectar cambios de comportamiento fuera de esos ejemplos.
¿Qué debe ocurrir con una palabra demasiado larga?
Especifica si el formateador la rechaza, la divide o permite que desborde. El ejemplo rechaza palabras que superan la anchura admitida. Revisa esa ruta y su consumidor para que una modificación de composición no introduzca silenciosamente otra transformación del contenido o política de errores.