Feb 16, 2012

ซ้อม CodeJam


ช่วงนี้ซ้อม CodeJam อยู่ หวังว่าจะได้เสื้อ Google มาใส่เล่น (โดน @lewcpe ยั่วให้อยากแข่ง) เลยว่าจะจดรายระเอียดเอาไว้หน่อย เผื่อว่าใครอยากจะลงเล่นแย่งชิงเสื้อไปด้วย อิอิ

การเขียนโปรแกรมแก้โจทย์:
- ใช้ภาษาอะไรก็ได้ ขอแค่มี compiler เวอร์ชันฟรีให้กรรมการเอาไว้ทดสอบก็พอ (Mathematica อด)
- ส่วน editor/ide จะใช้อะไรก็ได้ อันนี้ฟรีสไตล์เลย
- แต่ระบบคิดคะแนนคือโหลด test case มารันในเครื่องตัวเอง แล้วส่งคำตอบกลับไป ไม่ใช่รันที่ฝั่ง server ปิดบัง test case
- ดังนั้น test case ที่ให้มาก็จะมี time out เพื่อป้องกันการที่เราโหลด test case มาศึกษานั่นเอง
- และเวลาส่งคำตอบ ต้องแนบไฟล์โปรแกรมของเราไปด้วย

คำถามแต่ละข้อ:
- ในหนึ่งคำถาม จะมี test case ให้ 2 ชุด (ง่ายกับโหด)
- อ่านโจทย์ + เขียนโปรแกรมให้เสร็จก่อน แล้วค่อยโหลด test case
- test case ข้อง่ายเมื่อโหลดมาแล้ว มีเวลา 4 นาทีในการหาคำตอบ และส่งข้อมูลกลับไปให้ตรวจ
- ส่งคำตอบผิดไป ทางโน้นจะบอกว่าผิด แต่ยังให้ส่งใหม่ได้เรื่อยๆ จนกว่าเวลา 4 นาทีจะหมด
- ถ้าเวลาหมดก็ต้องโหลด test case ชุดใหม่มาคิด
- เมื่อส่งคำตอบที่ถูกต้องไปแล้ว ถึงจะโหลด test case แบบโหดมาทำได้
- test case โหดให้เวลา 8 นาที แต่จะไม่บอกตอนแข่งว่าถูกหรือผิด แถมคราวนี้เวลาหมดแล้วหมดเลย (ระวังให้ดี)

ในหนึ่งรอบต้องเจอ:
- แต่ละรอบจะมีคำถามให้ 3 ข้อ เรียงจากคะแนนน้อยไปมาก (อาจจะถือว่าเรียงง่ายไปยากด้วย)
- ถ้าคิดว่าทำไม่ทันทั้ง 3 ข้อ ควรเก็บข้อแรก (ง่ายสุด) แล้วข้ามไปเก็บข้อสุดท้ายเลย จะได้คะแนนเยอะกว่าเก็บข้อแรกกับข้อที่สอง
- แต่ถ้าคิดจะทำข้อสุดท้ายด้วยการ recursive - brute force ไม่พึ่ง dynamic programming ทำใจได้เลยว่าผ่านแค่ test case แบบง่ายเท่านั้น
- เพราะฉะนั้น จะเขียน algorithm ธรรมดาเก็บ test case แบบง่ายทั้งหมดก่อน (อย่างรวดเร็ว) แล้วค่อย optimize เพื่อลุย test case โหดก็ได้

รอบที่แข่งขัน:
- รอบ qualification ให้เวลา 24 ชั่วโมง แต่ถ้าจะจริงจังกับเสื้อ ควรทำรอบนี้ให้เสร็จใน 2 ชั่วโมง เพราะคำถามง่ายมาก
- เมื่อผ่าน qualification แล้ว ก็จะพบกับรอบที่ 1 ซึ่งมีให้เลือกเล่น 3 รอบย่อย
- จะแข่งรอบย่อยกี่รอบก็ได้ ขอแค่ผ่านรอบย่อยอันใดอันหนึ่งก็พอแล้ว (เข้ารอบประมาณรอบย่อยละ 1000 คน)
- รอบย่อยของรอบที่ 1 จะเริ่มโหดขึ้นมาบ้างแล้ว ควรเก็บให้ได้อย่างน้อย 2 ข้อเต็มๆ (เวลาแข่งประมาณ 2.5 ชั่วโมง)
- ถ้าไม่มีปัญหาอะไร ก็จะได้ผ่านเข้าไปแข่งรอบที่ 2
- รอบนี้จะยากขึ้นมาอีกระดับเลย เก็บได้ข้อนึงเต็มๆ กับอีกข้อที่ผ่านแค่ test case ง่ายก็มีสิทธิ์ได้เสื้อแล้ว
- จะผ่านเข้ารอบที่ 3 ได้ต้องติด 500 อันดับแรก ส่วนถ้าจะหวังเสื้อก็ติด 1000 อันดับแรก

