วันเสาร์ที่ 28 พฤศจิกายน พ.ศ. 2558

Link Bitbucket

นาย อารักษ์ ภูพาที
5701012620144

Assignment 1 : https://bitbucket.org/a5720144/vending-machine/src

Assignment 2 : https://bitbucket.org/a5720144/clean-csv/src
## Read me ##
testcsv.py เป็น file ที่ทดสอบในการ clean ข้อมูล ในแบบ textmode
แต่ตัวงานจริงๆคือ studentattendancecalculator.py

Test 2 :
+ Kangaroo
 - Textmode : https://bitbucket.org/a5720144/test1-textmode/src
 - Kivy : https://bitbucket.org/a5720144/test1-kivy/src
+ Insertion Sort
 - Textmode : https://bitbucket.org/a5720144/test2-text-mode/src
 - Kivy : https://bitbucket.org/a5720144/test2-kivy/src

Test 3 :
## Read me ##
อยู่ใน repository เดียวกันกับ Assignment 1
ข้อ 2 : Hashcode คือ ตั้งแต่ 42:5a3cc073fd63 จนถึง 44:1ab3b822dc19
ข้อ 3 : Hashcode คือ 45:6e38426399de

วันจันทร์ที่ 14 กันยายน พ.ศ. 2558

Python GUI : Starting with Kivy

ทำไมต้อง Kivy ?!?!?
- Kivy มี built-in ที่รองรับอุปกรณ์ Multitouch
- Kivy สามารถนำ code Python ไปทำงานบน Moblie ได้
- Kivy สามารถใช้แทน Graphical interface เช่น HTML , CSS ได้
- Kivy ทำให้สามารถเขียน Application เดียว แต่ทำงานได้หลาย OS

วิธีการ Installation (สำหรับ python3)

  
ตัวอย่างต่างๆ จะอยู่ใน /usr/share/kivy-examples

Version Control System : Install Mercurial

วิธีการ Install Mercurial

เปิด Terminal ขึ้นมา แล้วพิมคำสั่งตามด้านล่าง

credit : http://stackoverflow.com/questions/5627414/correct-way-to-install-mercurial-on-ubuntu

 จากนั้นก็ Install หน้าตาจะประมาณนี้



และนี่ คือคำสั่งพื้นฐานของ Mercurial สามารถทราบได้ด้วยการพิม hg ลงใน Terminal


จากนั้น cd ไปที่ตำแหน่งที่เราต้องการสร้าง Directory ที่ต้องการเก็บ Source code (สมมติ Directory ชื่อ Building) แล้วพิม

จะทำการสร้าง Directory ขึ้นมา

จากนั้นนำ File source code ไปเก็บใน Directory ที่สร้างขึ้น

จากนั้น cd ไป Directory ที่สร้างขึ้น แล้วพิม


Mercurial จะทำการตรวจสอบ File ใน Directory และจะทำการ Add ไฟล์ให้


จากนั้น ให้ทำการพิม

เพื่อทำการแก้ไขค่า username
โปรแกรมจะให้เลือก editor ที่ต้องการจะใช้ ในที่นี้ผมเลือก nano
https://bitbucket.org/a5720144/building-software-system-i
แล้วแก้ค่าตามนี้


โดย username คือ username ของเรา แล้วตามด้วย <email>
ส่วน default ใน paths คือ url ของ repository ใน bitbucket เพื่อที่เวลา push จะทำการ push ไปใน repository นี้โดยอัตโนมัติ

วันจันทร์ที่ 7 กันยายน พ.ศ. 2558

Python Practice : Capital

1111 : เมืองหลวง (Capital)
Problem type :
Time limit : 1.0 second(s)
Memory limit : 32 megabyte(s)
       ในประเทศแห่งหนึ่ง เมืองจำนวน N เมือง ถูกกำหนดชื่อด้วยจำนวนเต็มตั้งแต่ 1 ถึง N ที่ไม่ซ้ำกันเลย เมืองทั้งหมดถูกเชื่อมกันด้วยถนนทั้งสิ้น N-1 เส้น ทำให้เมืองสองเมืองใด ๆ สามารถไปมาหาสู่กันได้ด้วยเส้นทาง เส้นทางหนึ่งเสมอ

            คุณเป็นชาวบ้านคนหนึ่งที่อาศัยอยู่ที่เมืองหมายเลข 1 และคุณต้องการทราบว่าเมืองที่อยู่ไกลจากเมืองหมายเลข 1 ที่สุดนั้น ห่างจากเมืองหมายเลข 1 เท่าไร

ข้อมูลนำเข้า

บรรทัดแรกประกอบด้วยจำนวนนับ n แทนจำนวนเมืองทั้งหมด ( 1 < n < 100 001 )

บรรทัดถัดมา n-1 บรรทัดเป็นข้อมูลของถนนแต่ละเส้น โดยจะประกอบด้วยจำนวนเต็ม Xi Yi Zi แสดงว่าถนนเส้นที่ i เชื่อมระหว่างเมือง Xi และ Yi และมีความยาว Zi  ( 1 < Xi,Yi < n , Xi != Yi , 1 < Zi < 3000 )

ข้อมูลส่งออก

บรรทัดเดียว ประกอบด้วยจำนวนเต็ม 1 จำนวน แสดงระยะทางระหว่างเมืองหมายเลข 1 กับเมืองที่อยู่ไกลเมืองหมายเลข 1 มากที่สุด


