Programowanie jest bardzo sztywne. Nie możesz powiedzieć programowi, aby „wyprowadzał liczbę bananów”, musisz to powiedzieć print(bananas).
Ale kiedy to robisz, pojawia się problem: nie wiesz, ile masz wcześniej bananów, więc nie wiesz, czy użyć liczby mnogiej.
Czasami programiści idą leniwie. Zamiast sprawdzać, po prostu drukują there are X banana(s).
Ale to brzydkie, więc potrzebujemy programu, aby to naprawić.
Metody)
Aby usunąć niejednoznaczne liczby mnogie z ciągu, wykonaj następujące kroki:
Podziel ciąg znaków na spacje na listę słów.
Dla każdego słowa, które kończy się na
(s), wykonaj następujące czynności:- Jeśli poprzedzający słowo jest
a,an,1lubone, usunąć(s)na końcu wyrazu. - W przeciwnym razie, jeśli słowo jest pierwsze słowo w łańcuchu lub poprzedniego słowa nie ma
a,an,1lubone, wymienić(s)na końcu słowa zs.
- Jeśli poprzedzający słowo jest
Połącz listę słów z powrotem w ciąg znaków, zachowując oryginalne białe znaki.
Przykład (y)
Weźmy sznurek there's a banana(s) and three apple(s).
Najpierw podzielimy ciąg na listę słów: ["there's", "a", "banana(s)", "and", "three", "apple(s)"]
W drugim kroku bierzemy dwa słowa kończące się na (s): banana(s)i apple(s).
Słowo przedtem banana(s)brzmi a, więc usuwamy go (s), czyniąc go banana. Słowo przed apple(s)to three, więc możemy zmienić (s), aby sw ten sposób staje się apples.
Teraz mamy ["there's", "a", "banana", "and", "three", "apples"]. Łączymy listę z powrotem, otrzymujemy there's a banana and three apples. To jest nasz wynik końcowy.
Wyzwania)
Utwórz program lub funkcję, która pobiera niejednoznaczny ciąg znaków w dowolnym rozsądnym formacie i zwraca niejednoznaczną wersję tego ciągu.
Możesz założyć, że ciąg nie zawiera znaków nowej linii, tabulatorów ani znaków powrotu karetki.
Zapomniałem określić, czy podzielić na grupy spacji czy spacji (tj. Czy okay thendwie spacje powinny być ["okay", "then"]lub ["okay", "", "then"]) podczas publikowania wyzwania, więc możesz założyć dowolną formę podziału.
Przypadki testowe)
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
Punktacja
Ponieważ jest to golf golfowy , wygrywa zgłoszenie z najmniejszą liczbą bajtów!
apple(s)test powinien dać wynik apples? Wyzwanie stwierdza, Otherwise, if the word is the first word in the string . . . replace the (s) at the end of the word with s.że zauważam, że ten przypadek przyniósł applesw piaskownicy pierwsze trzy wersje, ale zmienił się przy czwartej.
There's a single banana(s)-> There's a single bananas.