ผลต่างระหว่างรุ่นของ "Grid2010"
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) (→ประกาศ) |
||
แถว 2: | แถว 2: | ||
== ประกาศ == | == ประกาศ == | ||
+ | * (13/2) เพิ่มตัวอย่างการจับเวลา | ||
* (12/2 14:42) มีตัวอย่าง upload ไปเพิ่มเติมแล้ว [http://theory.cpe.ku.ac.th/~jittat/nanobirds/samples/medium/ download] | * (12/2 14:42) มีตัวอย่าง upload ไปเพิ่มเติมแล้ว [http://theory.cpe.ku.ac.th/~jittat/nanobirds/samples/medium/ download] | ||
* (12/2 12:14) ในการชนหินหรือวงกลม จะถือว่าชน ก็ต่อเมื่อระยะห่างของจุดศูนย์กลางกับน้อยกว่า <tt>r - ZERO</tt> โปรแกรม shoot ถูกอัพเดทให้ใช้เงื่อนไขตามนี้แล้ว | * (12/2 12:14) ในการชนหินหรือวงกลม จะถือว่าชน ก็ต่อเมื่อระยะห่างของจุดศูนย์กลางกับน้อยกว่า <tt>r - ZERO</tt> โปรแกรม shoot ถูกอัพเดทให้ใช้เงื่อนไขตามนี้แล้ว |
รุ่นแก้ไขเมื่อ 00:09, 13 กุมภาพันธ์ 2554
หน้านี้สำหรับให้ข้อมูลเกี่ยวกับการพัฒนาโปรแกรมในการแข่งขัน Grid Innovation 2010
เนื้อหา
ประกาศ
- (13/2) เพิ่มตัวอย่างการจับเวลา
- (12/2 14:42) มีตัวอย่าง upload ไปเพิ่มเติมแล้ว download
- (12/2 12:14) ในการชนหินหรือวงกลม จะถือว่าชน ก็ต่อเมื่อระยะห่างของจุดศูนย์กลางกับน้อยกว่า r - ZERO โปรแกรม shoot ถูกอัพเดทให้ใช้เงื่อนไขตามนี้แล้ว
- ประกาศสูตรคำนวณเวกเตอร์ตั้งฉาก
- รับประกันว่าสิ่งของบนกระดานจะไม่ทับกัน และในการวางกระจกสะท้อนสำหรับระดับอุดมศึกษา ห้ามวางทับสิ่งของอื่น ๆ
- (12/2 10:58) มีการอัพโหลดโปรแกรม shoot เวอร์ชันใหม่ คัดลอกได้ที่ ~jittat_fa/shoot
- (12/2 10:42) มีการแก้ไขโจทย์ดังนี้
- หน้าสอง Y2 < Y1
- ปรับขนาดข้อมูลเข้า N < 1,000
- มีการแก้ตัวอย่างข้อมูลป้อนเข้า ดูตัวอย่างด้านล่าง
การคำนวณ
การคำนวณเวกเตอร์สำหรับสะท้อน
ถ้าเรามีเวกเตอร์ เวกเตอร์ที่ตั้งฉากกับ คือเวกเตอร์ที่มีผล dot product กับ w เท่ากับ 0 หนึ่งในนั้นคือ
การจับเวลา
ใน Linux เราสามารถใช้ฟังก์ชัน gettimeofday ในการอ่านเวลาเพื่อจับเวลาได้ อ่านคู่มือ ฟังก์ชันนี้จะเขียนค่าลงใน struct timeval ซึ่งจะมี member หนึ่งคือ tv_sec ระบุเวลาที่ผ่านมาจากวันที่ 1 ม.ค. 1970 เป็นวินาที ซึ่งเรานำมาใช้เพื่อจับเวลาโปรแกรมของเราได้
ตัวอย่างโปรแกรมที่จับเวลาไม่ให้เกิน 10 วินาที (จะเลิกเมื่อถึง 9 วินาที) <geshi lang="c">
- include <sys/time.h>
- include <cstdio>
struct timeval tp_start, tp_now;
main() {
gettimeofday(&tp_start,NULL); while(true) { // // do some work // gettimeofday(&tp_now,NULL); if(tp_now.tv_sec >= tp_start.tv_sec + 9) break; }
} </geshi>
รูปแบบของแฟ้มข้อมูล
แฟ้ม input
ตัวอย่าง
-30 30 30 -30 10 5 5 4 0 0 -10 9 0 15 -10 5 0 24 0 5 0 5 0 1 1 7 0 1 2 9 1 1 1 11 1 1 2 13 1 1 2 15 1 1 1 1
แฟ้ม output
แฟ้มสำหรับ viewer: แฟ้ม trace
มีรูปแบบดังนี้
- บรรทัดแรกระบุจำนวนนก
- สำหรับนกแต่ละตัว
- บรรทัดแรกระบุจำนวนจุดที่ต้องการวาด
- จากนั้นตามด้วยลำดับของจุดที่ต้องการวาด ระบุในรูปแบบ พิกัดแกน x,พิกัดแกน y
- จากนั้นตามด้วยข้อมูลของกระจกที่เติมเข้าไป
- เริ่มด้วยบรรทัดเปล่า หรืออะไรก็ได้ (ในตัวอย่างเขียนว่า [mirrors])
- บรรทัดถัดจากนั้นระบุจำนวนกระจก
- สำหรับกระจกแต่ละอัน ระบุพิกัดของจุดปลาย เป็น x1 y1 x2 y2
ข้อมูลหลังจากนั้นตัว viewer ไม่สนใจ เช่น คะแนนที่ได้ ที่ shoot จะแสดงขึ้นมาด้วย
ตัวอย่าง 1
1 13 -30,2 2.35425,2 2.78799,-1.44272 5.08858,1.00098 12.167,-5.88003 8.40236,2.89668 20.534,3.60369 21.1352,9.77296 16.53,-5.23984 21.5494,9.69012 21.1557,4.11218 7.35801,8.23106 -557.291,833.562 [mirrors] 1 20 10 30 8 [score] Score = 1027
ตัวอย่าง 2
2 4 -30,0 1.45583,3.14558 -2.34683,-1.31136 -115.604,38.3486 3 30,0 28.999,-0.1001 147.83,-16.811 [mirrors] 0 [score] Score = 3
โปรแกรมจำลองสถานการณ์
สามารถคัดลอกได้จาก ~jittat_fa/shoot บนเครื่อง tera คัดลอกมาที่ไดเรกทอรีตัวเองด้วยคำสั่งต่อไปนี้
cp ~jittat_fa/shoot .
เรียกใช้ดังนี้
./shoot [ชื่อ input-file] [ชื่อ output-file]
การใช้งาน viewer
จะต้องป้อนแฟ้ม config และผลลัพธ์จากการ
python viewer.py [input-file] [trace-file]
โดยที่ input-file ระบุขนาดและตำแหน่งของของบนกระดาน ส่วน trace-file ระบุเส้นทางการวิ่งของนก และตำแหน่งของกระจก
ลิงก์เพื่อดาวน์โหลด
- ตัวอย่าง
- แฟ้ม cX.in จะเป็นข้อมูลป้อนเข้า ส่วน rX.out เป็นทิศทางและตำแหน่งของกระจกที่โปรแกรมต้องแสดงออกมา
- แฟ้ม vX.out เป็นแฟ้มที่โปรแกรมจำลองสถานการณ์คำนวณได้ เพื่อนำไปใส่ในโปรแกรมแสดงผลต่อไป
- โปรแกรมแสดงผล โปรแกรมแสดงผลใช้ Python และ wxPython ซึ่งผู้เข้าแข่งต้องติดตั้งก่อน
- Python ที่ใช้ ให้ใช้เวอร์ชัน 2.x Download
- ตัวอย่าง