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
,1
ouone
, 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
,1
ouone
, 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 then
dois 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 apples
vez 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 apples
em sandbox para as três primeiras revisões, mas mudou na quarta.
There's a single banana(s)
-> There's a single bananas
.