หมายเหตุ มีชุดทดสอบทั้งสิ้น 28 ชุดโดย

          4 ชุดทดสอบ n = 11
            3 ชุดทดสอบ n = 101
            3 ชุดทดสอบ n = 10001
            5 ชุดทดสอบ n = 30001
            4 ชุดทดสอบ n = 50001
            9 ชุดทดสอบ n = 100001


โจทย์โดย : สรวิทย์  สุริยกาญจน์ ( PS.int )

ที่มา : ศูนย์ สอวน. โรงเรียนมหิดลวิทยานุสรณ์
ตัวอย่างข้อมูลนำเข้า ตัวอย่างข้อมูลส่งออก
11
1 2 1427
1 3 741
1 4 1763
1 5 2491
1 6 1849
2 7 1219
3 8 1100
4 9 1071
3 10 1587
2 11 1418
2845
11
1 2 2445
2 3 1474
3 4 2493
4 5 1596
5 6 605
6 7 1531
7 8 1462
8 9 1389
9 10 1726
10 11 2112
16833

ความช่วยเหลือ: ไม่มีคำใบ้สำหรับปัญหานี้


วันจันทร์ที่ 31 สิงหาคม พ.ศ. 2558

Python Practice : General

โจทย์จาก : http://programming.in.th/task/rev2_problem.php?pid=1092

1092 : สงครามของนายพล (general)
Problem type : Batch
Time limit : 1.0 second(s)
Memory limit : 64 megabyte(s)
    เกมออนไลน์ใหม่เพิ่งเปิดตัวขึ้น ในเกมนี้ ผู้เล่นแต่ละคนจะเล่นเป็นนายพลซึ่งมีหน้าที่คุมทหารจำนวนหนึ่ง
    เมื่อเกิดการท้ารบระหว่างผู้เล่นสองคน  ผู้เล่นที่ชนะการสู้รบคือผู้เล่นที่มีทหารจำนวนมากกว่า แต่ถ้าหากทั้งสองฝ่ายมีจำนวนทหารเท่ากัน ผู้เล่นที่ชนะคือผู้เล่นที่มีหมายเลขประจำตัวนายพลที่น้อยกว่า
    ผู้เล่นที่ชนะ จะได้กำลังพลเพิ่มขึ้น ซึ่งเท่ากับทหารจำนวนครึ่งหนึ่งของฝ่ายที่แพ้ (กรณีที่จำนวนทหารหารด้วยสองไม่ลงตัว ให้ปัดเศษทิ้ง)
    ผู้เล่นที่แพ้ จะถูกเปลี่ยนจากสถานะ “นายพล” เป็นสถานะ “เชลย” ของผู้เล่นที่ชนะ  นอกจากนี้ผู้เล่นที่เคยตกเป็นเชลยของฝ่ายแพ้ จะกลายเป็นเชลยของฝั่งผู้ชนะในการแข่งขันด้วย
    บางครั้งนายพลบางคนก็ขี้ขลาด ไม่ยอมท้ารบกับนายพลด้วยกันเอง แต่กลับไปท้ารบกับเชลยของนายพลคนอื่น ในกรณีเหล่านี้ นายพลของเชลยที่ถูกท้ารบนั้นก็มีหน้าที่ต้องปกป้องเชลยของตน และจะต้องต่อสู้แทนเชลยคนนั้น หรือบางครั้งเชลยก็ทะเลาะกันเอง จนทำให้นายพลของเชลยเหล่านี้ต้องมารบกัน ก็เป็นไปได้เช่นเดียวกัน
    คุณเป็นผู้ดูแลระบบเกมออนไลน์นี้ คุณได้รับข้อมูลการปะทะกันระหว่างผู้เล่นแต่ละคู่ หน้าที่ของคุณคือบอกว่าในแต่ละครั้ง ผู้เล่นฝั่งใดเป็นฝ่ายชนะ

งานของคุณ

คุณมีไฟล์ประวัติว่า ในช่วงหนึ่งอาทิตย์ที่ผ่านมา มีใครท้ารบกับใครบ้าง หน้าที่ของคุณคือคำนวณว่า ในการสู้รบแต่ละครั้ง นายพลคนไหนเป็นผู้ชนะ  เนื่องจากอาจมีการท้ารบระหว่างเชลยหลายคนที่อยู่ใต้การควบคุมของนายพลคน เดียวกันได้ ในกรณีนี้ให้ตอบ -1

ข้อมูลนำเข้า
    บรรทัดแรกมีจำนวนเต็มสองจำนวน N, M แทนจำนวนนายพลและจำนวนครั้งในการรบ (1≤N,M≤100,000)
    อีก N บรรทัดถัดมาบอกข้อมูลของจำนวนทหารของผู้เล่นแต่ละคนในตอนเริ่มต้น โดยในบรรทัดที่ i+1 มีจำนวนเต็มหนึ่งตัว แสดงจำนวนทหารที่นายพลหมายเลข i มี ผู้เล่นแต่ละคนมีทหารจำนวนไม่เกิน 10,000 นายในตอนเริ่มต้น
    อีก M บรรทัด มีจำนวนเต็มบรรทัดละสองตัวคือ a,b แสดงว่า a และ b ท้ารบกัน (1≤a,b≤N และ a≠b)

ข้อมูลส่งออก

    มี M บรรทัด แต่ละบรรทัดบอกหมายเลขประจำตัวนายพลของฝั่งผู้ชนะของการรบแต่ละครั้ง ถ้าไม่มีการรบเกิดขึ้น (คนที่ท้ารบกันเป็นเชลยของนายพลคนเดียวกัน) ให้พิมพ์ -1
