말더듬 은 많은 사람들이 경험했거나 적어도 본 적이있는 문제입니다. 유명한 음성 인식 소프트웨어의 대부분은 말더듬에 심각한 문제가 있지만 말더듬을 이해하지만 수정할 수는없고 그대로 쓰는 소프트웨어를 상상해 봅시다.
이러한 소프트웨어에 의해 작성된 텍스트의 예는 다음과 같습니다. "주의하십시오" . 이 예에서 "주의" 는 원래 단어이고 "ca ca" 는 말더듬입니다.
도전
끊어진 단어를 원래 단어는 그대로 유지하면서 입력에서 제거하여 수정하는 프로그램이나 함수를 작성하십시오. 예를 고정 버전 "주의하시기 바랍니다 캘리포니아 캘리포니아" 가 될 것입니다 "주의 해주십시오" .
이것은 모든 언어 승리에서 가장 짧은 코드 골프입니다 !
말 더미 란 무엇입니까?
말더듬에는 여러 가지 변형이 있습니다. 그러나이 과제를 간단하게하기 위해 다음 규칙으로 제한합니다.
- 말더듬은 단어는 원래 단어의 일부 또는 전체가 될 수 없습니다. "완료되지 않은 부분"이란 말은 원래 단어가 말 더미로 정확하게 시작해야한다는 것을 의미합니다. 예를 들어 "OPE" 와 "개방" 모두는 말더듬이에 대한 단어 일 수있다 "열기" ,하지만 "펜" 이후 하나가 될 수 없다 "열기" 로 시작하지 않는 "펜" .
- 말더듬 된 단어는 "aeiou" 모음 중 하나 이상을 포함해야합니다 . 예를 들어, "star" 는 "a"를 포함하고 있기 때문에 "start"에 대해 말더듬 된 단어 일 수 있지만 "st" 는 언급 된 모음을 포함하지 않으므로 말더듬 된 단어 일 수 없습니다.
- 말더듬 단어는 원래 단어 앞에만 나타날 수 있으며 유효하려면 두 번 이상 반복해야합니다 (원래 단어는 반복에 포함되지 않음). 예를 들어 "oo open" 은 단어를 더듬었지만 "o open o" 는 그렇지 않습니다 . 원래 단어 뒤의 "o" 는 계산되지 않으며 원래 단어 앞의 "o" 는 두 번 이상 반복되지 않기 때문입니다. "go go go go go go go" 는 원래 단어 앞에 5 번의 말더듬 단어가 있으며 유효합니다.
- 반복되는 말더듬 단어 하나가 혼합 된 형태를 포함 할 수 없으며 단어는 서로 정확히 같아야합니다. 예를 들어 "op o op open" 은 말더듬으로 계산되지 않습니다. 반면에 "o op op open" 은 첫 번째 "o" 가 여기에서 완전히 다른 단어로 표시되고 두 "op" 이 "open" 의 더듬 거리는 단어로 간주되기 때문에 단어가 더듬어 졌습니다.
- 여러 번의 반복되는 말더듬 단어가 서로 바로 유효한 경우에는 마지막 원래 단어 만 남습니다. 예를 들어, "ooo op op op open" 에서 "oo o" 부분은 첫 번째 "op" 의 말더듬 단어로 표시 되므로 제거해야합니다. 그런 다음 "op op op" 는 "open" 말더듬 단어로 표시됩니다 " 도 제거해야하므로 말이 끊긴 단어를 제거한 후에는 "열기 " 만 남습니다. 당신은 너무 고정 만에서 왼쪽에서 오른쪽으로 일어날 반복 더듬 단어의 여러 유효한 세트를 가정 할 수있다 "영업 이익은 OOO 개방" 을 초래할 것 "오픈 연산 연산" 일명 (
입력
- 입력은 ASCII 영어 문자 (az), 숫자 (0-9) 및 공백 문자 만 포함하는 단일 행 문자열입니다. 소문자는 중요하지 않으며 소문자 나 대문자 또는 둘 다를 허용하도록 결정할 수 있지만, 소문자는 동일하게 유지되어야하며 출력에서 변경할 수 없습니다.
["l","i","s","t"," ","o","f"," ","l","e","t","t","e","r","s"]문자열 대신 문자 목록 (예 :)을 사용할 수 있지만 단어 목록을 사용할 수는 없습니다. 언어가 다른 입력 구조를 가진 경우 사용하십시오. 요점은 입력을 단어로 분리하면 안되기 때문에 일부 언어에서 단어를 분리하는 비용이 실제로 다른 창의적인 솔루션을 유발할 수 있다는 것입니다.- 입력에 하나 또는 여러 개의 말 더미가 포함되어있을 수 있습니다.
- 단어 및 / 또는 숫자는 단일 공백으로 구분되며 입력 바로 옆에 이중 공백이 포함되지 않습니다.
산출
- 입력에서 모든 말 더미가 제거 된 문자열 또는 문자 목록 또는 해당 언어의 적절한 구조.
- 출력 단어는 정확히 하나의 공백으로 입력해야합니다 (입력과 동일).
- 단일 선행 및 후행 줄 바꿈 또는 공백이 허용됩니다.
표준 허점 은 금지되어 있습니다.
테스트 사례
말더듬이 없습니다.
"hello world" => "hello world"
말더듬이 반복되는 단일 사례 :
"ope ope ope ope open the window" => "open the window"
말더듬이 반복되는 여러 사례 :
"there is is is is something un un under the the the table" => "there is something under the table"
말이 끊기고 반복되지 않습니다.
"give me the the book" => "give me the the book"
말더듬이 없으며 언급 된 모음이 없습니다.
"h h help m m m me" => "h h help m m m me"
숫자는 말더듬이 아니며 언급 된 모음이 없습니다.
"my nu nu number is 9 9 9 9876" => "my number is 9 9 9 9876"
그러나 모음과 숫자가 모두 포함 된 단어는 말을 더듬을 수 있습니다.
"my wi wi windows10 is slow" => "my windows10 is slow"
동일한 반복 그룹에서 다른 형태의 말더듬 단어는 계산되지 않습니다.
"this is an ant antarctica does not have" => "this is an ant antarctica does not have"
서로 연속 된 말더듬이 연속 된 여러 단어의 경우 마지막 원래 단어 만 유지하십시오.
"what a be be be beauti beauti beautiful flower" => "what a beautiful flower"
이것은 서로 연속적으로 말더듬이 연속 된 여러 단어의 경우가 아닙니다.
"drink wat wat wa wa water" => "drink wat wat water"
빈 입력 :
"" => ""
의견에서 더 많은 경우 :
"a ab abc" => "a ab abc"
"a ab ab abc" => "a abc"
"ab ab abc abcd" => "abc abcd"
"a a ab a able" => "ab a able"
"i have ave ave average" => "i have average"
"my wi wi windows 10 is cra cra crap" => "my windows 10 is crap"
위의 테스트 사례 목록을 쉽게 복사 할 수 있습니다.
"hello world",
"ope ope ope ope open the window",
"there is is is is something un un under the the the table",
"give me the the book",
"h h help m m m me",
"my nu nu number is 9 9 9 9876",
"my wi wi windows10 is slow",
"this is an ant antarctica does not have",
"what a be be be beauti beauti beautiful flower",
"drink wat wat wa wa water",
"",
"a ab abc",
"a ab ab abc",
"ab ab abc abcd",
"a a ab a able",
"i have ave ave average",
"my wi wi windows 10 is cra cra crap"
"drink wat wat wa wa water" => "drink wat wat water"규칙이 재귀 적으로 적용되어 이것이 "음용수"가되도록하는 것 같습니다.