프로그래밍은 매우 엄격합니다. 프로그램에 "바나나 카운트 출력"을 지시 할 수는 없습니다 print(bananas)
.
그러나 그렇게하면 문제가 생깁니다. 미리 바나나가 몇 개인 지 모르므로 복수를 사용할지 여부를 알 수 없습니다.
때로는 프로그래머가 게으른 길을 간다. 확인하는 대신 그냥 인쇄 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)"]
두 번째 단계에서는 (s)
: 와로 끝나는 두 단어 banana(s)
를 사용 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
처음 세 가지 개정판의 샌드 박스에서 생성 되었지만 네 번째 개정에서는 변경되었습니다.
There's a single banana(s)
-> There's a single bananas
.