การให้คะแนน
ชุดข้อมูลทดสอบมูลค่าไม่เกิน 40 คะแนน มีค่า N,M≤1,000 และในทุกชุดข้อมูลทดสอบมีค่า N,M≤100,000
โจทย์โดย: ทักษพร กิตติอัครเสถียร ที่มา: TOI.C:05-2009
ตัวอย่างข้อมูลนำเข้า ตัวอย่างข้อมูลส่งออก
5 4
3
4
5
6
7
1 5
1 2
1 2
3 4
5
5
-1
4

ความช่วยเหลือ: ไม่มีคำใบ้สำหรับปัญหานี้


และนี่คือ Code !!








Python Practice : DNA

โจทย์จาก : http://programming.in.th/task/rev2_problem.php?pid=1019

1019 : DNA
Problem type : Batch
Time limit : 1.0 second(s)
Memory limit : 64 megabyte(s)
ดีเอ็นเอ (Deoxyribonucleic acid) คือ สารพันธุกรรมที่สามารถนำมาใช้เป็นเอกลักษณ์ของสิ่งมีชีวิต โดยดีเอ็นเอนี้เมื่อผ่านการถอดความหมายมาจากสารพันธุกรรมใดๆแล้วจะถูกนำมา เก็บในลักษณะของสายอักขระ โดยตัวอักขระนั้นจะมีเพียงแค่สี่ตัวเท่านั้น นั่นคือ A C G และ T

ในการวิเคราะห์ดีเอ็นเอของคุณหญิงหมอ มักประสบปัญหาที่ข้อมูลที่ต้องการเปรียบเทียบแม้ว่าสิ่งมีชีวิตชนิดเดียวกัน แต่ตำแหน่งเริ่มต้นไม่ตรงกันทำให้ยากที่จะเปรียบเทียบกันได้ ตัวอย่างเช่น สารชนิดแรกได้ผลมาเป็น AAAACTGCTACCGGT และชิ้นที่สองคือ CTGAATCTACTGCTATTGCAA หากสังเกตให้ดีจะเห็นได้ว่าส่วนที่เหมือนกันที่มีความยาวต่อเนื่องมากที่สุด คือ ACTGCTA

ข้อมูลที่ซ้ำและยาวที่สุดอาจมีได้หลายชุด หน้าที่ของเราคือเขียนโปรแกรมเพื่อช่วยคุณหญิงหมอหาส่วนที่เหมือนกันอย่าง ต่อเนื่องของดีเอ็นเอจำนวน 2 สาย

ข้อมูลนำเข้า

บรรทัดแรกและบรรทัดที่สอง
แต่ละบรรทัดเก็บข้อมูลของดีเอ็นเอแต่ละสาย โดยแต่ละสายจะประกอบด้วยอักขระ ‘A’ ‘C’ ‘G’ ‘T’ เท่านั้น โดยความยาวของแต่ละสายเป็น L โดยที่ 1 < L < 200

ข้อมูลส่งออก
บรรทัดแรก เป็นแสดง ส่วนที่เหมือนกันที่ยาวที่สุด ของดีเอ็นเอทั้งสองสาย ถ้ามีส่วนที่ยาวที่สุดมากกว่าหนึ่งคำตอบให้เลือกตอบส่วนที่ยาวที่สุดสายแรก ที่พบ
("สายแรก" หมายถึง สายย่อยที่อยู่ซ้ายที่สุดของดีเอ็นเอสายแรก)

ที่มา: การแข่งขันคณิตศาสตร์ วิทยาศาสตร์ โอลิมปิกแห่งประเทศไทย สาขาวิชาคอมพิวเตอร์ ประจำปี 2547
ตัวอย่างข้อมูลนำเข้า ตัวอย่างข้อมูลส่งออก
AAAACTGCTACCGGT
CTGAATCTACTGCTATTGCAA
ACTGCTA

ความช่วยเหลือ: ไม่มีคำใบ้สำหรับปัญหานี้

และนี่ คือ Code




Task : Python Plug-in for Netbeans (Update 31/08/58)

หลังจากที่คราวก่อน ผม Install Netbeans 7.0 จาก Ubuntu Software Center ไป แล้วมันลง Python Plug-in ไม่ได้ ผมจึง Uninstall แล้วโหลด Netbeans 8.0.2 พร้อม JDK 8 มาจากเว็บไซต์นี้ http://www.oracle.com/technetwork/articles/javase/jdk-netbeans-jsp-142931.html


หลังจากนั้น ผมก็ Install ด้วยวิธีจากเว็บไซต์นี้ http://ubuntuhandbook.org/index.php/2014/03/install-netbeans-ide-8-0-in-ubuntu-14-0413-1012-04/






และแล้ว ผมก็ Install เสร็จ





 จากนั้นผมก็ลง Python plugin จากเว็บนี้ https://blogs.oracle.com/geertjan/entry/python_in_netbeans_ide_81






เรียบร้อย :D



วันพุธที่ 26 สิงหาคม พ.ศ. 2558

Task : Python Plug-in for NetBeans

