Nói lắp là một vấn đề mà nhiều người trong chúng ta có thể đã trải qua hoặc ít nhất là nhìn thấy nó. Mặc dù hầu hết các phần mềm nhận dạng giọng nói nổi tiếng đều có vấn đề nghiêm trọng với việc nói lắp, hãy tưởng tượng một phần mềm hiểu nói lắp, nhưng không thể sửa chúng và chỉ viết chúng như hiện tại.
Một ví dụ văn bản được viết bởi một phần mềm như vậy có thể như thế này: "xin hãy cẩn thận" . Trong ví dụ này "cẩn thận" là từ gốc và "ca ca" là những từ nói lắp.
Thử thách
Viết chương trình hoặc chức năng sửa các từ bị nói lắp bằng cách xóa chúng khỏi đầu vào trong khi vẫn giữ các từ gốc. Ví dụ: phiên bản cố định của "vui lòng cẩn thận" sẽ là "vui lòng cẩn thận" .
Đây là môn đánh gôn , câu trả lời ngắn nhất trong mọi ngôn ngữ đều thắng!
Những từ nói lắp là gì?
Nói lắp có nhiều biến thể khác nhau. Nhưng để đơn giản cho thử thách này, chúng tôi sẽ giới hạn nó theo các quy tắc sau:
- Các từ nói lắp có thể là một phần chưa hoàn thành hoặc toàn bộ từ gốc. Bởi "phần chưa hoàn thành" Tôi có nghĩa là từ gốc phải bắt đầu chính xác với từ nói lắp. Ví dụ: "ope" và "open" cả hai có thể là một từ được nói lắp cho "open" , nhưng "pen" không thể là một từ vì "open" không bắt đầu bằng "pen" .
- Các từ nói lắp phải chứa ít nhất một trong các nguyên âm "aeiou" . Ví dụ: "ngôi sao" có thể là một từ được nói lắp cho "bắt đầu" vì nó chứa "a" , nhưng "st" không thể là một từ bị nói lắp vì nó không chứa bất kỳ nguyên âm nào được đề cập.
- Các từ nói lắp chỉ có thể xuất hiện trước từ gốc và phải được lặp lại ít nhất hai lần để hợp lệ (từ gốc không được tính trong các lần lặp lại). Ví dụ: "oo open" có các từ bị nói lắp nhưng "o open o" thì không, bởi vì "o" sau từ gốc không được tính và "o" trước khi từ gốc không được lặp lại ít nhất hai lần. "go go go go go go" có năm lần lặp lại các từ bị nói lắp trước từ gốc và có giá trị.
- Một tập hợp các từ lặp đi lặp lại lặp đi lặp lại không thể chứa các dạng hỗn hợp và các từ phải giống hệt nhau. Ví dụ: "op o op open" không được tính là những từ nói lắp. Mặt khác, "o op op open" có những từ bị nói lắp bởi vì "o" đầu tiên được xem là một từ hoàn toàn khác ở đây và hai chữ "op" được tính là những từ được nói lắp là "mở" .
- Trong trường hợp có nhiều tập hợp các từ lặp đi lặp lại hợp lệ ngay sau nhau, chỉ có từ gốc cuối cùng ở lại. Ví dụ, trong "ooo op op mở op" , các "oo o" một phần được xem như lời lắp bắp những người đầu tiên "op" , vì vậy họ cần được loại bỏ và sau đó "op op op" được xem như lời lắp bắp của "mở " Và chúng cũng nên được loại bỏ, vì vậy chỉ còn lại " mở " sau khi loại bỏ các từ nói lắp. Bạn có thể giả sử rằng nhiều bộ từ lặp đi lặp lại hợp lệ chỉ xảy ra từ trái sang phải, do đó, việc sửa "op op ooo open" sẽ dẫn đến "op op open" (aka
Đầu vào
- Đầu vào là một chuỗi dòng duy nhất chỉ chứa các chữ cái tiếng Anh ASCII (az), chữ số (0-9) và ký tự khoảng trắng. Vỏ chữ không quan trọng và bạn có thể quyết định chấp nhận chữ thường hoặc chữ hoa hoặc cả hai, nhưng vỏ phải giữ nguyên và bạn không thể thay đổi nó ở đầu ra.
- Bạn có thể sử dụng danh sách các chữ cái (như
["l","i","s","t"," ","o","f"," ","l","e","t","t","e","r","s"]
) thay vì chuỗi, nhưng bạn không thể sử dụng danh sách các từ. Nếu ngôn ngữ của bạn có cấu trúc đầu vào khác, hãy sử dụng nó. Vấn đề là đầu vào không nên được phân tách bằng từ, vì vậy chi phí tách từ trong một số ngôn ngữ thực sự có thể kích hoạt các giải pháp sáng tạo khác. - Đầu vào có thể không chứa, một hoặc nhiều từ nói lắp trong đó.
- Các từ và số được phân tách bằng một khoảng trắng và đầu vào sẽ không chứa khoảng trắng kép ngay cạnh nhau.
Đầu ra
- Một chuỗi hoặc một danh sách các chữ cái hoặc cấu trúc phù hợp trong ngôn ngữ của bạn với tất cả các từ bị nói lắp được loại bỏ khỏi đầu vào.
- Các từ đầu ra phải được phân tách bằng chính xác một khoảng trắng (giống như đầu vào).
- Hàng đầu và dấu vết duy nhất hoặc dấu cách được cho phép.
Sơ hở tiêu chuẩn bị cấm.
Các trường hợp thử nghiệm
Không nói lắp:
"hello world" => "hello world"
Một ví dụ duy nhất của các từ nói lắp lặp đi lặp lại:
"ope ope ope ope open the window" => "open the window"
Nhiều trường hợp lặp lại các từ nói lắp:
"there is is is is something un un under the the the table" => "there is something under the table"
Không nói lắp, không lặp lại đủ:
"give me the the book" => "give me the the book"
Không nói lắp, không có bất kỳ nguyên âm nào được đề cập:
"h h help m m m me" => "h h help m m m me"
Những con số không nói lắp, chúng không có bất kỳ nguyên âm nào được đề cập:
"my nu nu number is 9 9 9 9876" => "my number is 9 9 9 9876"
Nhưng một từ có cả nguyên âm và số có thể có những từ nói lắp:
"my wi wi windows10 is slow" => "my windows10 is slow"
Các dạng khác nhau của các từ nói lắp trong cùng một nhóm lặp lại không được tính:
"this is an ant antarctica does not have" => "this is an ant antarctica does not have"
Đối với nhiều bộ từ liên tục được đặt ngay sau nhau, chỉ giữ lại từ gốc cuối cùng:
"what a be be be beauti beauti beautiful flower" => "what a beautiful flower"
Đây không phải là trường hợp nhiều tập hợp các từ lắp ghép liên tục ngay sau nhau:
"drink wat wat wa wa water" => "drink wat wat water"
Đầu vào trống:
"" => ""
Thêm trường hợp từ ý kiến:
"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"
Một danh sách dễ dàng để sao chép các trường hợp thử nghiệm ở trên:
"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"
Có vẻ như quy tắc nên áp dụng đệ quy để điều này trở thành "uống nước"