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

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)

ไม่มีความคิดเห็น:

แสดงความคิดเห็น