Introducción
Usas Twitter (fingimos, si no), donde estás limitado a 140 caracteres por tweet individual que quieras compartir con el mundo. Si desea twittear a la dirección de Gettysburg de sus seguidores Abraham Lincoln , entonces necesitaría dividir el texto en múltiples fragmentos de 140 caracteres para poder transmitir todo el mensaje. Sin embargo, esos fragmentos no siempre deben tener exactamente 140 caracteres de longitud. Digamos, por ejemplo, dividimos el discurso en fragmentos de 17 caracteres, terminaríamos con estos tweets:
- CUATRO PUNTUACIÓN Y SE
- VEN AÑOS HACE NUESTRO
- PADRES TRAIDOS
- FORTH EN ESTA CON
- TINTE UN NUEVO NATI
- EN CONCEBIDO EN L
- (y así)
¡Eso no es bueno! Cuando las palabras individuales se separan, puede ser difícil entender lo que está tratando de decir. Además, en el twitterverse, uno de tus seguidores puede encontrar un tweet específico y no darse cuenta de que hay más en el mensaje, por lo que querrás numerar tus tweets para que tengan un contexto con el que trabajar (todavía usando fragmentos de 17 caracteres) ):
- (1/7) CUATRO PUNTUACIÓN Y
- (2/7) HACE SIETE AÑOS
- (3/7) NUESTROS PADRES
- (4/7) PRESENTADO
- (5/7) ESTE CONTINENTE A
- (6/7) NUEVA NACIÓN
- (7/7) CONCEBIDO EN ...
Podrías descubrir manualmente la mejor configuración para tus tweets a mano, ¡pero para eso tenemos computadoras!
Desafío
En el código más corto posible, analice la dirección de Gettysburg (o cualquier texto, pero nos quedaremos con este como ejemplo) en un conjunto de tweets que consta de no más de 140 caracteres (suponga ASCII, ya que nuestro texto de ejemplo no debería tener cualquier parte poco común / inusual en ella).
Detalles
- Su función / programa / etc. debe tomar un solo argumento de cadena y generar una línea de texto para cada tweet.
- Suponga que esta entrada nunca dará como resultado más de 99 tweets totales cuando se analice, independientemente de cómo elija analizar (siempre y cuando esa elección aún se ajuste a los otros puntos del desafío).
- Tweets necesidad de incluir una
tweet number
detotal tweets
indicador en el formato "(x/y)
" que precede el cuerpo del tweet.- ¡Este recuento ocupará parte de tu espacio de 140 caracteres!
- Los fragmentos de tweets solo se pueden dividir en líneas nuevas o espacios.
- No se permiten guiones, puntos, comas u otros signos de puntuación, a menos que estén precedidos o seguidos inmediatamente por un espacio o una nueva línea.
- Los tweets deben constar de tantas palabras completas como sea posible.
- Esta restricción es un poco flexible, por ejemplo, cuando tu tweet final solo tiene una palabra
- Este es el código de golf, por lo que gana el código más corto.
Texto completo de la dirección de Gettysburg
(Su código aún debe poder manejar cualquier cadena ASCII que se le pase).
CUATRO PUNTUACIONES Y SIETE AÑOS HACE NUESTROS PADRES CREARON EN ESTE CONTINENTE UNA NUEVA NACIÓN CONCEBIDA EN LIBERTAD Y DEDICADA A LA PROPOSICIÓN DE QUE TODOS LOS HOMBRES SON IGUALES. AHORA ESTAMOS COMPROMETIDOS EN UNA GRAN GUERRA CIVIL QUE PRUEBA SI NACIÓN O CUALQUIER NACIÓN TAN CONCEBIDA Y TAN DEDICADA PUEDE DURAR MUCHO. Nos encontramos en un gran campo de batalla de esa guerra. HEMOS VENIDO A DEDICAR UNA PARTE DE ESE CAMPO COMO UN LUGAR DE DESCANSO FINAL PARA AQUELLOS QUE AQUÍ DAN SUS VIDAS QUE ESTA NACIÓN PODRÍA VIVIR. ES AÚN MÁS ADECUADO Y ADECUADO QUE DEBEMOS HACER ESTO. PERO EN UN SENTIDO MÁS GRANDE, NO PODEMOS DEDICAR, NO PODEMOS CONSAGRAR, NO PODEMOS DERRIBAR, ESTE TERRENO. LOS HOMBRES VALIENTES VIVOS Y MUERTOS QUE LUCHARON AQUÍ LO CONSAGRARON LEJOS DE NUESTRO POBRE PODER PARA AGREGAR O RESTRINGIR. El mundo no tendrá en cuenta ni mucho tiempo lo que decimos aquí, pero nunca puede olvidar lo que hicieron aquí. ES PARA NOSOTROS LA VIDA PREVIA QUE DEDICARÁ AQUÍ AL TRABAJO SIN TERMINAR QUE ELLOS QUE LUCHARON AQUÍ HAN AVANZADO MUCHO. ES MEJOR QUE NOSOTROS ESTÉN DEDICADOS A LA GRAN TAREA RESTANTE ANTES DE NOSOTROS, QUE DE ESTOS HONRADOS MUERTOS TOMEMOS MAYOR DEVOCIÓN A ESA CAUSA POR LA CUAL DAN LA ÚLTIMA MEDIDA COMPLETA DE DEVOCIÓN, QUE NOSOTROS RESOLVIEMOS ALTAMENTE HAN MUERIDO EN VANO, QUE ESTA NACIÓN BAJO DIOS TENGA UN NUEVO NACIMIENTO DE LIBERTAD, Y QUE EL GOBIERNO DE LAS PERSONAS POR LAS PERSONAS PARA LAS PERSONAS NO PERECERÁ DE LA TIERRA.
Respuestas:
Perl, 51 personajes
Requiere línea de comando -p, 1 carácter incluido.
Explicación: inserte la porción de conteo antes y la nueva línea después de grupos de palabras de hasta 132 caracteres. Inserte un marcador de posición (
~
) para el total, que luego se reemplaza por una segunda sustitución. Esto se rompe si el mensaje contiene~
, pero uno podría usar fácilmente un carácter no imprimible.Se engaña a poco: siempre permite siete caracteres para la parte de recuento,
(nn/nn)
. Realmente, si es(n/n)
así, debería permitir dos caracteres adicionales. Sin embargo, una solución arbitraria a esto aumentaría en gran medida la complejidad del problema.fuente
\G
es inútil aquí, ¿no?Python, 140
^ 140 caracteres fue en realidad una coincidencia.
Si bien quedan palabras, la solución creará nuevos tweets a partir del suministro de palabras y los agregará a una lista. Para cada tweet, seguirá intentando agregar palabras hasta que la longitud del tweet alcance más de 140 caracteres. Se reservan dos caracteres para el
total tweets
, que se completan más adelante a medida que se imprime cada tweet de la lista.Salida de ejemplo:
fuente
Ruby, 77 caracteres
Empaquetado la lógica en una sola expresión regular. Salida de
f[text]
:fuente
Rubí, 75
No puede vencer a Perl, pero al menos supera marginalmente a la otra solución de Ruby. Tenga en cuenta que imprime los tweets en orden inverso (el problema no especifica uno).
fuente
VBA, 251
Intenté otro método ... No tan bueno como mi original, pero todavía estoy trabajando en ello ...
Salidas:
fuente
BASH (88 caracteres)
Dobla la línea a 132 caracteres (para permitir nuestro recuento de tweets), en espacios (
-s
), lee el texto hacia atrás (tac), numera el texto (cat -n
), revierte (tac
). Dentro de Awk: Primera línea (NR == 1), asigne a la letra 'a' el valor en la primera. En blanco la columna del número. Imprima (NR / 'a') y luego la línea.Salida:
fuente
Javascript (solo FF), 92 caracteres
Formateado, es una estafa del script Perl:
fuente
VBA, 227
Salidas:
fuente
Javascript (solo FF), 135 caracteres
Formateado, eso es:
fuente
PHP, 233
¿Estoy en lo cierto al suponer que esta es la primera respuesta que no engaña a la porción de conteo?
(También funciona con más de 99 tweets; podría reducir dos bytes más si permitiera un bucle infinito en ese caso).
sin golf:
fuente