A programação é muito rígida. Você não pode dizer a um programa para "gerar a contagem de bananas", é necessário dizer a ele print(bananas).
Mas quando você faz isso, acaba com um problema: você não sabe quantas bananas você tem antes, então não sabe se deve usar um plural.
Às vezes, os programadores seguem o caminho preguiçoso. Em vez de verificar, eles apenas imprimem there are X banana(s).
Mas isso é feio, então precisamos de um programa para corrigir isso.
Os métodos)
Para remover os plurais ambíguos em uma seqüência de caracteres, siga as seguintes etapas:
Divida a string nos espaços em uma lista de palavras.
Para cada palavra que termina com
(s), faça o seguinte:- Se a palavra anterior é
a,an,1ouone, remover o(s)no fim da palavra. - Caso contrário, se a palavra é a primeira palavra na cadeia ou a palavra anterior não é
a,an,1ouone, substitua o(s)no final da palavra coms.
- Se a palavra anterior é
Junte a lista de palavras novamente em uma sequência, preservando o espaço em branco original.
Exemplos)
Vamos pegar uma corda there's a banana(s) and three apple(s).
Primeiro, dividimos a string em uma lista de palavras: ["there's", "a", "banana(s)", "and", "three", "apple(s)"]
Para o segundo passo, tomamos as duas palavras que terminam com (s): banana(s)e apple(s).
A palavra anterior banana(s)é a, então removemos o (s), tornando-o banana. A palavra anterior apple(s)é three, então alteramos o (s)para s, assim ele se torna apples.
Agora temos ["there's", "a", "banana", "and", "three", "apples"]. Juntando a lista novamente, chegamos there's a banana and three apples. Este é o nosso resultado final.
Os desafios)
Crie um programa ou função que use uma string ambígua em qualquer formato razoável e retorne a versão não ambígua dessa string.
Você pode assumir que a sequência não contém novas linhas, guias ou retornos de carro.
Eu esqueci de especificar se dividir em grupos de espaços ou espaços (ou seja, se okay thendois espaços devem ser ["okay", "then"]ou ["okay", "", "then"]) ao postar o desafio, então você pode assumir qualquer forma de divisão.
Casos de teste)
Input -> Output
there are two banana(s) and one leprechaun(s) -> there are two bananas and one leprechaun
there's a banana(s) and three apple(s) -> there's a banana and three apples
apple(s) -> apples
one apple(s) -> one apple
1 banana(s) -> 1 banana
banana -> banana
preserve original whitespace(s) -> preserve original whitespaces
11 banana(s) -> 11 bananas
an apple(s) -> an apple
this is a te(s)t -> this is a te(s)t
I am a (s)tranger(s) -> I am a (s)tranger
Pontuação
Como se trata de código-golfe , a submissão com o mínimo de bytes vence!
apple(s)caso de teste deve render em applesvez disso? O desafio indica Otherwise, if the word is the first word in the string . . . replace the (s) at the end of the word with s.que esse caso rendeu applesem sandbox para as três primeiras revisões, mas mudou na quarta.
There's a single banana(s)-> There's a single bananas.