La programmation est très rigide. Vous ne pouvez pas dire à un programme de "sortir le nombre de bananes", vous devez le lui dire print(bananas)
.
Mais lorsque vous faites cela, vous vous retrouvez avec un problème: vous ne savez pas combien de bananes vous avez à l'avance, donc vous ne savez pas si vous devez utiliser un pluriel.
Parfois, les programmeurs vont paresseusement. Au lieu de vérifier, ils impriment simplement there are X banana(s)
.
Mais c'est moche, nous avons donc besoin d'un programme pour résoudre ce problème.
Les méthodes)
Pour supprimer les pluriels ambigus d'une chaîne, procédez comme suit:
Divisez la chaîne des espaces en une liste de mots.
Pour chaque mot qui se termine par
(s)
, procédez comme suit:- Si le mot précédent est
a
,an
,1
ouone
, retirer la(s)
fin du mot. - Dans le cas contraire, si le mot est le premier mot dans la chaîne ou le mot précédent est pas
a
,an
,1
ouone
, remplacer la(s)
fin du mots
.
- Si le mot précédent est
Rejoins la liste des mots dans une chaîne, en préservant les espaces d'origine.
Exemples)
Prenons une chaîne there's a banana(s) and three apple(s)
.
Tout d'abord, nous avons divisé la chaîne en une liste de mots: ["there's", "a", "banana(s)", "and", "three", "apple(s)"]
Pour la deuxième étape, nous prenons les deux mots se terminant par (s)
: banana(s)
et apple(s)
.
Le mot avant banana(s)
est a
, donc nous supprimons le (s)
, ce qui en fait banana
. Le mot avant apple(s)
est three
, donc nous changeons le (s)
en s
, ainsi il devient apples
.
Nous avons maintenant ["there's", "a", "banana", "and", "three", "apples"]
. Rejouer la liste ensemble, nous obtenons there's a banana and three apples
. Ceci est notre résultat final.
Les défis)
Créez un programme ou une fonction qui prend une chaîne ambiguë dans n'importe quel format raisonnable et renvoie la version non ambiguë de cette chaîne.
Vous pouvez supposer que la chaîne ne contient aucun retour à la ligne, tabulation ou retour chariot.
J'ai oublié de préciser si de diviser les groupes d'espaces ou des espaces ( à savoir si okay then
avec deux espaces doivent être ["okay", "then"]
ou ["okay", "", "then"]
) lors de la publication du défi, de sorte que vous pouvez prendre soit sous forme de division.
Cas de test
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
Notation
Comme c'est du code-golf , la soumission avec le moins d'octets gagne!
apple(s)
test devrait- il apples
plutôt céder ? Le défi indique que Otherwise, if the word is the first word in the string . . . replace the (s) at the end of the word with s.
je note que cette affaire a cédé apples
en bac à sable pour les trois premières révisions mais a changé à la quatrième.
There's a single banana(s)
-> There's a single bananas
.