Saving the Universe เรื่องมีอยู่ว่า โลกของเรามี Search Engine อยู่หลายเจ้า แต่รู้ไหมครับว่า เราไม่สามารถใส่ keyword ตรงกับ ชื่อของ Search Engine เช่น ถ้าคุณ search "Google" บน Google จักรวาลจะระเบิดทันที !!! หน้าที่คุณคือปกป้องจักรวาลแห่งนี้ ระบบจะป้อนชื่อของ Search Engine ต่างๆ และรายการ keyword ต่างๆ ระบบคุณจะต้องบอกได้ว่า ระบบคุณจะสลับ Search Engine อย่างน้อยกี่ครั้ง อ่านต่อ ที่นี่ วิธีคิดก็ง่ายมาก แต่ต้องรู้จัก Set ใน F# โครงสร้างของ Set จะเป็น binary tree ซึ่งสมาชิกจะไม่ซ้ำกัน ทีนี้เราก็สร้าง set มา set นึง แล้วป้อน keyword ไปเรื่อยๆ ซึ่ง Search Engine ที่จะมา search set นี้ คือ Search Engine สุดท้ายที่กำลังใส่ใน set นี้ แต่ก่อนใส่ เราก็สลับ set ใหม่เข้ามา ทีนี้เราก็ปกป้องจักรวาลได้แล้ว ใน F# เราสามารถสรุป logic ด้านบนใน function เดียว let solve s list = s คือ จำนวนของ Search Engine list คือ รายการของ keyword function run เป็น recursive ที่จะ return ค่าว่าต้องสลับ set กี่ครั้ง โดยที่ ถ้ารายการ keyword หมด ([]) เราก็ return จำนวนครั้ง แต่ถ้ามี keyword เหลืออยู่ (head::tail) เราก็เอา head ใส่ set หลังจากนั้นก็ count สมาชิกใน set ถ้าครบตามจำนวน Search Engine ก็เริ่ม set ใหม่ และเพิ่มจำนวนครั้งเข้าไป จบ |