Find file History
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
..
Failed to load latest commit information.
datasets
README.md
test.rb

README.md

Ruby Quiz - Challenge #9 - Tally Up / Calculate the Standings Table for the English Premier League 2018/19 Season - And the Winner is... Liverpool? Manchester City?

Let's tally up / calculate the standings table for the English Premier League (EPL). Let's use the football.csv datasets for last year's 2017/18 and this year's ongoing 2018/19 season.

The challenge: Code a tallyup method that passes the RubyQuizTest :-).

def tallyup( matches )
  # ...
end

Start from scratch or, yes, use any library / gem you can find. From the matches read in from the 2018/19 season dataset and passed along (as an array of array of string values) e.g.:

[["Manchester United FC", "2-1", "Leicester City FC"],
 ["AFC Bournemouth", "2-0", "Cardiff City FC"],
 ["Fulham FC", "0-2", "Crystal Palace FC"],
 ["Huddersfield Town AFC", "0-3", "Chelsea FC"],
 ["Newcastle United FC", "1-2", "Tottenham Hotspur FC"],
 ["Watford FC", "2-0", "Brighton & Hove Albion FC"],
 ["Wolverhampton Wanderers FC", "2-2", "Everton FC"],
 ["Arsenal FC", "0-2", "Manchester City FC"],
 ["Liverpool FC", "4-0", "West Ham United FC"],
 ["Southampton FC", "0-0", "Burnley FC"],
 ["Cardiff City FC", "0-0", "Newcastle United FC"],
 ["Chelsea FC", "3-2", "Arsenal FC"],
 ["Everton FC", "2-1", "Southampton FC"],
 ["Leicester City FC", "2-0", "Wolverhampton Wanderers FC"],
 ["Tottenham Hotspur FC", "3-1", "Fulham FC"],
 ["West Ham United FC", "1-2", "AFC Bournemouth"],
 ["Brighton & Hove Albion FC", "3-2", "Manchester United FC"],
 ["Burnley FC", "1-3", "Watford FC"],
 ["Manchester City FC", "6-1", "Huddersfield Town AFC"],
 ["Crystal Palace FC", "0-2", "Liverpool FC"],
 #...
]

build the standings table (as an array of array of values) e.g.:

[["Liverpool FC", 17, 14, 3, 0, 37, 7, 45],
 ["Manchester City FC", 17, 14, 2, 1, 48, 10, 44],
 ["Tottenham Hotspur FC", 17, 13, 0, 4, 31, 16, 39],
 ["Chelsea FC", 17, 11, 4, 2, 35, 14, 37],
 ["Arsenal FC", 17, 10, 4, 3, 37, 23, 34],
 ["Manchester United FC", 17, 7, 5, 5, 29, 29, 26],
 ["Wolverhampton Wanderers FC", 17, 7, 4, 6, 19, 19, 25],
 ["Everton FC", 17, 6, 6, 5, 24, 22, 24],
 ["West Ham United FC", 17, 7, 3, 7, 25, 25, 24],
 ["Watford FC", 17, 7, 3, 7, 23, 25, 24],
 ["AFC Bournemouth", 17, 7, 2, 8, 25, 28, 23],
 ["Leicester City FC", 17, 6, 4, 7, 21, 21, 22],
 ["Brighton & Hove Albion FC", 17, 6, 3, 8, 20, 24, 21],
 ["Newcastle United FC", 17, 4, 4, 9, 14, 22, 16],
 ["Crystal Palace FC", 17, 4, 3, 10, 14, 23, 15],
 ["Cardiff City FC", 17, 4, 2, 11, 17, 33, 14],
 ["Southampton FC", 17, 2, 6, 9, 16, 32, 12],
 ["Burnley FC", 17, 3, 3, 11, 15, 33, 12],
 ["Huddersfield Town AFC", 17, 2, 4, 11, 10, 28, 10],
 ["Fulham FC", 17, 2, 3, 12, 16, 42, 9]]

Note the expected items in the standings table line are:

  • Team Name e.g. Liverpool FC
  • Played e.g. 17
  • Won e.g. 14
  • Drawn / Tied e.g. 3
  • Lost e.g. 0
  • Goals for e.g. 37
  • Goals against e.g. 7
  • Points e.g. 45 (+3 for win, +1/+1 each team for draw/tie)

