Die Programmierung ist sehr starr. Sie können einem Programm nicht sagen, dass es die Bananenzählung ausgeben soll. Sie müssen es dazu auffordern print(bananas).
Aber wenn Sie das tun, haben Sie ein Problem: Sie wissen vorher nicht, wie viele Bananen Sie haben, also wissen Sie nicht, ob Sie einen Plural verwenden sollen.
Manchmal gehen Programmierer den faulen Weg. Anstatt zu prüfen, drucken sie einfach there are X banana(s).
Aber das ist hässlich, also brauchen wir ein Programm, um das zu beheben.
Die Methoden)
Gehen Sie folgendermaßen vor, um die mehrdeutigen Pluralformen in einer Zeichenfolge zu entfernen:
Teilen Sie die Zeichenfolge auf Leerzeichen in eine Liste von Wörtern.
Führen Sie für jedes Wort, das mit endet
(s), Folgendes aus:- Wenn das vorhergehende Wort
a,an,1oderone, entfernen Sie die(s)am Ende des Wortes. - Andernfalls, wenn das Wort das erste Wort in der Kette ist , oder das vorhergehende Wort nicht
a,an,1oderoneersetzt die(s)am Ende des Wortes mits.
- Wenn das vorhergehende Wort
Fügen Sie die Liste der Wörter wieder zu einer Zeichenfolge zusammen, wobei das ursprüngliche Leerzeichen erhalten bleibt.
Beispiel (e)
Nehmen wir eine Zeichenfolge there's a banana(s) and three apple(s).
Zuerst teilen wir die Zeichenfolge in eine Liste von Wörtern auf: ["there's", "a", "banana(s)", "and", "three", "apple(s)"]
Für den zweiten Schritt nehmen wir die zwei Wörter, die mit (s): banana(s)und enden apple(s).
Das Wort davor banana(s)ist a, also entfernen wir das (s), machen es banana. Das Wort davor apple(s)ist three, also ändern wir das (s)zu s, so wird es apples.
Wir haben jetzt ["there's", "a", "banana", "and", "three", "apples"]. Wenn wir die Liste wieder zusammenfügen, bekommen wir there's a banana and three apples. Dies ist unser Endergebnis.
Die Herausforderungen)
Erstellen Sie ein Programm oder eine Funktion, die eine mehrdeutige Zeichenfolge in einem angemessenen Format verwendet und die nicht mehrdeutige Version dieser Zeichenfolge zurückgibt.
Sie können davon ausgehen, dass die Zeichenfolge keine Zeilenumbrüche, Tabulatoren oder Zeilenumbrüche enthält.
Ich habe vergessen, beim Posten der Challenge anzugeben, ob eine Aufteilung nach Gruppen von Räumen oder Räumen (dh okay thenmit zwei Räumen) erfolgen soll ["okay", "then"]oder nicht ["okay", "", "then"].
Testfall (e)
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
Wertung
Da es sich um Code-Golf , Bytes die Vorlage mit dem geringsten gewinnt!
apple(s)Testfall applesstattdessen nachgeben ? Die Herausforderung besagt Otherwise, if the word is the first word in the string . . . replace the (s) at the end of the word with s., dass ich bemerke, dass dieser Fall applesin den ersten drei Revisionen im Sandkasten nachgab, sich aber beim vierten geändert hat.
There's a single banana(s)-> There's a single bananas.