เอาให้ได้ถึงแค่นี้ก่อน ถ้าติดถึงรอบ 3 มหาโหดจริงจะมาเขียนต่อ (ตอนนี้หวังแค่เสื้ออย่างเดียว)

Feb 9, 2012

การศึกษาไทย

ออกตัวก่อนว่าผมไม่ได้เรียนสายคอมฯ โดยตรง แต่ด้วยความที่ชอบคอมพิวเตอร์อยู่บ้าง ก็อยู่คลุกคลีกับมันบ่อยๆ

เรียกว่าเป็นความโชคดี (หรือโชคร้ายกันแน่) ของผมเอง ที่ไม่ได้เริ่มจากภาษา C/Java อย่างที่คนเรียนสายนี้มักจะทำกัน แต่ไปเริ่มกับภาษาชั้นสูงเลยอย่าง Python/JavaScript ทำให้ผมไม่ค่อยรู้เรื่องรู้ราวอะไรกับการศึกษาในมหาวิทยาลัยของสายนี้เท่าไหร่

แถมไอ้ตอนที่ผมเรียนรู้เอง ก็ไม่ได้ค่อยๆ เรียนค่อยๆ สร้าง tool แต่ละอย่างตามที่สอนในห้องอีก อยากได้อะไรก็ถาม Stack Overflow เอาเป็นที่แรก พวก tool ต่างๆ ก็เลยไม่ค่อยได้เขียนเอง import lib เข้ามาใช้เป็นประจำ

มันเลยทำให้ผมโคตรไม่เข้าใจว่า ถ้าจะรับค่าตัวเลข 0-6 แล้วส่งคืนเป็นวันอาทิตย์-เสาร์ ทำไมต้องเขียน if-else เพื่อตรวจเอาเองด้วย ทั้งๆ ที่เราก็มี strptime-strftime เอาไว้ให้ใช้อยู่แล้ว...

แล้วข้อสอบก็ออกให้ตรวจสอบ leap year ผมก็เขียนไปอย่างนี้ (ข้อสอบเป็นภาษาอื่น ไม่ใช่ Python)
def is_leap(year):
    if not year%400 or (year%100 and not year%4):
        return True
    else:
        return False
ปรากฏว่าอาจารย์ไม่ตรวจให้ เพราะผมไม่ได้ใช้ nested-if-else อย่างที่สอนในห้อง!!



วันนี้ซ้อมโจทย์ CodeJam เล่นๆ แล้วก็คิดว่า เอ่อ! โจทย์หยั่งงี้แหละ ที่มันควรเอาไปออกเป็นข้อสอบ

แต่พอลองมาดูๆ แล้ว โจทย์มันก็ยากพอควรอยู่เหมือนกัน แถมเวลาสอบแค่ 3 ชั่วโมง (ก็ประมาณเวลาแข่งนั่นแหละ) ถ้าอาจารย์เอาแต่สอนตามหลักสูตรอย่างนี้ นักศึกษาคงทำกันได้อย่างมากก็แค่ข้อเดียว

สรุปแล้ว ผลการสอบของการศึกษาไทยมันบอกแม่งอะไรวะ?

Feb 2, 2012

Inception ส้นตีน

(ไม่ได้ด่าหนัง Inception นะครับ) วันนี้เห็นน้อง @srakrn อัพเรื่องตรรกะส้นตีนแล้วคิดถึงที่พี่ @lewcpe เคยเขียนไว้เช่นกัน

ส่วนตัวผมคิดว่ามีอีกอย่างที่แม่งโคตรส้นตีนมากๆ คือเอาความคิดตัวเองเป็นใหญ่ อะไรไม่เห็นไปในทางเดียวกับตัวเองต้องปิดกั้น เซนเซอร์ ห้ามแสดงความเห็น แล้วก็แม่งเอาความคิดตัวเองฝังหัวเข้าไป มึงไม่ทำอย่างกูมึงผิด ห้ามเถียง

... ก่อนจะบอกว่าประชาธิปไตยๆ มึงเคยเข้าใจคำว่าสิทธิและเสรีภาพมั้ยวะ?

