프로그래밍은 매우 엄격합니다. 프로그램에 "바나나 카운트 출력"을 지시 할 수는 없습니다 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.