การพูดติดอ่างเป็นปัญหาที่พวกเราหลายคนอาจเคยมีประสบการณ์หรืออย่างน้อยก็เห็นมัน แม้ว่าซอฟต์แวร์จดจำคำพูดที่โด่งดังส่วนใหญ่มีปัญหาร้ายแรงเกี่ยวกับการพูดติดอ่างลองนึกภาพซอฟต์แวร์ที่เข้าใจการพูดติดอ่าง แต่ไม่สามารถแก้ไขได้และเขียนเฉพาะตามที่เป็น
ตัวอย่างข้อความที่เขียนโดยซอฟต์แวร์ดังกล่าวสามารถเป็นเช่นนี้"โปรด CA CA ระมัดระวัง" ในตัวอย่างนี้"ระวัง"คือคำเดิมและ"ca ca"เป็นคำพูดติดอ่าง
ท้าทาย
เขียนโปรแกรมหรือฟังก์ชั่นที่แก้ไขคำพูดติดอ่างโดยการลบคำเหล่านั้นออกจากอินพุตขณะที่รักษาคำเดิมไว้ ยกตัวอย่างเช่นการแก้ไขรุ่นของ"โปรด CA CA ระวัง"จะเป็น"โปรดระวัง"
นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุดในทุกภาษาชนะ!
คำพูดติดอ่างอะไร
การพูดติดอ่างมีหลายรูปแบบที่แตกต่างกัน แต่เพื่อความเรียบง่ายของความท้าทายนี้เราจะ จำกัด ให้เป็นกฎต่อไปนี้:
- คำพูดติดอ่างอาจเป็นส่วนที่ไม่สมบูรณ์หรือเป็นคำเดิมทั้งหมด โดย "ส่วนที่ไม่สมบูรณ์" ฉันหมายความว่าคำดั้งเดิมควรเริ่มต้นด้วยคำที่พูดติดอ่าง ยกตัวอย่างเช่น"ope"และ"เปิด"ทั้งสองสามารถจะเป็นคำพูดติดอ่าง"เปิด"แต่"ปากกา"ไม่สามารถเป็นหนึ่งตั้งแต่"เปิด"ไม่ได้เริ่มต้นด้วย"ปากกา"
- คำพูดติดอ่างต้องมีสระ"aeiou"อย่างน้อยหนึ่งแห่ง ตัวอย่างเช่น"ดาว"อาจเป็นคำพูดติดอ่างของคำว่า"เริ่มต้น"เนื่องจากมี"a"แต่"st"ไม่สามารถเป็นคำพูดติดอ่างได้เนื่องจากไม่มีสระใด ๆ ที่กล่าวถึง
- คำพูดติดอ่างสามารถปรากฏต่อหน้าคำเดิมและควรทำซ้ำอย่างน้อยสองครั้งเพื่อให้ถูกต้อง (คำเดิมไม่นับในการทำซ้ำ) ตัวอย่างเช่น"oo open"มีคำพูดติดอ่าง แต่"o open o"ไม่ได้เพราะ"o"หลังจากคำดั้งเดิมไม่ได้นับและ"o"ก่อนคำเดิมไม่ซ้ำอย่างน้อยสองครั้ง "go go go go go go"มีคำพูดติดอ่างห้าคำต่อหน้าคำเดิมและถูกต้อง
- คำที่พูดติดอ่างเพียงชุดเดียวไม่สามารถมีรูปแบบผสมได้และคำนั้นควรเหมือนกัน ตัวอย่างเช่น"op o op open"จะไม่นับเป็นคำพูดติดอ่าง บนมืออื่น ๆ"o op op เปิด"ได้พูดติดอ่างคำเพราะเป็นครั้งแรกที่"o" ที่ถูกมองว่าเป็นคำที่แตกต่างกันทั้งที่นี่และทั้งสอง"สหกรณ์" sจะถูกนับเป็นคำ stuttered ของ"เปิด"
- ในกรณีที่ชุดคำพูดติดอ่างที่ถูกต้องหลายชุดติดกันแล้วจะมี แต่คำเดิมเท่านั้นที่เหลืออยู่ ตัวอย่างเช่นใน"ooo op op op open"ส่วน"oo o"ถูกมองว่าเป็นคำพูดติดอ่างของคำว่า"op"แรกดังนั้นพวกเขาจึงควรลบออกและจากนั้น"op op op"ถูกมองว่าเป็นคำพูดติดอ่างของ"open "และควรลบเช่นกันดังนั้นเฉพาะ" open "เท่านั้นที่จะถูกทิ้งหลังจากลบคำที่พูดติดอ่าง คุณสามารถสมมติว่าคำพูดติดอ่างที่ถูกต้องหลายชุดเกิดขึ้นจากซ้ายไปขวาเท่านั้นดังนั้นการแก้ไข"op op ooo open"จะส่งผลให้"op op open" (aka
อินพุต
- อินพุตเป็นสตริงบรรทัดเดียวที่มีตัวอักษรภาษาอังกฤษ 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"ดูเหมือนว่ากฎควรนำไปใช้ซ้ำ ๆ เพื่อที่จะกลายเป็น "ดื่มน้ำ"