ข้ามไปเนื้อหาหลัก

เจาะลึกโจทย์สัปดาห์ The Weekly Challenge แก้โจทย์คำศัพท์แปลกและวงเล็บ

ชวนแกะโค้ดวิธีแก้ปัญหา The Weekly Challenge ในโจทย์ uncommon words และการจัดการวงเล็บซ้อนด้วย Python และ Perl

เรียบเรียงโดย AI
Inewgen
09 Aug 2026ที่มา: Dev.to2 นาทีอ่าน (0 ครั้ง)อัปเดตล่าสุด 29 Aug 2026
แชร์
เจาะลึกโจทย์สัปดาห์ The Weekly Challenge แก้โจทย์คำศัพท์แปลกและวงเล็บ

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ขนาดตัวอักษร
  • Mohammad S. Anwar จัดโครงการ The Weekly Challenge ให้ประลองโค้ดทุกสัปดาห์
  • โจทย์ข้อแรกให้หาคำศัพท์ที่ไม่ซ้ำกันจากประโยคที่กำหนด
  • โจทย์ข้อที่สองให้แกะวงเล็บรอบนอกสุดของ primitive string ออก
  • ผู้เขียนแก้โจทย์ด้วยภาษา Python เป็นหลักก่อนจะแปลงเป็น Perl

ทุกๆ สัปดาห์ Mohammad S. Anwar จะส่งโจทย์ที่ชื่อว่า The Weekly Challenge เปิดโอกาสให้นักพัฒนาซอฟต์แวร์ได้ร่วมส่งโค้ดแก้โจทย์ 2 ข้อ โดยผู้เขียนบทความนี้จะเขียนโค้ดด้วยภาษา Python ก่อนเป็นอันดับแรก แล้วค่อยแปลงเป็นภาษา Perl โดยไม่มีการใช้เครื่องมือปัญญาประดิษฐ์หรือ Copilot มาช่วยสร้างโค้ดแต่อย่างใด เพื่อฝึกฝนทักษะการเขียนโปรแกรม

สำหรับโจทย์ข้อแรกคือการเขียนสคริปต์เพื่อคืนค่ารายการคำศัพท์ที่ไม่ซ้ำกันทั้งหมด โดยไม่จำกัดลำดับ ซึ่งผู้เขียนเลือกใช้คลาส Counter จากโมดูล collections ซึ่งเป็นพจนานุกรมพิเศษที่เหมาะกับการนับความถี่โดยเฉพาะ

python programming code editor screen

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ผู้เขียนจะรับข้อความหนึ่งประโยคหรือมากกว่านั้นเข้ามาเป็นอินพุต จากนั้นวนลูปแยกแต่ละประโยคด้วยช่องว่าง และเพิ่มค่าในตัวนับ word_freq ก่อนจะกรองและคืนค่าเฉพาะคำที่มีความถี่เท่ากับ 1 เท่านั้น เนื่องจาก Python 3.6 เป็นต้นมา พจนานุกรมจะยังคงลำดับเดิมไว้ ทำให้คำศัพท์ในผลลัพธ์ยังคงเรียงลำดับตามประโยคที่ใส่เข้ามา ในขณะที่ภาษา Perl จะใช้วิธีจัดเรียงคำที่ไม่ซ้ำกันตามตัวอักษรแทน

ไม่อยากพลาดข่าวใหม่?

สมัครรับสรุปข่าวสารใหม่ทางอีเมล ไม่บ่อยจนรำคาญ

โฆษณา

การใช้ Counter จากโมดูล collections ใน Python ถือเป็นแนวทางปฏิบัติที่ดีและมีประสิทธิภาพสูงสำหรับงานนับความถี่ (frequency counting) เนื่องจากมีความซับซ้อนในการทำงานแบบ O(n) ซึ่งช่วยให้การประมวลผลข้อความจำนวนมากลื่นไหลและกระชับกว่าการเขียนลูปนับด้วยมือเอง

ส่วนโจทย์ข้อที่สองกำหนดให้เขียนสคริปต์คืนค่าสตริงหลังจากลบวงเล็บรอบนอกสุด (outermost parentheses) ของทุก primitive string ในการแยกส่วน primitive string ของสตริงที่กำหนด โดยเริ่มต้นจากการตรวจสอบว่าสตริงอินพุตมีแต่วงเล็บเปิดและวงเล็บปิดเท่านั้นหรือไม่ด้วย Regular Expression

ภายในฟังก์ชันจะมีการสร้างตัวแปรสองตัวคือ output สำหรับเก็บสตริงที่จะส่งคืนให้กับผู้ใช้ และตัวแปร open_count สำหรับนับจำนวนวงเล็บเปิดที่ยังไม่ได้ปิด โดยจะวนลูปผ่านแต่ละตัวอักษรเพื่อเพิ่มหรือลดค่า open_count ตามความเหมาะสม และมีเงื่อนไขตรวจสอบไม่ให้วงเล็บปิดมาก่อนวงเล็บเปิด รวมถึงตรวจสอบว่าวงเล็บเปิดทั้งหมดถูกปิดครบถ้วนเมื่อสิ้นสุดสตริง

ที่มา: Dev.to

ความคิดเห็น

แสดงความคิดเห็น
0/2000

พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้