การจัดการงาน IOI Thailand League 2010
เอกสารนี้ใช้เป็นหน้าหลักเกี่ยวกับการจัดการงานการแข่งขัน IOI Thailand League 2010
ลิงก์ย่อ http://theory.cpe.ku.ac.th/wiki/index.php/League2010
แนวคิด
ปัญหา: ปัจจุบันการแข่ง TOI ที่จัดอยู่ค่อนข้างยากสำหรับคนหัดใหม่และอาจจะเข้าถึงยาก
ทางคณะกรรมการจัดงาน IOI 2011 จึงได้ประสานงานกับทางวิชาการ.คอม ให้เข้ามาช่วยในการประชาสัมพันธ์และการจัดการ ทำให้ ส่วนหลักของการแข่งขัน TOI จะเปลี่ยนไปเป็น IOI Thailand League 2010 โดยมีการเปลี่ยนแปลงคร่าว ๆ ดังนี้
- มีการแข่งขันหลายระดับ ตอนนี้จะมี 3 ระดับ ระดับบนควรจะเป็นประมาณ TOI.C
- จัดแข่งรายเดือน ทุกเดือน และมีการเลื่อนระดับ ลักษณะนี้จะคล้าย ๆ กับลีคของกีฬา เพื่อให้ผู้เข้าแข่งขันเห็นการพัฒนาของตนเอง
- กำหนดการแข่งที่ยืดหยุ่นมากขึ้น มีการแข่งขันออนไลน์ ที่ไม่กำหนดเวลาแค่ 3 - 5 ชั่วโมง แต่ให้เวลานักเรียนเข้ามาทำตอนไหนก็ได้
- ประชาสัมพันธ์ถึงโรงเรียน มีการไปจัดแข่งที่โรงเรียนต่าง ๆ ด้วย โดยตระเวนไปเดือนละหนึ่งโรงเรียน (ทางวิชาการ.คอมจะช่วยจัดให้ แต่เราสามารถไปเดินสายด้วยก็ได้)
ส่วนการแข่งขันระดับที่สูงขึ้น เช่น TOI.CPP จะยังจัดเหมือนเดิม เป็นครั้งคราวไป
สำหรับทีมงาน
กิจกรรมที่คุณสามารถช่วยได้
หาคุณต้องการช่วยเหลือ มีกิจกรรมมากมายที่คุณสามารถช่วยได้ หลายกิจกรรมสามารถทำได้ยามว่าง (มั๊ง) กรุณาอ่านส่วนช่องทางติดต่อด้านล่างด้วย จะได้ติดต่อกันได้สะดวก
0. ตารางเวลาการทำงาน
- จะเพิ่มรายละเอียดเร็ว ๆ นี้
1. ออกโจทย์
อันนี้เป็นกิจกรรมหลักที่น่าจะเป็นแก่นของการจัดการงาน IOI Thailand League เลยก็ว่าได้ คาดว่ากิจกรรมนี้จะสัมพันธ์กับกิจกรรมที่ 2 (ทำ test data) อย่างลึกซึ้ง
ในการเขียนให้ใช้เทมเพลตต่อไปนี้: แบบแรก .doc, แบบสอง .docx
เมื่อเขียนแล้วสามารถนำเข้าสู่โฟลด์เดอร์ dropbox ที่แชร์ไปให้ได้เลย (dropbox? แชร์อะไร? --- กรุณาอ่านด้านล่าง) ในโฟลด์เดอร์นั้นจะมีโครงสร้างคร่าว ๆ ดังนี้
/toi-tasks /samples --- ตัวอย่างที่ใส่ให้ทดลองหลัง register /templates --- เทมเพลตข้างต้น /mar53 --- โจทย์และ testdata แยกตามเดือน /apr53 /... /unused --- คลังโจทย์ที่ยังไม่ได้ใช้ /toi.a --- โจทย์ที่มี test data แล้ว แยกตามระดับ /toi.b /toi.c /unclassified --- โจทย์ที่มี test data แล้ว แต่ยังไม่ได้แยกระดับ /testdata --- test data ของโจทย์ทั้งหมด ไม่แยกระดับ (เพื่อให้การเปลี่ยนระดับโจทย์ทำได้ง่าย) /NO-TESTDATA --- คลังโจทย์ที่รอคอย test data จากคุณ /toi.* --- แยกตามระดับ /unclassified --- ยังไม่ได้แยกระดับ /IN-PROGRESS --- สำหรับไว้ย้ายไฟล์โจทย์จาก NO-TESTDATA ที่จะทำ test data มาพักไว้ (จะได้ไม่ทำซ้ำกัน)
สมมติว่าวันดีคืนดีคุณคิดโจทย์ได้ อย่ารอช้า เปิดเทมเพลตข้างต้นแล้วเขียนส่งมา ถ้าคุณคิดว่าคุณจะทำ test data เอง แค่นั้นคงพอ แต่ถ้าคิดว่าคงไม่ทำแล้ว (555) กรุณาเมล์แจ้ง (หรือบอกใน facebook) คนที่ว่างจะทยอยทำ test data ให้ต่อไป
2. พัฒนาเฉลยและ test data
- จะเพิ่มรายละเอียดอีกเร็ว ๆ นี้
ถ้าวันดีคืนดีคุณว่าง ๆ ไม่มีอะไรทำ อยากเขียนโจทย์แต่ไร้ซึ่งแรงบันดาลใจ... มาเขียนเฉลยและทำ test data กันดีกว่า
ขั้นตอนง่าย ๆ มีดังนี้ (ต้องใช้ dropbox)
- เลือกโจทย์ที่อ่านแล้วคุณสนใจ จากใน NO-TESTDATA
- ให้ย้ายไฟล์โจทย์จากโฟลด์เดอร์ NO-TESTDATA มาไว้ที่ IN-PROGRESS ก่อน เพื่อเป็นการจองโจทย์
- เขียนเฉลยและทำ test data โดยใช้รูปแบบไฟล์ตามรายละเอียดด้านล่าง (ดูส่วนโจทย์และข้อมูลทดสอบ)
- เมื่อทำเสร็จแล้ว upload ไฟล์เฉลยลงไปที่ unused/testdata แล้วย้ายไฟล์โจทย์จาก IN-PROGRESS ไปไว้ใน unused/toi.* ตามเหมาะสม ถ้าไม่รู้จะไว้ที่ระดับใด ให้ใส่ไว้ที่ unused/unclassified
ถ้าเปลี่ยนใจไม่ทำเฉลยและ test data ข้อนั้น ๆ แล้ว ให้ย้ายไฟล์โจทย์ออกจาก IN-PROGRESS กลับที่เดิมด้วย เพื่อคนอื่น ๆ จะได้มาทำได้ต่อไป
3. แก้ไข ปรับปรุงโจทย์
ถ้าคุณได้รับการ share dropbox อยู่ คุณก็สามารถแก้ไขไฟล์ในนั้นได้เลย!
อย่างไรก็ตาม ถ้าคุณกลัวว่าอาจจะมีคนแก้ไฟล์เดียวกันกับคุณ คุณสามารถใช้โฟลเดอร์ IN-PROGRESS ให้เป็นประโยชน์ได้ โดย move ไฟล์ที่เกี่ยวข้องไปไว้ในโฟลเดอร์ดังกล่าว เพื่อป้องกันคนอื่นแก้ไขชั่วคราว (แต่อย่าลืมย้ายกลับ)
4. ทดสอบ test data
- จะเพิ่มรายละเอียดเร็ว ๆ นี้
ในการพัฒนาเฉลยและ test data ย่อมเป็นไปได้ที่จะมีข้อผิดพลาดหรือบั๊กในโปรแกรมที่คาดไม่ถึง ดังนั้น ถ้าเป็นไปได้ จึงอยากให้มีอีกคนที่ไม่ใช่ผู้พัฒนาเฉลยและ test data มาทดสอบ test data ให้ โดยประเด็นที่ต้องทดสอบมีดังนี้
1. test data ถูกต้องตาม formatและเงื่อนไขที่ระบุไว้ในโจทย์หรือไม่
2. เฉลยที่เขียนด้วยอัลกอริธึมที่ถูกต้อง โดยไม่ต้อง optimize มากจนเกินไป สามารถทำงานภายในเวลาและหน่วยความจำที่กำหนด หรือไม่ (ถ้าไม่ อาจต้องคุยกับผู้ออกโจทย์ และ/หรือ ผู้ทำ test data คนแรก ว่าใช้อัลกอริธึมเดียวกันหรือไม่)
3. ไฟล์ output ของ test data ถูกต้องหรือไม่ และ มีหลายคำตอบได้หรือไม่
4. ถ้าขยัน อาจเขียนโปรแกรมที่ใช้อัลกอริธีมที่รันนานกว่าโปรแกรมเฉลยพอสมควร แต่เขียนง่ายกว่า(โอกาสบั๊กน้อยกว่า) มาทดสอบ test data เพื่อเช็คให้แน่ใจว่าถูกจริงๆ
เมื่อทดสอบเสร็จแล้ว (ทำยังไงดีถึงจะ mark บอกคนอื่นว่าทดสอบแล้ว?)
5. ดูแลการเตรียมงาน
- จะเพิ่มรายละเอียดเร็ว ๆ นี้
ผู้ที่ทำหน้าที่ดูแลการเตรียมงานของการแข่งขันนั้นๆ มีหน้าที่ดังต่อไปนี้ คือ
- เลือกโจทย์สำหรับการแข่งขันในระดับที่ตนดูแล (ถึงอ.มะนาว ถ้าเลือกแล้วให้ทำยังไงคะ ย้ายไปเลย? ต้องคุยกับคนดูแลระดับอื่นด้วย เพราะโจทย์ซ้อนทับกัน?)
- ตรวจสอบความถูกต้องของโจทย์ที่เลือกมา เช่น หาคนมาทดสอบ test data (ตามข้อ 4.) และเกลาภาษาของเนื้อหาโจทย์ให้เข้าใจง่ายที่สุด จัด formatting ให้สวยงาม
- upload โจทย์ขึ้นไปบน grader ตัวทดสอบ และตัวจริง ถ้าเป็นไปได้ ควรลองส่งโปรแกรมไปรันบนตัวตรวจดูอีกครั้งหนึ่ง
- ถ้าโจทย์ไม่พอ ลองออกเพิ่ม หรือโพสขอใน mailing list / facebook group ดู เผื่อมีคนช่วยออกโจทย์เพิ่มได้
6. ดูแลการแข่งขัน
- จะเพิ่มรายละเอียดเร็ว ๆ นี้
ช่องทางติดต่อ
ในการสื่อสารจะใช้เมล์เป้นหลัก โดยจะมีเมล์ลิสต์สองอัน คือ
- เมล์ลิสต์ของทีมงานทั้งหมด คนที่สนใจช่วยเหลือจะได้รับการเชิญเข้าเมล์ลิสต์นี้ หลัก ๆ จะเอาไว้ประกาศข่าว หรือแจ้งเวลามีคนเพิ่มโจทย์เข้าในระบบเป็นต้น จะเป็นเมล์ลิสต์ที่ส่งเมล์ไม่มากนัก
- เมล์ลิสต์ของทีมหลัก (core team) สมาชิกในเมล์ลิสต์นี้จะเปลี่ยนไปตามแต่ละครั้ง สมาชิกจากในเมล์ลิสต์ของทีมงานสามารถสมัครเข้าเมล์ลิสต์ทีมหลักเพื่อระบุว่าพร้อมจะช่วยการจัดครั้งนั้น ๆ ได้ เมล์ลิสต์นี้จะมีการสนทนาที่มากกว่าเมล์ลิสต์แรก
ขณะนี้ได้ทดลองเปิดกลุ่มใน facebook ร่วมด้วย หวังว่าจะติดต่อกันสะดวกขึ้น
ส่วนโจทย์และข้อมูลทดสอบจะแชร์ผ่านระบบของ dropbox ที่จะแชร์ให้กับทีมงาน
การพัฒนาโจทย์และข้อมูลทดสอบ
โจทย์ ควรเขียนโดยใช้เทมเพลต แบบแรก .doc, แบบสอง .docx สำหรับทีมงานที่ไม่สะดวกกับรูปแบบดังกล่าวสามารถส่งในรูปแบบอื่นได้เช่นกัน
โจทย์จะต้องระบุ: (1) ขอบเขตทั้งเวลาและหน่วยความจำให้ชัดเจน
ข้อมูลทดสอบ ในกรณีที่การตรวจเป็นแบบการเปรียบเทียบสตริงธรรมดา ระบบ grader ปัจจุบันสามารถอัพโหลดข้อมูลทดสอบและโจทย์ได้ทางหน้าเว็บแล้ว โดยจะอัพโหลดเป็นแฟ้ม .zip, .tar, .tar.gz, หรือ .tgz โดยไฟล์ดังกล่าวจะต้องมีรูปแบบดังนี้
- ไฟล์ข้อมูลทดสอบ จะมีสองชุด ชุดแรกเป็นตัวอย่างในข้อสอบ (ใช้ตรวจระหว่างการแข่งขัน) และชุดที่สองสำหรับการตรวจจริง
- ไฟล์ข้อมูลนำเข้าจะมีชื่อ เช่น 1.in, 2.in สำหรับข้อมูลชุดทดสอบจริง สำหรับชุดข้อมูลทดสอบตัวอย่างจะเพิ่ม prefix ex. เข้าไป ตัวอย่างเช่น ex.1.in หรือ ex.2.in
- หรือถ้าต้องการ group หลาย test case ให้ใช้ a, b, c ในการระบุต่อท้ายหมายเลขข้อมูลทดสอบ เช่น 1a.in, 1b.in, 1c.in หรือ ex.1a.in (โดยปกติข้อมูลชุดทดสอบตัวอย่างมักไม่ต้อง group)
- ไฟล์ข้อมูลผลลัพธ์ มีนามสกุล .sol ที่ตรงกับไฟล์ข้อมูลนำเข้า
- ไฟล์โจทย์จะชื่ออะไรก็ได้ ให้มีนามกสุล pdf ไฟล์ดังกล่าวจะถูก link จากโจทย์ให้โดยอัตโนมัติ
สำหรับการตรวจแบบอื่นก็สามารถทำได้ แต่ต้องอัพโหลดและ import ข้อมูลทดสอบแบบ manual
เครื่องสำหรับทดสอบ ในการทดสอบ จัดระดับ และวิจารณ์โจทย์ สามารถใช้เครื่องที่ http://theory.cpe.ku.ac.th/toi-test โดย account จะกระจายให้ทางเมล์ลิสต์ต่อไป
มีไอเดีย แต่ไม่มีเวลาพัฒนาโจทย์
- จะระบุต่อไป
ต้องการเข้าร่วมทีมงาน
ติดต่อไปที่รายชื่อต่อไปนี้ (ชื่อจะเพิ่มขึ้นในภายหลัง)
- จิตร์ทัศน์ ฝักเจริญผล
- ทักษพร กิตติอัครเสถียร
- ภัทร สุขประเสริฐ
- วิชชากร กมลพรวิจิตร
- อาภาพงศ์ จันทร์ทอง
แล้วคำเชิญต่าง ๆ จะตามมาเอง