Han sido unos pocos meses difíciles en el trabajo y siento que solo quiero gritarle a la cara a mi jefe. Sin embargo, no soy alguien con quien confrontar directamente a las personas con las que tengo un problema. Tampoco quiero perder mi trabajo.
Así que aquí hay una idea: quiero poder insultarlo, sin que él se entere. Y me di cuenta de la manera perfecta: necesito algún tipo de software que codifique un insulto dentro de un mensaje que de otra manera estaría perfectamente bien. Y viendo cómo se sabe que no ve los bosques por árboles, creo que sé cómo:
Escríbeme un programa que tome como entrada una cadena de longitud desconocida, pero que no contenga saltos de línea. Este será el mensaje sin procesar que quiero enviar.
Si es posible, devuelva la cadena formateada de modo que el mensaje "MUERTE EN UN FUEGO DE GRASA" constituya toda la columna izquierda. Con nuevos párrafos donde deben ir los espacios entre las palabras. Ahora, como estoy muy enojado, es igualmente importante que cada letra esté en mayúscula.
No puede modificar la cadena de ninguna otra manera, es decir, no puede convertir toda la cadena en mayúsculas.
Si la cadena en cuestión no se puede formatear de esta manera, debe devolver la cadena original. Leer entrada de entrada estándar.
Se aplican reglas normales: sin solicitudes HTTP, sin consultar a Marvin de THGTTG, etc.
Entrada de ejemplo:
Querido jefe, ¿cómo están las cosas? Me ha llamado la atención que recibí toda la culpa del accidente el viernes pasado. No solo la mayoría. Hasta la última parte. ¿Me equivoca pensar que el resto del equipo fue al menos en parte responsable? Después de todo, los seis estábamos involucrados desde el primer momento. No es que piense que debería estar sin culpa. De ningún modo. Todo lo que digo es esto: hago lo mejor que puedo. Me esfuerzo. Yo mejoro constantemente. Y estoy constantemente asumiendo la responsabilidad. En términos generales, estoy muy de acuerdo con asumir toda la responsabilidad de mis acciones. Pero después de esta primavera, parece que obtengo más de lo que merezco. ¿Recuerdas el contrato de Flakenhauser? Todo cayó casi tan suave como uno podría haber esperado. O eso parecía al principio. Fue justo en el último minuto que las cosas se desmoronaron. Todo el equipo estuvo de acuerdo en que era más parecido a un extraño accidente que una planificación descuidada o recursos mal administrados. Aún así, yo, solo, me eché la culpa. Aunque no dije nada entonces, mi nivel de tolerancia para echar la culpa sufrió una grave abolladura en ese momento. A partir de ese momento, he sentido necesario intentar siempre el doble, solo para escapar del escrutinio. Y aún así, aquí estamos de nuevo. A pesar de todos mis logros. Justo donde siempre parecemos terminar estos días. Cada proyecto individual. Se está volviendo insoportable. solo para escapar del escrutinio. Y aún así, aquí estamos de nuevo. A pesar de todos mis logros. Justo donde siempre parecemos terminar estos días. Cada proyecto individual. Se está volviendo insoportable. solo para escapar del escrutinio. Y aún así, aquí estamos de nuevo. A pesar de todos mis logros. Justo donde siempre parecemos terminar estos días. Cada proyecto individual. Se está volviendo insoportable.
Salida de ejemplo:
Querido jefe, ¿cómo están las cosas?
Me ha llamado la atención que recibí toda la culpa del accidente el viernes pasado. No solo la mayoría.
Hasta el último momento.¿Me equivoca pensar que el resto del equipo fue al menos en parte responsable? Después de todo, los seis estábamos involucrados desde el primer momento.
No es que piense que debería estar sin culpa. De ningún modo.Todo lo que digo es esto: hago lo mejor que puedo. Me esfuerzo. Yo mejoro constantemente. Y estoy constantemente asumiendo la responsabilidad.
En términos generales, estoy muy de acuerdo con asumir toda la responsabilidad de mis acciones. Pero después de esta primavera, parece que obtengo más de lo que merezco.
Recuerda el contrato de Flakenhauser.
Todo cayó casi tan suave como uno podría haber esperado. O eso parecía al principio. Fue justo en el último minuto que las cosas se desmoronaron.
Todo el equipo estuvo de acuerdo en que era más parecido a un extraño accidente que una planificación descuidada o recursos mal administrados.
Aún así, yo, solo, me eché la culpa.
Aunque no dije nada entonces, mi nivel de tolerancia para echar la culpa sufrió una grave abolladura en ese momento.A partir de ese momento, he sentido necesario intentar siempre el doble, solo para escapar del escrutinio. Y aún así, aquí estamos de nuevo.
A pesar de todos mis logros.
Justo donde siempre parecemos terminar estos días.
Cada proyecto individual. Se está volviendo insoportable.
Este es el código de golf. El código más corto gana.
Respuestas:
CJam,
5653 bytesPruébalo en línea!
Cómo funciona
fuente
Perl - 60 bytes
Contando el shebang como uno.
Esta solución utiliza la cadena más interna para construir la siguiente expresión regular:
que es similar a la expresión regular utilizada en la solución de m.buettner . La expresión regular generada se compara con la entrada. En un contexto de lista, esto devolverá una matriz que contiene cada uno de los grupos de coincidencia, que están unidos por una nueva línea (el motivo de los grupos de "no coincidir nada"
(\.*)
es insertar una nueva línea adicional) Si no hay coincidencia, la cadena original se emite en su lugar.Perl - 73 bytes
Contando el shebang como dos.
Esto divide la cadena en los delimitadores apropiados y recoge las piezas en una matriz. Si alguno de ellos no coincide, el separador de registro de salida (que se estableció en una nueva línea con la
-l
opción) no está establecido, por lo que la cadena se genera sin modificar.fuente
./script.pl
, entonces muy probablemente sí. Si se invoca comoperl script.pl
, entonces no..
afterI
insertará una nueva línea adicional antesI
(porque coincide nuevamente en la misma posición). Quizás un poco contra-intuitivo.-M
opción al shebang, que morirá con el error fatal:Too late for "-M" option at line 1.
pero la razón principal por la que lo puse allí, también evito tener que explicar que debe ejecutarse ya queperl -pl script.pl
, en su forma actual, se ejecuta como es.GolfScript, 53 bytes
Parece que Dennis y yo se nos ocurrieron cosas bastante similares en paralelo ... Pero aquí está mi intento.
Haga clic en los enlaces antes de cada bloque de código para probarlo en línea. Desafortunadamente, el intérprete en línea no le permitirá ejecutar código de más de 1024 caracteres, por lo que tuve que realizar alguna ... "compresión" de la entrada de prueba. Pero aún funciona.
Versión aplastada
Versión no comentada, comentada
Un punto planteado por Dennis: todos los programas de GolfScript imprimen una nueva línea final automática. Si esto debería o no invalidar mi solución tal como está, no estoy seguro. Creo que costaría 4 caracteres suprimir la nueva línea final agregando
"":n
algo cerca del final.fuente
Rubí - 140
No hay expresiones regulares en este . Simultáneamente recorre los caracteres en la entrada ARGV [0], y una cadena que contiene caracteres que necesitamos romper para hacer nuestro mensaje en la columna izquierda. Originalmente iba a pegar espacios después de las letras que necesitan tener una nueva línea, pero descubrió que era un poco más corto codificar los índices en los que insertar el salto de línea.
Una vez que todo está dicho y hecho, verifica que el
i
índice se haya incrementado suficientes veces como para haber revisado cada letra que necesitaba romperse. Si no es así, simplemente imprimimos la cadena original. Si es así, les damos el formateado.n-[i]!=n
fue un buen truco para guardar caracteres cuando se verificaba si el índice actual era uno que necesitaba un salto de línea adicional (en comparación conn.include? i
). También guardé algunos caracteres usando{}
s en lugar de ado/end
pesar de ser un bloque multilínea, y usé una condición ternaria en los últimos puestos para guardar caracteres al determinar cuál emitir.No es el más corto, pero pensé que sería bueno hacerlo sin expresiones regulares.
fuente
Perl, 184 bytes
No es un puntaje espectacular para Perl, pero aquí hay una solución simple de expresiones regulares.
fuente
print($_)
==print
. +1 punto de legibilidad: es notablemente fácil ver lo que está sucediendo, que no es exactamente el caso de otras soluciones.JavaScript 116
Implementación de Javascript de la idea de m-buettner
Fragmento de prueba
fuente
FIFA
prueba (comentarios OP)From that FIFA point on
. Pone una nueva línea antesFA
y antes del espacio anteriorFI
.Python3 (
166138)Golfizado:
Ungolfed-ish:
Aunque el uso de la lambda me agrada un poco, ese número masivo de variables utilizadas y el desarrollo algo desordenado tienen el efecto contrario. Regex puede haber sido una buena idea también. Hay ho, al menos funciona :).
Editar: se reemplazó la variable lambda con una función
count
incorporada y una declaración dividida acortada.fuente
Python3 (165)
Sin golf
Explicación
chunk
divide recursivamente el final del mensaje que contiene el último encabezado y lo antepone a una lista.Advertencia: esto no funcionará si no hay espacios entre dos encabezados propuestos en su carta por alguna razón, pero eso parece poco probable en una carta a su jefe.
fuente
Ruby 115
Ruby 95
fuente
J -
110103 bytes¿Por qué J no tiene buenas funciones para manejar cadenas, sino solo funciones de matriz? Revisaré esto si descubro algo inteligente.
Editar: salida acortada y fija (antes tenía espacios adicionales) y verificación. También mejoré la explicación.
Explicación:
Ejemplos (¿demasiado largos?):
fuente
Javascript (ES6),
93115 bytesSolía
replace
pasar por la cadena, con una coincidencia para/\b./g
solo encontrar caracteres que siguieran un espacio o comenzaran la cadena. Luego verifiqué cada carácter para ver si coincidía con el índice actual en la matriz que estaba buscando, y agregué una nueva línea antes si lo hacía, y lo incrementéi
.EDITAR: se perdió la necesidad de crear nuevas líneas entre las palabras. Lo he hecho ahora, lo que lo lleva a 115.
fuente
PHP, 328 bytes
Dado un archivo llamado 'G' que contiene el texto en bruto para "enmessage"
Explicación (~ código no comentado && comentado):
fuente
PHP, 136 bytes
si se puede poner todo el insulto; imprime la cadena modificada con un espacio inicial o salto de línea; salida vacía si no. Corre con
-r
.Descompostura
fuente
Python - 190 bytes
Sin golf
Este es mi primer intento de golf :) Buscando aprender algunas excelentes técnicas de codificación, de todos modos, solo me enfoqué en usar find y luego unir cadenas para encontrar los caracteres apropiados y formatear la salida.
Variables
lr = l tiene caracteres asignados que usaremos como nuestra guía para crear nuestro nuevo párrafo formateado. r se le asigna el nuevo carácter de línea para espaciar la nueva salida.
k, p = El párrafo de entrada. K se utiliza para volver al original, ya que no se reasigna durante la ejecución del script. Compruebo contra x para saber cuándo agregar una nueva línea doble con fines de espaciado.
y, i = y es una especie de "cursor", realiza un seguimiento de la última posición en la que se encontró un personaje para que podamos encontrarlo en el párrafo correctamente con fines de empalme. revierta el párrafo (variable p) a su entrada original a través de la variable k.
h = Longitud de entrada, que usamos en empalmes.
x = La posición del carácter actual representado por C, utilizado también para empalmar.
c = Caracteres en l para iterar y buscar.
El siguiente código está redactado y separado del código original para facilitar su lectura según lo que está sucediendo:
Agradecería sus comentarios! Estoy buscando aprender
fuente
x<0
ai
. En python, True es lo mismo que 1 y False es lo mismo que 0. Entonces, si x es -1, suma 1 y, de lo contrario, 0.i+=
es lo mismo quei=i+
True == 1
da. :)