La programación es muy rígida. No puedes decirle a un programa que "muestre el recuento de bananas", tienes que decirle que lo haga print(bananas)
.
Pero cuando haces eso, terminas con un problema: no sabes cuántas bananas tienes de antemano, por lo que no sabes si usar un plural.
A veces, los programadores toman el camino vago. En lugar de verificar, simplemente imprimen there are X banana(s)
.
Pero eso es feo, por lo que necesitamos un programa para solucionar esto.
Los métodos)
Para eliminar los plurales ambiguos en una cadena, siga los siguientes pasos:
Divide la cadena en espacios en una lista de palabras.
Por cada palabra que termina con
(s)
, haga lo siguiente:- Si la palabra precedente es
a
,an
,1
oone
, retire el(s)
al final de la palabra. - De lo contrario, si la palabra es la primera palabra de la cadena o la palabra anterior no es
a
,an
,1
oone
, reemplazar el(s)
al final de la palabra cons
.
- Si la palabra precedente es
Vuelva a unir la lista de palabras en una cadena, conservando el espacio en blanco original.
Ejemplo (s)
Tomemos una cuerda there's a banana(s) and three apple(s)
.
Primero, dividimos la cadena en una lista de palabras: ["there's", "a", "banana(s)", "and", "three", "apple(s)"]
Para el segundo paso, tomamos las dos palabras que terminan en (s)
: banana(s)
y apple(s)
.
La palabra anterior banana(s)
es a
, así que eliminamos el (s)
, haciéndolo banana
. La palabra anterior apple(s)
es three
, entonces cambiamos el (s)
a s
, así se convierte apples
.
Ahora tenemos ["there's", "a", "banana", "and", "three", "apples"]
. Uniéndonos a la lista nuevamente, lo conseguimos there's a banana and three apples
. Este es nuestro resultado final.
Los desafios)
Cree un programa o función que tome una cadena ambigua en cualquier formato razonable y devuelva la versión no ambigua de esa cadena.
Puede suponer que la cadena no contiene nuevas líneas, pestañas o retornos de carro.
Olvidé especificar si dividir en grupos de espacios o espacios (es decir, si okay then
debería haber dos espacios ["okay", "then"]
o ["okay", "", "then"]
) al publicar el desafío, por lo que puede asumir cualquier forma de división.
Casos de prueba)
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
Tanteo
Como se trata de código de golf , ¡el envío con la menor cantidad de bytes gana!
apple(s)
ceder el caso de pruebaapples
? El desafío diceOtherwise, if the word is the first word in the string . . . replace the (s) at the end of the word with s.
que noto que este caso cedióapples
en la caja de arena para las primeras tres revisiones, pero cambió en la cuarta.There's a single banana(s)
->There's a single bananas
.