Just algorithm!
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 =
    let rec run list set times = 
        match list with
        | []         -> times
        | head::tail -> 
            let newSet = Set.add head set
            if Set.count newSet = s
            then run tail (Set.singleton head) (times+1)
            else run tail newSet times

    run list Set.empty 0 |> string

s คือ จำนวนของ Search Engine

list คือ รายการของ keyword



function run เป็น recursive ที่จะ return ค่าว่าต้องสลับ set กี่ครั้ง

โดยที่ ถ้ารายการ keyword หมด ([]) เราก็ return จำนวนครั้ง

แต่ถ้ามี keyword เหลืออยู่ (head::tail) เราก็เอา head ใส่ set

หลังจากนั้นก็ count สมาชิกใน set ถ้าครบตามจำนวน Search Engine ก็เริ่ม set ใหม่ และเพิ่มจำนวนครั้งเข้าไป



จบ






Create Date : 15 พฤศจิกายน 2557
Last Update : 15 พฤศจิกายน 2557 9:01:37 น. 0 comments
Counter : 622 Pageviews.

ชื่อ : * blog นี้ comment ได้เฉพาะสมาชิก
Comment :
  *ส่วน comment ไม่สามารถใช้ javascript และ style sheet
 

chaowman
Location :
กรุงเทพฯ Thailand

[Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 8 คน [?]





New Comments
Group Blog
 
All Blogs
 
Friends' blogs
[Add chaowman's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.