Minimum Scalar Product


ข้อนี้โจทย์ให้จับคู่ vector

แล้วให้เอาแต่ละจุดของ vector มาคูณกัน

โดยต้องได้ผลรวมที่น้อยที่สุด

อ่านต่อ ที่นี่



วิธีคิดก็ง่ายมาก ก็ให้ vector นึงเรียงจากน้อยไปมาก

อีก vector ก็เรียงมากไปน้อยแล้วคูณกันก็จบ
let solve seq1 seq2 =
    let seq1 = seq1 |> Seq.sort
    let seq2 = seq2 |> Seq.sortBy (~-)    // Unary minus
    Seq.zip seq1 seq2 |> Seq.map (fun (a, b) -> int64 a * int64 b)
                      |> Seq.sum
                      |> string

ใน f# การประกาศทับตัวแปรเดิมเค้าเรียกว่า shadowing

เช่น let seq1 = seq1 |> Seq.sort

จริงๆ ก็เหมือน imparative แต่ shadowing จะพิเศษกว่าตรงที่ ตัวแปลแรกกับตัวแปรหลังไม่เกี่ยวข้องกันเลย

เช่น เราสามารถเปลี่ยน type ของตัวแปรก็ได้



และใน f# เราไม่มี sort descending เลยต้อง sortBy negative แทน

อีกอย่างคือ operator ของ f# จะไม่ซ้ำกันเลย ดังนั้น minus กับ unary minus มี symbol ต่างกัน



ส่วน zip คือ จับคู่ item ใน list

แล้วเราก็เอามาคูณกัน แล้วก็หาผลรวม



จบ




Create Date : 15 พฤศจิกายน 2557
Last Update : 15 พฤศจิกายน 2557 11:10:02 น.
Counter : 519 Pageviews.

0 comments
แจกภาพปฏิทินประจำวัน ครั้งที่ 66 (8-14 ตุลาคม 2569) ทองกาญจนา
(7 ต.ค. 2569 09:23:54 น.)
แจกภาพปฏิทินประจำวัน ครั้งที่ 65 (1-7 ตุลาคม 2569) ทองกาญจนา
(30 ก.ย. 2569 08:56:43 น.)
เปลี่ยนล้อซี่ลวด เป็นล้อแม็ก honda click งบไม่เกิน 1,500 บาท mrter2012
(1 ก.ย. 2569 09:18:02 น.)
AI&I with coffee กับถั่ว 5 สี พุดซ้อนในแก้วกาแฟ
(11 ส.ค. 2569 03:48:55 น.)
ชื่อ : * blog นี้ comment ได้เฉพาะสมาชิก
Comment :
 *ส่วน comment ไม่สามารถใช้ javascript และ style sheet
 

Chaowman.BlogGang.com

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

[ดู Profile ทั้งหมด]
 ผู้ติดตามบล็อก : 8 คน [?]