Ruby Quiz - Challenge #3 - Read the English Premier League (EPL) Standings Table from a Web Page

Gerald Bauer <[email protected]>
Newsgroups gmane.comp.lang.ruby.general
Message-ID <CAAxEZd94FDi8QLbXw-XvDHTbEUr=UruMzZUDrot_bEB8tRHw6g@mail.gmail.com>
Hello,

  Let's honor the tradition and post a new Ruby Quiz [1] every Friday.
Here we go:

  Challenge #3 - Read the English Premier League (EPL) Standings Table
from a Web Page  [2]

Let's read the English Premier League (EPL) Standings Table
from a web page. Let's use the British Broadcasting Corp (BBC) page @
bbc.com/sport/football/premier-league/table [3]

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

def parse( html )
  # ...
end

Start from scratch or, yes, use any library / gem you can find.
Scrap the standings table (as an array of array of string values) e.g.:

[["1", "Man", "City", "10", "8", "2", "0", "27", "3", "24", "26"],
 ["2", "Liverpool", "10", "8", "2", "0", "20", "4", "16", "26"],
 ["3", "Chelsea", "10", "7", "3", "0", "24", "7", "17", "24"],
 ["4", "Arsenal", "10", "7", "1", "2", "24", "13", "11", "22"],
 ["5", "Tottenham", "10", "7", "0", "3", "16", "8", "8", "21"],
 ["6", "Bournemouth", "10", "6", "2", "2", "19", "12", "7", "20"],
 ["7", "Watford", "10", "6", "1", "3", "16", "12", "4", "19"],
 ["8", "Man", "Utd", "10", "5", "2", "3", "17", "17", "0", "17"],
 ["9", "Everton", "10", "4", "3", "3", "16", "14", "2", "15"],
 ["10", "Wolves", "10", "4", "3", "3", "9", "9", "0", "15"],
 ["11", "Brighton", "10", "4", "2", "4", "11", "13", "-2", "14"],
 ["12", "Leicester", "10", "4", "1", "5", "16", "16", "0", "13"],
 ["13", "West", "Ham", "10", "2", "2", "6", "9", "15", "-6", "8"],
 ["14", "Crystal", "Palace", "10", "2", "2", "6", "7", "13", "-6", "8"],
 ["15", "Burnley", "10", "2", "2", "6", "10", "21", "-11", "8"],
 ["16", "Southampton", "10", "1", "4", "5", "6", "14", "-8", "7"],
 ["17", "Cardiff", "10", "1", "2", "7", "9", "23", "-14", "5"],
 ["18", "Fulham", "10", "1", "2", "7", "11", "28", "-17", "5"],
 ["19", "Newcastle", "10", "0", "3", "7", "6", "14", "-8", "3"],
 ["20", "Huddersfield", "10", "0", "3", "7", "4", "21", "-17", "3"]]

from the html table that you can find inside the web page's source.


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

require 'minitest/autorun'


class RubyQuizTest < MiniTest::Test

  def test_parse

    #######
    # Pos Team P W D L F A GD Pts

    lines =<<TXT
    1  Man City 10 8 2 0 27 3 24 26
    2  Liverpool 10 8 2 0 20 4 16 26
    3  Chelsea 10 7 3 0 24 7 17 24
    4  Arsenal 10 7 1 2 24 13 11 22
    5  Tottenham 10 7 0 3 16 8 8 21
    6  Bournemouth 10 6 2 2 19 12 7 20
    7  Watford 10 6 1 3 16 12 4 19
    8  Man Utd 10 5 2 3 17 17 0 17
    9  Everton 10 4 3 3 16 14 2 15
    10  Wolves 10 4 3 3 9 9 0 15
    11  Brighton 10 4 2 4 11 13 -2 14
    12  Leicester 10 4 1 5 16 16 0 13
    13  West Ham 10 2 2 6 9 15 -6 8
    14  Crystal Palace 10 2 2 6 7 13 -6 8
    15  Burnley 10 2 2 6 10 21 -11 8
    16  Southampton 10 1 4 5 6 14 -8 7
    17  Cardiff 10 1 2 7 9 23 -14 5
    18  Fulham 10 1 2 7 11 28 -17 5
    19  Newcastle 10 0 3 7 6 14 -8 3
    20  Huddersfield 10 0 3 7 4 21 -17 3
TXT

    table = []
    lines.each_line {|line| table << line.split }
    pp table

    assert_equal table, parse( File.read( "./pages/bbc.html" ))

  end # method test_parse
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"
page, see pages/bbc.html in the ruby quiz repo.


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

[1] https://github.com/planetruby/quiz
[2] https://github.com/planetruby/quiz/tree/master/003
[3] https://www.bbc.com/sport/football/premier-league/table

Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-talk>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.