Commits

John Chandler committed 4ef0cd4

Added kata 4, solution 2 and data file

Comments (0)

Files changed (2)

kata4/football.dat

+Source <a
+href="http://sunsite.tut.fi/rec/riku/soccer_data/tab/93_94/table.eng0.01_02.html">sunsite.tut.fi/rec/riku/soccer_data/tab/93_94/table.eng0.01_02.html</a>
+
+<pre>
+       Team            P     W    L   D    F      A     Pts
+    1. Arsenal         38    26   9   3    79  -  36    87
+    2. Liverpool       38    24   8   6    67  -  30    80
+    3. Manchester_U    38    24   5   9    87  -  45    77
+    4. Newcastle       38    21   8   9    74  -  52    71
+    5. Leeds           38    18  12   8    53  -  37    66
+    6. Chelsea         38    17  13   8    66  -  38    64
+    7. West_Ham        38    15   8  15    48  -  57    53
+    8. Aston_Villa     38    12  14  12    46  -  47    50
+    9. Tottenham       38    14   8  16    49  -  53    50
+   10. Blackburn       38    12  10  16    55  -  51    46
+   11. Southampton     38    12   9  17    46  -  54    45
+   12. Middlesbrough   38    12   9  17    35  -  47    45
+   13. Fulham          38    10  14  14    36  -  44    44
+   14. Charlton        38    10  14  14    38  -  49    44
+   15. Everton         38    11  10  17    45  -  57    43
+   16. Bolton          38     9  13  16    44  -  62    40
+   17. Sunderland      38    10  10  18    29  -  51    40
+   -------------------------------------------------------
+   18. Ipswich         38     9   9  20    41  -  64    36
+   19. Derby           38     8   6  24    33  -  63    30
+   20. Leicester       38     5  13  20    30  -  64    28
+</pre>
+"""
+http://codekata.pragprog.com/2007/01/kata_four_data_.html
+
+The file football.dat contains the results from the English Premier League for 2001/2. The columns labeled 'F' and 'A' contain the total
+number of goals scored for and against each team in that season (so Arsenal scored 79 goals against opponents, and had 36 goals scored
+against them). Write a program to print the name of the team with the smallest difference in 'for' and 'against' goals. 
+"""
+
+import re
+
+WHITESPACE_RE = re.compile( "\s+" )
+
+TEAM_NAME     = 2
+GOALS_FOR     = 7
+GOALS_AGAINST = 9
+
+
+def parse_file( filename ):
+    """ Parses a football.dat style data file """
+    data_file = open( filename, "r" )
+
+    data = []
+    for line in data_file:
+        columns = WHITESPACE_RE.split( line )
+        if len(columns) == 12:
+            data.append( columns )
+
+    return data
+
+
+
+def print_team_with_smallest_goal_difference( data ):
+    """ Print name of team with smallest goal difference """
+    smallest_team      = None
+    smallest_goal_diff = None
+
+    for row in data:
+        goal_diff = abs( int(row[GOALS_FOR]) - int(row[GOALS_AGAINST]) )
+
+        if goal_diff < smallest_goal_diff or smallest_goal_diff is None:
+            smallest_team      = row[TEAM_NAME]
+            smallest_goal_diff = goal_diff
+
+    print smallest_team
+
+
+if __name__ == "__main__":
+    data = parse_file( "football.dat" )
+    
+    print_team_with_smallest_goal_difference( data )