ดังนั้นเราจึงแก้ปัญหาโดยการ จับฉลากก่อนซะเลย แต่การจับฉลากก่อนนั้น จะเป็นไปโดยที่ไม่มีใครรู้ว่าใครจับได้ใคร
ดังนั้นเราต้องมา Coding กันซึ่งก็ต้องคิดก่อนว่าจะ Code ภาษาอะไรดี ซึ่งสรุปได้ว่าใช้ Golang เพราะอยากลองเขียนอยู่พอดี
โจทย์คือ
- ห้าม Random ได้ตัวเอง
 - กรณีที่ผู้เล่นเป็นเลขคี่ ห้ามเหลือเศษ (กรณีที่ทุกคนมีคู่จนเหลือคนเดียว)
 
Solution ที่คิดออกมาคือเอาทุกคนเข้าไปอยู่ใน Array จากนั้น Shuffle Array ซะแล้วก็ไล่ส่งเมลแบบปกติเลย ได้ Code ออกมาแบบนี้
package main
import "math/rand"
import "time"
import "net/smtp"
import "net/mail"
import "strings"
func encodeRFC2047(String string) string{
 // use mail's rfc2047 to encode any string
 addr := mail.Address{String, ""}
 return strings.Trim(addr.String(), " <>")
}
func main() {
 var members = shuffle([]string {
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
 })
 auth := smtp.PlainAuth("", "example@osdev.co.th", "password", "smtp.gmail.com")
 subject := "Subject: Osdev Gift Random for New Year Cerebration\r\n\r\n"
 for i, _ := range members {
  if i != len(members) - 1 {
   message := "นี่คือเมลแจ้งการจับคุ่ขาของคุณ\r\nคู่ขาของคุณคือ " + members[i] + "\r\n\r\nกรุณาซื้อของขวัญราคาไม่ต่ำกว่า xxxx บาทมาให้คู่ขาของคุณด้วยนะจ๊ะ\r\nและอย่าลืมเก็บเรื่องนี้เป็นความลับล่ะ อย่าให้คู่ขาของคุณรู้เป็นอันขาด!!!"
   smtp.SendMail("smtp.gmail.com:587", auth, "example@osdev.co.th", []string{members[i+1]}, []byte(subject + message))
  }
 }
 message := "นี่คือเมลแจ้งการจับคุ๋ขาของคุณ\r\nคู่ขาของคุณคือ " + members[len(members) - 1] + "\r\n\r\nกรุณาซื้อของขวัญราคาไม่ต่ำกว่า xxxx บาทมาให้คู่ขาของคุณด้วยนะจ๊ะ\r\nและอย่าลืมเก็บเรื่องนี้เป็นความลับล่ะ อย่าให้คู่ขาของคุณรู้เป็นอันขาด!!!"
 smtp.SendMail("smtp.gmail.com:587", auth, "example@osdev.co.th", []string{members[0]}, []byte(subject + message))
}
func shuffle(members []string) []string {
 rand.Seed(time.Now().UTC().Unix())
 var newMembers = make([]string, len(members))
 var rands = rand.Perm(len(members))
 for i, v := range rands {
  newMembers[i] = members[v]
 }
 return newMembers
}
ประเด็นอยู่ที่ว่า ไอ้ function SendMail http://golang.org/pkg/net/smtp/#SendMail นั้นมันไม่มีที่ให้ใส่ Subject น่ะสิ ซึ่งค้นไปค้นมาไปเจอ Post นึงบอกว่าให้ใช้ "Subject: xxxx" ใน body message ได้เลย https://groups.google.com/d/msg/golang-nuts/b_zNHgr5cXU/2HLlGfwkTp4J ก็เลยจัดไป ได้ผลตามต้องการ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น