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
^COMMA
es el carácter de coma,
y tiene un espacio que sigue pero no precede.aaa ^COMMA bbb
se convierteaaa, bbb
.A
^COLON
es una coma que se parece:
.A
^SEMICOLON
es una coma que se parece;
.A
^PERIOD
es una coma que se parece.
. La palabra que sigue a^PERIOD
debe estar en mayúscula.A
^BANG
es un período que se parece!
.A
^DASH
es el carácter de guión-
y tiene un espacio que precede y sigue.A
^HYPHEN
también es el carácter de guión,-
pero no tiene espacio siguiente o anterior.Un
^EMDASH
es un guión (¡no un guión!) Que se deletrea--
.Un
^OPENQUOTE
es un carácter de comillas"
que tiene un espacio que precede pero no sigue. La palabra que sigue a^OPENQUOTE
debe estar en mayúscula. Si un^OPENQUOTE
está precedido por una palabra que no es puntuación, agregue un^COMMA
entre esa palabra y el^OPENQUOTE
. Si un^OPENQUOTE
está precedido por una puntuación que hace que la siguiente palabra esté en mayúscula, se salta^OPENQUOTE
a la siguiente palabra.A
^CLOSEQUOTE
es el dígrafo,"
que tiene un espacio que sigue pero no precede. Si una^CLOSEQUOTE
está precedida por una^COMMA
,^PERIOD
o^BANG
que desaparece y la Puntuacion^CLOSEQUOTE
se 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 ^COMMA
or^SEMICOLON ^CLOSEQUOTE
o^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 ^BANG
Salida:
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 END
Salida:
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 END
Entrada:
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 end
Salida:
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()
?