Você foi contratado para escrever um código para um aplicativo que utiliza ditados, que recebe a entrada de voz de uma fonte falada, a analisa como palavras e a anota na tela.
A gerência realmente não confia em você com tanta força no projeto - você sabe que fica sentado e codifica golfe o dia todo, em vez de fazer seu trabalho, infelizmente - então eles apenas oferecem uma tarefa realmente simples de executar: Frase com Pontuação intercalada em uma frase formatada corretamente, onde 'formatado corretamente' é definido abaixo.
A frase é a sequência de entrada. Uma palavra é um grupo de caracteres não-espaço contíguos. Uma pontuação é uma palavra cujo primeiro caractere é
^.Uma palavra é maiúscula se a primeira letra da palavra não for minúscula (as palavras maiúsculas correspondem à regex
/[^a-z].*/).A primeira palavra da sentença deve ser maiúscula.
A
^COMMAé o caractere de vírgula,e tem um espaço a seguir, mas não precedendo.aaa ^COMMA bbbtorna-seaaa, bbb.A
^COLONé uma vírgula que se parece:.A
^SEMICOLONé uma vírgula que se parece;.A
^PERIODé uma vírgula que se parece.. A palavra após a^PERIODdeve ser maiúscula.A
^BANGé um período que parece!.A
^DASHé o caractere de traço-e tem um espaço anterior e seguinte.A
^HYPHENtambém é o caractere de hífen,-mas não possui espaço a seguir ou anterior.An
^EMDASHé um hífen (não um traço!) Que está escrito--.An
^OPENQUOTEé um caractere de citação"que possui um espaço anterior, mas não segue. A palavra após um^OPENQUOTEdeve ser maiúscula. Se um^OPENQUOTEfor precedido por uma palavra que não seja pontuação, adicione um^COMMAentre essa palavra e o^OPENQUOTE. Se um^OPENQUOTEfor precedido por uma Pontuação que coloque a próxima palavra em maiúscula, ela passará^OPENQUOTEpara a próxima palavra.A
^CLOSEQUOTEé o dígrafo,"que possui um espaço a seguir, mas não precedendo. Se um^CLOSEQUOTEé precedida por um^COMMA,^PERIODou^BANG, que a pontuação desaparece eo^CLOSEQUOTEestá escrito,",."ou!", respectivamente. Se a Pontuação que desapareceu especificou uma capitalização, essa capitalização ainda deve ocorrer na próxima palavra disponível.Os espaços iniciais ou finais no resultado final completo devem ser removidos e qualquer sequência de dois ou mais espaços em uma linha deve ser recolhida em um único caractere de espaço.
Qualquer caso não coberto acima (por exemplo,
^COMMA ^COMMAou^SEMICOLON ^CLOSEQUOTEou^UNDEFINEDPUNCTUATION) não ocorrerá em dados bem formados e, portanto, é um comportamento indefinido.
A equipe de desenvolvimento informa o seguinte:
O projeto está sendo escrito no idioma [seu idioma aqui] e deve ser o mais curto possível, para que ocupe o mínimo de espaço possível quando for um aplicativo para Android / iPhone. Você tenta explicar que não é assim que o desenvolvimento de aplicativos funciona, mas eles não ouvem. Mas ei, que coincidência! Você é um jogador incrível no [seu idioma aqui] !
O aplicativo não terá permissões de acesso à Web e não haverá bibliotecas instaladas que façam essa formatação para você. Provavelmente, você pode convencer o líder da equipe a permitir uma biblioteca de expressões regulares, se houver alguma para o seu idioma, se achar que precisa de uma.
O suporte para cotações aninhadas que usam aspas duplas / simples corretamente está planejado para uma versão posterior do aplicativo, mas não para a versão em que você está trabalhando agora, portanto, não se preocupe.
O gerenciamento é um grande fã do desenvolvimento orientado a testes e, portanto, a equipe de desenvolvedores já solicitou que um macaco de teclado infeliz escrevesse alguns testes para sua parte do programa: (novas linhas adicionadas para facilitar a leitura, trate-as como espaços)
Entrada:
hello ^COMMA world ^BANGResultado:
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 ENDResultado:
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 endResultado:
Begin a. B, c: d; e! F-g - h--i, "j. "K; "l," m!" N. 0x6C6F6C end
Este é um código de golfe: a pontuação mais baixa vence. Você pode escrever uma função de um argumento de seqüência de caracteres ou um programa lendo STDIN e gravando em STDOUT.
prompt()?