To qualify for solving the code challenge / puzzle you must pass the test:

require 'minitest/autorun'


def tallyup( matches )
  ## ...
end


class RubyQuizTest < MiniTest::Test

  def test_tallyup_2018_19
    standings = [["Liverpool FC",               17, 14, 3,  0, 37,  7, 45],
                 ["Manchester City FC",         17, 14, 2,  1, 48, 10, 44],
                 ["Tottenham Hotspur FC",       17, 13, 0,  4, 31, 16, 39],
                 ["Chelsea FC",                 17, 11, 4,  2, 35, 14, 37],
                 ["Arsenal FC",                 17, 10, 4,  3, 37, 23, 34],
                 ["Manchester United FC",       17,  7, 5,  5, 29, 29, 26],
                 ["Wolverhampton Wanderers FC", 17,  7, 4,  6, 19, 19, 25],
                 ["Everton FC",                 17,  6, 6,  5, 24, 22, 24],
                 ["West Ham United FC",         17,  7, 3,  7, 25, 25, 24],
                 ["Watford FC",                 17,  7, 3,  7, 23, 25, 24],
                 ["AFC Bournemouth",            17,  7, 2,  8, 25, 28, 23],
                 ["Leicester City FC",          17,  6, 4,  7, 21, 21, 22],
                 ["Brighton & Hove Albion FC",  17,  6, 3,  8, 20, 24, 21],
                 ["Newcastle United FC",        17,  4, 4,  9, 14, 22, 16],
                 ["Crystal Palace FC",          17,  4, 3, 10, 14, 23, 15],
                 ["Cardiff City FC",            17,  4, 2, 11, 17, 33, 14],
                 ["Southampton FC",             17,  2, 6,  9, 16, 32, 12],
                 ["Burnley FC",                 17,  3, 3, 11, 15, 33, 12],
                 ["Huddersfield Town AFC",      17,  2, 4, 11, 10, 28, 10],
                 ["Fulham FC",                  17,  2, 3, 12, 16, 42,  9]]

     assert_equal standings, tallyup( read_matches("./datasets/2018-19.csv"))
  end # method test_tallyup_2018_19

  def test_tallyup_2017_18
    standings = [["Manchester City FC",        38, 32,  4,  2, 106, 27, 100],
                 ["Manchester United FC",      38, 25,  6,  7,  68, 28,  81],
                 ["Tottenham Hotspur FC",      38, 23,  8,  7,  74, 36,  77],
                 ["Liverpool FC",              38, 21, 12,  5,  84, 38,  75],
                 ["Chelsea FC",                38, 21,  7, 10,  62, 38,  70],
                 ["Arsenal FC",                38, 19,  6, 13,  74, 51,  63],
                 ["Burnley FC",                38, 14, 12, 12,  36, 39,  54],
                 ["Everton FC",                38, 13, 10, 15,  44, 58,  49],
                 ["Leicester City FC",         38, 12, 11, 15,  56, 60,  47],
                 ["Newcastle United FC",       38, 12,  8, 18,  39, 47,  44],
                 ["Crystal Palace FC",         38, 11, 11, 16,  45, 55,  44],
                 ["AFC Bournemouth",           38, 11, 11, 16,  45, 61,  44],
                 ["West Ham United FC",        38, 10, 12, 16,  48, 68,  42],
                 ["Watford FC",                38, 11,  8, 19,  44, 64,  41],
                 ["Brighton & Hove Albion FC", 38,  9, 13, 16,  34, 54,  40],
                 ["Huddersfield Town AFC",     38,  9, 10, 19,  28, 58,  37],
                 ["Southampton FC",            38,  7, 15, 16,  37, 56,  36],
                 ["Swansea City AFC",          38,  8,  9, 21,  28, 56,  33],
                 ["Stoke City FC",             38,  7, 12, 19,  35, 68,  33],
                 ["West Bromwich Albion FC",   38,  6, 13, 19,  31, 56,  31]]

    assert_equal standings, tallyup( read_matches("./datasets/2017-18.csv" ))
  end # method test_tallyup_2017_18
end # class RubyQuizTest

Post your code snippets on the "official" Ruby Quiz Channel, that is, the ruby-talk mailing list.

Note: For easy reference and testing you can use the "local" datasets, see datasets.

Bonus: You're welcome to use a different dataset or a different football league.