อีกนานมั้ยกว่าเราจะเรียนรู้ว่า แม้จะไม่เห็นด้วยกับความคิดของอีกฝ่ายเลยแม้ซักนิดเดียว แต่เราก็จะไม่ปิดกั้นห้ามอีกฝั่งทำสิ่งนั้นๆ ตราบใดที่มันไม่ได้ไปขัดแย้งปิดกั้นเสรีภาพของคนอื่นๆ

ส้นตีนเถอะครับ

Jan 15, 2012

จะเช็คถูกอะไรกับชีวิตนักหนา

หลายวันก่อนมีเรื่องให้ได้แวะเข้า Windows แล้วก็เจอนี่


ก็ยังสงสัยอยู่ว่า มันจะเช็กถูกอะไรกับชีวิต (กู) นักหนา (วะ) ออกแบบ icon อย่างอื่นไม่เป็นหรือไง?

แต่คิดไปคิดมาก็นั่นแหละ เราจะภูมิใจและมีชีวิตอยู่ต่อไปได้ โดยที่ไม่ยอมแก้ไขเรื่องผิดให้เป็นเรื่องถูกหรือ?

เพียงแต่บางทีมันก็กดดันไปนะ ถ้าทุกๆ เรื่องมีกฎเกณฑ์ข้อกำหนดตายตัว ว่าเราต้องอย่างโน้นอย่างนี้อย่างนั้น เพื่อให้ผลลัพท์สุดท้ายออกมาถูกต้องหมด โดยที่ไม่มีดินแดนให้ได้ลองผิดลองถูกบ้างเลย

Jan 4, 2012

เล่นกับ Twitter & App Engine


หลายวันก่อนไปกิน Sizzler กับ @CrystalWingHero มา ก็เล่าให้ฟังว่าทำโปรเจคจบกับ @nemopear ในหัวข้อที่จะย่อ twitter ให้สั้นลง (ได้อีก) ฟังแล้วก็น่าสนใจดีครับ scope ค่อนข้างใหญ่มาก คือข้อความที่ถูกส่งเข้าไปในระบบจะถูก encode ด้วยวิธีต่างๆ ตามที่ผู้ใช้เลือก (ย่อแบบธรรมดา, ย่อแบบเกรียน, ฯลฯ) แล้วก็ยิงเข้าไปโพสต์บน twitter สำหรับตัวโปรแกรมนั้นจะเรียกผ่าน API ที่สร้างจาก Google App Engine อีกทอดหนึ่ง แน่นอนว่าโปรเจคเมพๆ อย่างนี้ มีอาจารย์ @pruet เป็นที่ปรึกษาครับ :D

ด้วยความสงสัยของผม เลยหยิบเอา tweepy มาดัดแปลงเล่นนิดหน่อย ผลที่ได้ออกมาก็เป็นอย่างนี้ครับ



เนื่องจากเสียเวลางมผิดจุดไปเยอะมาก (เยอะเกินไป อ่าน dev.twitter.com ทำไมก็ไม่รู้ อ่าน stackoverflow คงทำเสร็จด้วยเวลาน้อยกว่ากันครึ่งๆ) แถมยังเป็นโปรเจคที่ทำขำๆ จากการหยิบยืมไอเดียเพื่อนมาทดลองเล่นช่วงปีใหม่ว่างๆ อีก ตอนนี้ก็เลยมีแต่ client อย่างเดียวไม่มี API บน App Engine และไม่พัฒนาต่อแล้วครับ (ส่วน code หาดูได้ที่ github เลยครับ)

อ๋อ สุดท้ายนี้ก็สวัสดีปีใหม่ครับ :)

Jan 1, 2012

ปี 2011 ของฉัน

