Lo contrataron para escribir un código para una aplicación de toma de dictado, que toma la entrada de voz de una fuente hablada, la analiza como palabras y la escribe en una pantalla.
La administración realmente no confía en ti con tanta potencia en el proyecto, desafortunadamente, te sientas y juegas al código de golf todo el día en lugar de hacer tu trabajo, por lo que simplemente te dan una tarea realmente simple: realizar un Oración con puntuación intercalada en una oración formateada correctamente, donde 'formateado correctamente' se define a continuación.
La oración es la cadena de entrada. Una palabra es un grupo de caracteres no espaciales distinguidos. Una puntuación es una palabra cuyo primer carácter es
^.Una palabra está en mayúscula si la primera letra de la palabra no es una letra minúscula (las palabras en mayúscula coinciden con la expresión regular
/[^a-z].*/).La primera palabra de la oración debe estar en mayúscula.
A
^COMMAes el carácter de coma,y tiene un espacio que sigue pero no precede.aaa ^COMMA bbbse convierteaaa, bbb.A
^COLONes una coma que se parece:.A
^SEMICOLONes una coma que se parece;.A
^PERIODes una coma que se parece.. La palabra que sigue a^PERIODdebe estar en mayúscula.A
^BANGes un período que se parece!.A
^DASHes el carácter de guión-y tiene un espacio que precede y sigue.A
^HYPHENtambién es el carácter de guión,-pero no tiene espacio siguiente o anterior.Un
^EMDASHes un guión (¡no un guión!) Que se deletrea--.Un
^OPENQUOTEes un carácter de comillas"que tiene un espacio que precede pero no sigue. La palabra que sigue a^OPENQUOTEdebe estar en mayúscula. Si un^OPENQUOTEestá precedido por una palabra que no es puntuación, agregue un^COMMAentre esa palabra y el^OPENQUOTE. Si un^OPENQUOTEestá precedido por una puntuación que hace que la siguiente palabra esté en mayúscula, se salta^OPENQUOTEa la siguiente palabra.A
^CLOSEQUOTEes el dígrafo,"que tiene un espacio que sigue pero no precede. Si una^CLOSEQUOTEestá precedida por una^COMMA,^PERIODo^BANGque desaparece y la Puntuacion^CLOSEQUOTEse escribe,",."o!"respectivamente. Si la puntuación que desaparece especifica una mayúscula, esa capitalización aún debe ocurrir en la siguiente palabra disponible.Los espacios iniciales o finales en el resultado final completo deben eliminarse, y cualquier cadena de dos o más espacios en una fila debe contraerse en un solo carácter de espacio.
Cualquier caso no cubierto anteriormente (por ejemplo,
^COMMA ^COMMAor^SEMICOLON ^CLOSEQUOTEo^UNDEFINEDPUNCTUATION) no ocurrirá en una entrada bien formada y, por lo tanto, es un comportamiento indefinido.
El equipo de desarrollo le informa lo siguiente:
El proyecto se está escribiendo en el idioma [su idioma aquí] , y debe ser lo más breve posible para que ocupe el menor espacio posible cuando se trata de una aplicación para Android / iPhone. Intentas explicar que no es así como funciona el desarrollo de aplicaciones, pero no escuchan. Pero oye, ¡qué coincidencia! ¡Eres un golfista increíble en [tu idioma aquí] !
La aplicación no tendrá ningún permiso de acceso web y no habrá ninguna biblioteca instalada que realice este formateo por usted. Sin embargo, probablemente pueda convencer al líder del equipo para que le permita una biblioteca de expresiones regulares si existe una para su idioma, si cree que necesita una.
El soporte para citas anidadas que usan comillas dobles / simples correctamente está planeado para una versión posterior de la aplicación, pero no para la versión en la que está trabajando ahora, así que no se preocupe.
La administración es un gran admirador del desarrollo basado en pruebas, por lo que el equipo de desarrollo ya ha hecho que un mono de teclado desafortunado escriba algunas pruebas para su parte del programa: (se agregaron nuevas líneas para facilitar la lectura, trátelas como espacios)
Entrada:
hello ^COMMA world ^BANGSalida:
Hello, world!Entrada:
once upon a time ^COMMA there was a horse ^PERIOD that horse cost me $50 ^PERIOD ^OPENQUOTE eat your stupid oats ^COMMA already ^BANG ^CLOSEQUOTE I told the horse ^PERIOD the horse neighed back ^OPENQUOTE no ^CLOSEQUOTE and died ^PERIOD THE ENDSalida:
Once upon a time, there was a horse. That horse cost me $50. "Eat your stupid oats, already!" I told the horse. The horse neighed back, "No," and died. THE ENDEntrada:
begin a ^PERIOD b ^COMMA c ^COLON d ^SEMICOLON e ^BANG f ^HYPHEN g ^DASH h ^EMDASH i ^OPENQUOTE j ^PERIOD ^OPENQUOTE k ^SEMICOLON ^OPENQUOTE l ^CLOSEQUOTE m ^BANG ^CLOSEQUOTE n ^PERIOD 0x6C6F6C endSalida:
Begin a. B, c: d; e! F-g - h--i, "j. "K; "l," m!" N. 0x6C6F6C end
Este es un código de golf: gana el puntaje más bajo. Puede escribir una función de un argumento de cadena o un programa que lea desde STDIN y escriba en STDOUT.
prompt()?