プログラミングは非常に厳格です。「バナナカウントを出力する」ようにプログラムに指示することはできませんprint(bananas)
。
しかし、それを行うと、問題が発生します。バナナの数が事前にわからないため、複数形を使用するかどうかわかりません。
時々、プログラマーは怠zyなやり方をします。チェックする代わりに、単に印刷しますthere are X banana(s)
。
しかし、それは見苦しいため、これを修正するプログラムが必要です。
メソッド
文字列のあいまいな複数形を削除するには、次の手順を実行します。
スペース上の文字列を単語のリストに分割します。
で終わる単語ごとに
(s)
、次の操作を行います。- 前の単語である場合
a
、an
、1
またはone
、削除(s)
単語の終わりに。 - 単語が最初の単語が文字列であるか、先行する単語がない場合はそれ以外の場合は、
a
、an
、1
またはone
、交換する(s)
と単語の終わりにs
。
- 前の単語である場合
単語のリストを結合して文字列に戻し、元の空白を保持します。
例
文字列を取りましょうthere's a banana(s) and three apple(s)
。
まず、文字列を単語のリストに分割します。 ["there's", "a", "banana(s)", "and", "three", "apple(s)"]
2番目のステップでは、(s)
:banana(s)
とで終わる2つの単語を使用しapple(s)
ます。
前の言葉banana(s)
はa
ですので、削除して(s)
作りますbanana
。前の単語がapple(s)
ありthree
、我々は変更するので、(s)
にしs
、これにはなりapples
。
私たちは今持ってい["there's", "a", "banana", "and", "three", "apples"]
ます。リストを元に戻すと、が得られthere's a banana and three apples
ます。これが最終結果です。
課題)
任意の妥当な形式のあいまいな文字列を取り、その文字列の明確なバージョンを返すプログラムまたは関数を作成します。
文字列に改行、タブ、またはキャリッジリターンが含まれていないと想定できます。
私は、スペースまたはスペース(すなわちかどうかのグループに分割するかどうかを指定するのを忘れてokay then
二つの空間であるべき["okay", "then"]
か["okay", "", "then"]
)あなたが分割のいずれかの形式をとることができるので、挑戦を投稿するとき。
テストケース
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
得点
これはcode-golfであるため、バイト数が最小の提出が勝ちです!
apple(s)
テストケースが生成されるべきapples
ですか?課題ではOtherwise, if the word is the first word in the string . . . replace the (s) at the end of the word with s.
、このケースはapples
最初の3つのリビジョンではサンドボックスで生成されましたが、4番目のリビジョンでは変更されたと述べています。
There's a single banana(s)
-> There's a single bananas
。