ปรกติไม่อินกับงานปีใหม่ แต่คิดไปคิดมา มันก็เป็นโอกาสอันดีเหมือนกันที่จะลง milestone ไว้บ้าง

  • ฝึกงาน Blognone - ไม่น่าเชื่อนะ ว่าจะได้ไปลองฝึกงานดู จากคนที่ไม่เคยทำอะไรเป็นมาก่อน ก็ได้เรียนรู้อะไรประหลาดๆ ใหม่ๆ เยอะเลย แล้วก็ฝึกงานผ่านซะด้วยแหละ
  • แข่ง HLP Hackathon - อันนี้ก็ไม่น่าเชื่ออีกเหมือนกัน เพราะคนเก่งๆ เค้าก็ลงคัดตัวกันตั้งเยอะ งานนี้โชคดีได้เจอเพื่อนใหม่หลายๆ คนเลย ^^
  • พิมพ์สัมผัส - ยากเหมือนกันนะอันนี้ แต่ก็ยังไม่ถึงขั้นเล่นเกม The Typing of the Dead ผ่านนะ
  • ฟรีสไตล์ Tetris - อันนี้ก็ใช้เวลาซ้อมๆๆ แล้วก็ซ้อมนานมากเหมือนกัน แต่ก็ยังไม่ได้ไปคาเนกี้ฮอล์ :P
  • เรียน Coding Theory - สนุกดี สนุกมาก
  • Reunion เพื่อนม.6 - ในที่สุดเพื่อนๆ เราก็จัดงานกันเป็นซักที (รอบก่อนๆ เราต้องตัดเองหมด) แม้จะเป็นการรวมกลุ่มเล็กๆ แต่ก็มีความสุขที่เจอเพื่อนที่ไม่ได้เห็นหน้าเป็นปีเหมือนกันนะ

ถ้าปีหน้าไม่ลืมจะจดใหม่ :)

ปล.ตอนเที่ยงคืนปีใหม่พอดีกำลังขับรถไปซื้อ coke มากิน 555+

Dec 21, 2011

เธอไม่คิด แต่ฉันคิด

พ - (อวดของที่เพิ่งได้มาใหม่)

ช - โอ๊ะ ซื้อ 1 แถม 1 เหรอ?

พ - ใช่แล้วจ้า

ญ - อ้าวเหรอ นึกว่าซื้อของแล้วแถมแม่ค้า

พ - เย้ยยยย แบกไปไหวเหรอ หนักอยู่น้า

ญ - ตัวแค่นี้ จะหนักเท่าไหร่เชียว เบากว่า [ชาย] ตั้งเยอะ

ช - [หญิง] พาดพิงหยั่งงี้ คิดอะไรกับเค้าหรือเปล่าเนี่ย?

ญ - [ชาย] อย่างแกมีอะไรให้คิดย๊ะ ปากหาเรื่องตลอดเนี่ย

ช - 555+

ญ - ๕๕๕

ช - (แต่เราคิดกับเธอหวะ)

Dec 10, 2011

Hava Nagila

ปรกติไม่ค่อยชอบ Andre Rieu เท่าไหร่ เพราะเค้าตีความเพลงคลาสสิกไปในแบบที่เอาใจคนส่วนมาก แทนที่จะรักษาต้นฉบับเอาไว้

แต่กับเพลงแบบนี้ เราว่าใช้ได้เลยนะ ^^

Nov 12, 2011

ของขวัญวันเกิด

หลายเดือนก่อนไปเดินโรบินสันเล่น ก็เจอของแปลกๆ ที่อยากได้เยอะเลย แต่ไม่มีตังค์ซื้อซักอย่าง เลยสัญญาว่าจะเก็บตังค์ซื้อเป็นของขวัญวันเกิดให้ตัวเองซักชิ้น

วันนี้มีได้ไปโรบินสันอีกที เลยเดินๆ ไล่ดูของที่อยากได้อีกรอบ สุดท้ายก็ตกลงปลงใจ หยิบเจ้านี่กลับบ้านครับ ^__^


ปล.(ประเด็น) วันนี้มีงานวิ่งการกุศลที่โรงเรียน สาวม.ปลายโรงเรียนเราน่ารักมาก >\\\< ♥

Oct 8, 2011

ขับรถไปดูหนัง

สืบเนื่องจากวันนี้ จับพลัดจับผลูได้ขับรถถึง 3 คันด้วยกัน!! เลยคิดว่าน่าจะบันทึกถึงมันไว้หน่อย แล้วก็เกิดไอเดียมองย้อนอดีตกลับไปว่า เราขับรถมาแล้วกี่คันนะ? เลยคิดว่าถ้าเขียนถึงมันเป็น blog ธรรมดาๆ คงจะหายาก แถมยังลำบากเวลาจะเพิ่มข้อมูลอีกด้วย เลยตกลงใจว่าจะแยกเรื่องรถที่เคยขับออกมาเป็นหน้าๆ หนึ่งไปเลยละกัน

ปล. (ไม่เกี่ยวกะบล๊อก) The Three Musketeers สนุกมากๆ (หนีไปดูมาคนเดียว - ตอนแรกว่าจะ blog เรื่องนี้ละ แต่ดันลืมคำพูดในหนังไปแล้วอะ TwT)