ก่อนอื่นเลย ผมก็ได้หา NetBeans ใน Ubuntu Software Center ดู ก็เจอเป็น Version 7.0.1 ผมจึงทำการ Install เรียบร้อย (แอบไปส่องของ Windows มา เป็น Version 8.0.x แล้ว


และนี่คือหน้าตาโปรแกรม NetBeans


จากนั้น ผมก็เลยลองไปหาวิธีลง Plug-in Python3 ใน NetBeans มา ก็เจอกับคลิปนี้


ผมจึงลองทำตามดู

เลือก Tool > Options แล้วเลือกแถบ Setting


กด Add แล้วใส่ข้อมูลดังนี้
- Name : Python
- URL : http://deadlock.netbeans.org/hudson/job/
­nbms-and-javadoc/lastStableBuild/artifac­t/nbbuild/nbms/updates.xml.gz
จากนั้นกด Ok


แต่ผลปรากฏว่า...


ERROR !!
ประมาณว่ามีปัญหากับ Proxy แต่ก็ลองแก้แล้ว ก็ยังมีปัญหาอยู่

สุดท้ายจึงกลับไปใช้ IDLE ตามเดิมก่อน

Python Practice : World cup

โจทย์จาก http://programming.in.th/task/rev2_problem.php?pid=0028

0028 : ฟุตบอลโลก (worldcup)
Problem type : Batch
Time limit : 1.0 second(s)
Memory limit : 32 megabyte(s)
ใน การแข่งขันฟุตบอลโลก 2010 ที่ประเทศแอฟริกาใต้ มีทีมที่เข้าร่วมแข่งขันทั้งหมด 32 ทีม การแข่งขันในรอบแรกจะแบ่งออกเป็น 8 กลุ่ม กลุ่มละ 4 ทีม ทีมในแต่ละกลุ่มจะทำการแข่งขันแบบพบกันหมด โดยในการแข่งขันแต่ละนัด ทีมที่ชนะจะได้ 3 คะแนน ทีมที่แพ้จะไม่ได้คะแนน แต่ถ้าเสมอกันก็จะได้คะแนนทีมละ 1 คะแนน หลังจากแข่งขันจบ ทีมที่ได้อันดับ 1 และอันดับ 2 ของแต่ละกลุ่ม จะได้ผ่านเข้าสู่รอบต่อไป ซึ่งการจัดอันดับทีมในแต่ละกลุ่มจะพิจารณาจากเกณฑ์ดังนี้

  1. ดูจากคะแนนที่ได้ ทีมใดได้คะแนนมากกว่าจะอยู่ในอันดับที่ดีกว่า
  2. หากเกณฑ์ในข้อ 1 ยังเท่ากัน ให้ดูจากจำนวนประตูที่ยิงได้ลบด้วยจำนวนประตูที่ถูกยิง ทีมใดได้มากกว่าก็จะอยู่ในอันดับที่ดีกว่า
  3. หากเกณฑ์ในข้อ 2 ยังเท่ากัน ดูจากจำนวนประตูที่ยิงได้ ทีมใดได้มากกว่าก็จะอยู่ในอันดับที่ดีกว่า
หลังจากที่คุณได้ดูการแข่งขันทุกคู่จนจบ คุณก็เกิดความสงสัยว่าแต่ละทีมได้คะแนนเท่าไร และได้อันดับเท่าไรในกลุ่ม

งานของคุณ
จงเขียนโปรแกรมเพื่อรับผลการแข่งขันของทีมในกลุ่มหนึ่ง และคำนวณหาคะแนนและอันดับในกลุ่มของแต่ละทีม

ข้อมูลนำเข้า
ใน 4 บรรทัดแรก บรรทัดที่ i (1 ≤ i ≤ 4) จะระบุชื่อทีมที่ i ซึ่งเป็นสตริงที่ประกอบด้วยตัวอักษรภาษาอังกฤษตัวพิมพ์ใหญ่หรือพิมพ์เล็ก เท่านั้น (ไม่มีเว้นวรรค) และจะมีความยาวไม่เกิน 20 ตัวอักษร

ในบรรทัดที่ 5 ถึงบรรทัดที่ 8 จะระบุจำนวนเต็มบรรทัดละ 4 ตัว โดยจำนวนเต็มตัวที่ j (1 ≤ j ≤ 4) ในบรรทัดที่ i+4 (1 ≤ i ≤ 4) จะแสดงถึงจำนวนประตูที่ทีมที่ i ยิงได้ ในนัดที่แข่งขันกับทีมที่ j ยกเว้นในกรณีที่ i = j จำนวนเต็มดังกล่าวจะมีค่าเป็นศูนย์เสมอ

การแข่งขันแต่ละนัดจะมีการยิงประตูเกิดขึ้นไม่เกิน 10 ประตู และรับประกันว่าจะไม่มีสองทีมใดที่เท่ากันหมดในเกณฑ์การจัดอันดับทั้ง 3 ข้อ

ข้อมูลส่งออก
มี 4 บรรทัด โดยในบรรทัดที่ i (1 ≤ i ≤ 4) แสดงชื่อทีมที่ได้อันดับที่ i ของกลุ่ม ตามด้วยคะแนนของทีมดังกล่าว

การให้คะแนน
40% ของข้อมูลทดสอบ จะไม่มีสองทีมใดที่ได้คะแนนเท่ากันเลย

ที่มา
การแข่งขัน IOI Thailand League เดือนกรกฏาคม 2553 โจทย์โดย: สุธี เรืองวิเศษ

ตัวอย่างข้อมูลนำเข้า ตัวอย่างข้อมูลส่งออก
Denmark
Netherlands
Cameroon
Japan
0 0 2 1
2 0 2 1
1 1 0 0
3 0 1 0
Netherlands 9
Japan 6
Denmark 3
Cameroon 0
Germany
Serbia
Australia
Ghana
0 0 4 1
1 0 1 0
0 2 0 1
0 1 1 0
Germany 6
Ghana 4
Australia 4
Serbia 3

Coding

#func for get TeamName
def getTeamNameList(total_team) :
    team_name_arrayList = ["" for x in range(total_team)]
    for currentTeam in range(total_team) :
        print("Team",currentTeam+1,end=" = ")
        #list.append(input(""))
        team_name_arrayList[currentTeam] = input("")
    return team_name_arrayList

#func for get Score for each Team
def getTeamScore(total_team) :
    team_score = [[0 for x in range(total_team)] for x in range(total_team)]
    for currentTeam in range(total_team) : #get score for each team
        print("Score Team",currentTeam+1,end=" = ")
        scoreList = input("").split()
        for vsTeam in range(total_team) :
            if currentTeam==vsTeam :
                team_score[currentTeam][vsTeam] = 0
            else :
                team_score[currentTeam][vsTeam] = int(scoreList[vsTeam])
    return team_score

#func for get Point for each Team
def getTeamPoint(team_score,total_team) :
    team_point = [[0 for x in range(total_team)] for x in range(total_team)]
    for currentTeam in range(total_team) :
        team_point[currentTeam][currentTeam] = 0
        for counter in range(1,total_team) :
            vsTeam = currentTeam + counter #team+1,+2,+3,+.. but not more than total_team
            if vsTeam >= total_team :
                vsTeam = vsTeam % total_team
            team_point[currentTeam][vsTeam] = calPoint(team_score[currentTeam][vsTeam],team_score[vsTeam][currentTeam])
    return team_point
   
#func for calcualte Point
def calPoint(currentTeamScore,vsTeamScore) :
    if currentTeamScore > vsTeamScore :
        return 3
    elif currentTeamScore == vsTeamScore :
        return 1
    else :
        return 0

#func for sort team by point , score
def sortAndPrintTeam(total_team,teamName,score,point) :
    totalPoint = calTotalPoint(total_team,point)
    totalGoal = calTotalGoal(total_team,score)
    totalGoalLost = calTotalGoalLost(total_team,score)
    totalGoalDiff = calGoalDiff(totalTeam,totalGoal,totalGoalLost)
    #sorting
    for i in range(total_team) :
        for j in range(i+1,total_team) :
            if (totalPoint[i]<totalPoint[j]) :
                tempName = teamName[i]
                tempPoint = totalPoint[i]
                tempGoal = totalGoal[i]
                tempGoalDiff = totalGoalDiff[i]
                teamName[i] = teamName[j]
                totalPoint[i] = totalPoint[j]
                totalGoal[i] = totalGoal[j]
                totalGoalDiff[i] = totalGoalDiff[j]
                teamName[j] = tempName
                totalPoint[j] = tempPoint
                totalGoal[j] = tempGoal
                totalGoalDiff[j] = tempGoalDiff
            elif (totalPoint[i]==totalPoint[j]) and (totalGoal[i]<totalGoal[j]) :
                tempName = teamName[i]
                tempPoint = totalPoint[i]
                tempGoal = totalGoal[i]
                tempGoalDiff = totalGoalDiff[i]
                teamName[i] = teamName[j]
                totalPoint[i] = totalPoint[j]
                totalGoal[i] = totalGoal[j]
                totalGoalDiff[i] = totalGoalDiff[j]
                teamName[j] = tempName
                totalPoint[j] = tempPoint
                totalGoal[j] = tempGoal
                totalGoalDiff[j] = tempGoalDiff
            elif (totalGoal[i]==totalGoal[j]) and (totalGoalDiff[i]<totalGoalDiff[j]) :
                tempName = teamName[i]
                tempPoint = totalPoint[i]
                tempGoal = totalGoal[i]
                tempGoalDiff = totalGoalDiff[i]
                teamName[i] = teamName[j]
                totalPoint[i] = totalPoint[j]
                totalGoal[i] = totalGoal[j]
                totalGoalDiff[i] = totalGoalDiff[j]
                teamName[j] = tempName
                totalPoint[j] = tempPoint
                totalGoal[j] = tempGoal
                totalGoalDiff[j] = tempGoalDiff
    #showing
    for currentTeam in range(total_team) :
        print(teamName[currentTeam]," ",totalPoint[currentTeam])
               
def calTotalPoint(total_team,point) :
    total_point = [0 for x in range(total_team)]
    for currentTeam in range(total_team) :
        for vsTeam in range(total_team) :
            total_point[currentTeam] = total_point[currentTeam] + point[currentTeam][vsTeam]
    return total_point

def calTotalGoal(total_team,score) :
    total_goal = [0 for x in range(total_team)]
    for currentTeam in range(total_team) :
        for vsTeam in range(total_team) :
            total_goal[currentTeam] = total_goal[currentTeam] + score[currentTeam][vsTeam]
    return total_goal

def calTotalGoalLost(total_team,score) :
    total_lost = [0 for x in range(total_team)]
    for currentTeam in range(total_team) :
        for vsTeam in range(total_team):
            total_lost[currentTeam] = total_lost[currentTeam] + score[vsTeam][currentTeam]
    return total_lost

def calGoalDiff(total_team,goal,lost) :
    diff = [0 for x in range(total_team)]
    for currentTeam in range(total_team) :
        diff[currentTeam] = goal[currentTeam] - lost[currentTeam]
    return diff

totalTeam = 4 #number of total team
teamNameList = getTeamNameList(totalTeam) #ArrayList for keep team
teamScore = getTeamScore(totalTeam) #array keep score [teamNumber][vsTeamNumber]
teamPoint = getTeamPoint(teamScore,totalTeam) #calculate score to point for each Team
sortAndPrintTeam(totalTeam,teamNameList,teamScore,teamPoint)

วันจันทร์ที่ 24 สิงหาคม พ.ศ. 2558

Python Practice : Grade Calculation Program

มาเริ่มศึกษา Python จากการทำโจทย์กันเลยดีกว่า

โจทย์จาก http://programming.in.th/task/rev2_problem.php?pid=0001


ในการเรียนวิชาคอมพิวเตอร์ ณ โรงเรียนแห่งหนึ่ง ใช้วิธีการเก็บคะแนนในรูปแบบของ
  • คะแนนเก็บ 30 คะแนน
  • คะแนนสอบกลางภาค 30 คะแนน
  • คะแนนสอบปลายภาค 40 คะแนน
รวมทั้งสิ้น 100 คะแนน หลังจากที่จบภาคการศึกษา ฝ่ายทะเบียนวัดผลของโรงเรียนต้องการให้อาจารย์ที่สอนวิชาคอมพิวเตอร์มาคีย์ คะแนนลงในระบบคอมพิวเตอร์ เพื่อจะได้ทราบถึงเกรดที่นักเรียนแต่ละคนควรจะได้ โดยใช้โปรแกรมเข้าช่วย แต่เนื่องจากว่าทางงานทะเบียนวัดผลนี้ยังไม่มีโปรแกรมใช้ (อาจเป็นเพราะเหตุเกิดเมื่อนานมาแล้ว) อาจารย์ฝ่ายทะเบียนวัดผลจึงมาขอให้คุณช่วยเขียนโปรแกรมให้หน่อย

โจทย์
ให้นักเรียนเขียนโปรแกรมตัดเกรดเพื่อช่วยงานทะเบียนวัดผลของโรงเรียนแห่งนี้

ข้อมูลนำเข้า
บรรทัดแรก จำนวนเต็มบวก a (0 <= a <= 30) เป็นคะแนนเก็บของนักเรียน
บรรทัดที่สอง จำนวนเต็มบวก b (0 <= b <= 30) เป็นคะแนนสอบกลางภาคของนักเรียน
บรรทัดที่สาม จำนวนเต็มบวก c (0 <= c <= 40) เป็นคะแนนสอบปลายภาคของนักเรียน

ข้อมูลส่งออก
บรรทัดแรก เป็นอักขระใช้แทนเกรดของนักเรียน โดยที่ใช้อักขระตามเงื่อนไขดังต่อไปนี้
  • A ถ้าคะแนนรวมของนักเรียนอยู่ในช่วง 80 - 100
  • B+ ถ้าคะแนนรวมของนักเรียนอยู่ในช่วง 75 - 79
  • B ถ้าคะแนนรวมของนักเรียนอยู่ในช่วง 70 - 74
  • C+ ถ้าคะแนนรวมของนักเรียนอยู่ในช่วง 65 - 69
  • C ถ้าคะแนนรวมของนักเรียนอยู่ในช่วง 60 - 64
  • D+ ถ้าคะแนนรวมของนักเรียนอยู่ในช่วง 55 - 59
  • D ถ้าคะแนนรวมของนักเรียนอยู่ในช่วง 50 - 54
  • F ถ้าคะแนนรวมของนักเรียนอยู่ในช่วง 0 - 49
และนี่ คือ Code

print "Grade Calculation Program"

work = input("Work score = ") #first input
while (work < 0) or (work > 30) : #check outrange
    print "Error please reinput"
    work = input("Work score = ")
   
mid = input("Midterm score = ") #first input
while (mid < 0) or (mid > 30) : #check outrange
    print "Error Please Reinput"
    mid = input("Mideterm score = ")
   
final = input("Final score = ") #first input
while (final<0) or (final>45) : #check outrange
    print "Error Please Reinput"
    final = input("Final score = ")

total = work + mid + final

#grade calculation
if total >= 80 :
    grade = "A"
elif total >= 75 :
    grade = "B+"
elif total >= 70 :
    grade = "B"
elif total >= 65 :
    grade = "C+"
elif total >= 60 :
    grade = "C"
elif total >= 55 :
    grade = "D+"
elif total >= 50 :
    grade = "D"
else :
    grade = "F"

#display output
print "Your grade =",grade

 

 
และนี่คือ Output ที่แสดงออกมา

Grade Calculation Program
Work score = 31
Error please reinput
Work score = 25
Midterm score = 30
Final score = 35
Your grade = A



Python : Starting with Python

ก่อนเราจะเริ่มทำอะไรซักอย่าง ถ้าเราไม่ทราบถึงข้อดีและข้อเสียของสิ่งที่เราจะทำ เราก็จะไม่สามารถใช้งานมันได้ถึงประสิทธิภาพสูงสุด ผมจึงไล่อ่านจากหลายๆ Website ดังนี้

http://pythonthaidev.blogspot.com/2012/01/python.html
http://www.ayarafun.com/2009/08/basic-python-programming-part1/
http://python.cmsthailand.com/basic_python.html

ผมจึงสรุปมาได้ดังนี้

ข้อดี
- ง่ายต่อการศึกษา เนื่องจากมี Syntax ที่ง่าย
- พัฒนาโปรแกรมได้ไว เนื่องจากมี Syntax ที่ง่าย
- Cross platform สามารถรันได้ในหลากหลาย OS
- เป็นภาษา Script จึงทำให้ไม่ต้องเสียเวลา Compile เนื่องจากมี Interpreter แปลงคำสั่งแทน
- เป็น Open Source License จึงไม่เสียค่าลิขสิทธิ์ในการนำไปใช้งาน
- เป็น Server-side script ทำให้มีความปลอดภัยสูง 
- ใช้พัฒนา Web Service ได้

ข้อเสีย
- ทำงานช้า เนื่องจากมี Interpreter ทำให้ต้องแปลงคำสั่งทีละบรรทัด
- เกิด Runtime error ได้ง่าย เนื่องจากไม่มีการ Compile

หลังจากรู้ข้อดีข้อเสียกันแล้ว เรามาเริ่มกันเลย

ผมจึงเปิด Ubuntu Software Center ขึ้นมา แล้วก็ search ไปว่า "Python IDE"

ผมจึงเลือกลง IDLE ที่ใช้ Python 2.7

นี่คือหน้าตาของโปรแกรม



Ubuntu's Problem : Slow Internet

หลังจากใช้ Ubuntu มาได้สักพัก ก็เริ่มรู้สึกได้ ว่าทำไม Internet ช้าจัง เลยลอง Search google ดู

จนมาเจอกับ link นี้ https://rafaiel.wordpress.com/2011/09/03/แก้ปัญหา-internet-ช้า-บน-ubuntu/

ในเว็บ ได้บอกวิธีแก้ไขไว้ว่า ให้เปิด Terminal ขึ้นมา แล้วพิมตามนี้

sudo apt-get install ethtool
sudo ethtool -s eth0 speed 100 duplex full autoneg on

เมื่อทำแล้ว ก็จะได้หน้าตาแบบนี้




























และแล้ว ก็สามารถแก้ปัญหา Internet ช้าได้แล้ว :D

Task : Install Ubuntu (Update 25/08/58)

หลังจากที่ลง Windows เสร็จแล้ว ผมก็ได้โหลดไฟล์ .iso ที่ใช้สำหรับ Install Ubuntu จากเว็บ http://www.ubuntu.com/download/desktop

 หลังจากกด Download ก็จะมาถึงหน้าต่างถัดมา ที่ตอนแรกผมก็งง


แต่พอดูดีๆแล้ว อ๋อ !! เขาถามความสมัครใจ ว่าต้องการจะบริจาคเท่าไร ตามจิตศรัทธา แน่นอนครับ คนใจบุญแบบผม บริจาคไป 0 ดอลล่าร์ครับ =w=

และแล้วผมก็ Download ได้ ไฟล์ iso สำหรับ Install Ubuntu มา


ผมจึงใช้โปรแกรม Rufus เพื่อ burn ไฟล์ iso ลง Flashdrive


หลังจากนั้น ผมก็ใช้ Flashdrive ที่ผมเตรียมไว้เรียบร้อยไปลง Ubuntu ใน Partition ที่ผมเตรียมไว้จากครั้งที่แล้ว

โดยตอน Install ผมไม่ได้เลือก Install along side windows 8 แต่ผมเลือก Something else เพื่อเลือก Partition ที่ผมเตรียมไว้

นี่คือรูปตัวอย่างตอนลงเล็กน้อย ที่ถ่ายไว้ด้วยกล้องมือถือ



หลังจาก Install เสร็จ ก็จะ Restart เข้า Windows ก่อน เพื่อมา Setting การ Boot ให้สามารถเลือก Boot ได้ว่าจะ Boot Windows หรือ Ubuntu โดยโปรแกรม EasyBCD

เปิดโปรแกรมขึ้นมา กด Add New Entry แล้ว Setting ตามภาพ แล้วกด Add Entry


เพียงเท่านี้ก็เรียบร้อย สามารถจัดการกับการ Boot ได้อย่างง่ายดาย

และในที่สุด เราก็ได้สัมผัสกับ Ubuntu สักที เย้ๆ



วันพุธที่ 19 สิงหาคม พ.ศ. 2558

Task : Install Ubuntu (Update 20/08/15)

ได้ลง Windows ใหม่เรียบร้อยแล้ว

โดย Windows ที่ลง เป็น Windows 8.1 Pro ที่ใช้ Serial Key เป็นของ Dreamspark


ซึ่งในขณะลง ก็มีปัญหามากมายเกิดขึ้น

ปัญหา - Flashdrive ที่ใช้สำหรับลง Windows Boot ไม่ติด
จากคราวที่แล้ว ที่ได้นำไฟล์ ISO ของ Windows นำไปใส่ Flashdrive ด้วยโปรแกรม Windows 7 USB/DVD Download Tool แต่ปรากฏว่าไม่สามารถ Boot ติด
ทางแก้ปัญหา - ใช้โปรแกรม Refus แทน เป็นโปรแกรมที่จะทำการ Format Flashdrive และนำไฟล์ ISO มาทำเป็น Bootable USB โดยอัตโนมัติ

ปัญหา - 1GB = ?? MB
ตอน Install Windows ผมได้ Format แล้วแบ่ง Partition ใหม่ แล้วเกิดปัญหาที่ว่า ไม่สามารถแบ่งขนาดของ Partition ได้ตามต้องการ เนื่องจากไม่ทราบว่า 1GB เท่ากับกี่ MB
ทางแก้ปัญหา - เปิด Smartphone search หา จึงทราบว่า 1024MB = 1GB

แต่สุดท้ายแล้วทั้งนี้ทั้งนั้น ก็ยังไม่ได้ Install Ubuntu
 
 
 

วันจันทร์ที่ 17 สิงหาคม พ.ศ. 2558

Task : Install Ubuntu

เนื่องจากปกติ ผมใช้ Windows เป็นหลัก (Windows 8.1) และ PC ที่บ้าน ไม่ได้ใช้แต่เพียงผมคนเดียว และเกมออนไลน์หลายเกมยังไม่รองรับ Linux จึงทำให้ไม่สะดวกในการใช้ Ubuntu แต่เพียงอย่างเดียว

ผมจึงค้นหาวิธีในการที่จะสามารถใช้ได้ทั้ง Windows และ Ubuntu ใน PC เครื่องเดียวกัน

จนผมมาเจอกับบทความนี้ ผมจึงใช้ 2 บทความนี้อ้างอิงประกอบ
การติดตั้ง Ubuntu ร่วมกับ Windows
วิธีการลง Windows7 + Ubuntu 12.04 สำหรับผู้ที่สนใจศึกษา

ไหนๆจะลง Ubuntu แล้ว ก็เลยกะจะขอลง Windows ใหม่อีกสักรอบก่อน เนื่องจากติดไวรัสและเป็น Windows แบบ Crack จึงจะลง Windows 8.1 อีกครั้งนึง เปลี่ยนจากที่เคยใช้ 64-bits อยู่เป็น 32-bits และใช้ Serial key ของ Dreamspark เพื่อใช้ในการ Activate

แต่ผมยังไม่สามารถเริ่มลงได้ในทันที เนื่องจากยังไม่ได้ Backup ข้อมูลก่อน

และนี่คือสองสิ่งที่ผมต้องการจะ Backup



คือ Folder Aruk888 ที่เก็บไฟล์ส่วนตัว และ Folder Anime ที่เก็บอนิเมะสุดรักสุดหวงอย่างเช่น Steins;Gate , Kyoukai no Kanata , Plastic Memories , Gekkan Shoujo Nozaki-kun

เนื่องจากผมไม่มี External Harddisk ที่จะใช้ในการ Backup ข้อมูลเหล่านี้ ผมจึงหาวิธีในการ Backup โดยการเปิด PC ทิ้งไว้ แล้ว Upload ลง Google Drive



แต่เนื่องจากเหตุใดไม่ทราบ เมื่อผมกลับมาถึงบ้าน พบว่าผมสามารถ Upload ได้แค่เพียง Folder Aruk888 เท่านั้น ส่วน Folder Anime นั้น ไม่ได้ถูก Upload
(จากเบาะแสที่ว่ากลับมาถึงบ้านแล้วพบว่า PC ดับอยู่ พร้อมทั้งสวิทช์ที่ปลั๊กพ่วงถูกปิดอยู่ คาดว่าแม่ผมคงจะหวังดี คิดว่าผมลืมปิดคอม จึงทำการปิดให้ โดยการปิดสวิทช์ที่ปลั๊กพ่วง)

แต่ไม่เป็นไร ไว้เดี๋ยวผมจะ Backup Folder Anime อีกรอบ แต่หากยังไม่สำเร็จอีก ผมคงต้องทำใจสูญเสียมันไป #ร้องไห้หนักมาก

ต่อมา ก่อนผมจะลง Windows ผมต้องมีตัว Install ก่อน แต่เนื่องจาก PC ของผมไม่มีช่องใส่ CD/DVD-ROM ผมจึงจำเป็นที่จะต้องทำ Flash Drive เพื่อใช้สำหรับลง Windows

โดยการทำนั้น ผมใช้ Windows Installation Media Creation Tool ในการ Download File ISO ขึ้นมา เพื่อใช้ในการทำ Flash Drive เพื่อใช้สำหรับลง Windows


ต่อจากนั้น ผมได้นำ File ISO ที่ Download มา มาทำเป็น Flash Drive ที่สามารถใช้ในการลง Windows ได้ โดยใช้ Windows 7 USB/DVD Download Tool


ถึงแม้ว่าชื่อจะเป็น Windows 7 USB/DVD Download Tool ก็ตาม แต่ผมก็คิดว่าสามารถใช้กับ Windows 8.1 ได้

แต่เนื่องจากในตอนนี้ ผมยังไม่ได้ทำการ Backup Folder Anime จึงทำให้ผมไม่สามารถที่จะลง Windows ใหม่ได้ จึงทำให้จบกระบวนการแต่เพียงเท่านี้ก่อน

หากมีการดำเนินการลง Windows ใหม่ และลง Ubuntu แล้ว จะมาอัพเดทต่อไป

Task : Practice touch typing

Task : Practice touch typing (target 50WPM?)

จากที่ได้ไปฝึกพิมพ์สัมผัสมา โดยใช้เว็บ http://play.typeracer.com/ ในการฝึกพิมพ์สัมผัส

ล่าสุด สามารถพิมพ์ได้ โดยมีค่าเฉลี่ยอยู่ที่ 54.2WPM ถือว่าเกินกว่าเป้าหมายแล้ว แต่ก็ยังคงจะฝึกพิมพ์สัมผัสให้เร็วขึ้นต่อไป