回答編集履歴
4
parse_ranking_number の実装行数を削減
    
        answer	
    CHANGED
    
    | @@ -22,28 +22,14 @@ | |
| 22 22 | 
             
            end
         | 
| 23 23 |  | 
| 24 24 | 
             
            # 順位の全角数字 (1 〜 9位) を半角に変換
         | 
| 25 | 
            -
            def parse_ranking_number( | 
| 25 | 
            +
            def parse_ranking_number(char)
         | 
| 26 | 
            +
              trigger_pattern = %w[1 2 3 4 5 6 7 8 9]
         | 
| 27 | 
            +
             | 
| 26 | 
            -
              case  | 
| 28 | 
            +
              case char
         | 
| 27 | 
            -
              when  | 
| 29 | 
            +
              when *trigger_pattern
         | 
| 28 | 
            -
                1
         | 
| 29 | 
            -
             | 
| 30 | 
            +
                trigger_pattern.index(char).succ
         | 
| 30 | 
            -
                2
         | 
| 31 | 
            -
              when '3'
         | 
| 32 | 
            -
                3
         | 
| 33 | 
            -
              when '4'
         | 
| 34 | 
            -
                4
         | 
| 35 | 
            -
              when '5'
         | 
| 36 | 
            -
                5
         | 
| 37 | 
            -
              when '6'
         | 
| 38 | 
            -
                6
         | 
| 39 | 
            -
              when '7'
         | 
| 40 | 
            -
                7
         | 
| 41 | 
            -
              when '8'
         | 
| 42 | 
            -
                8
         | 
| 43 | 
            -
              when '9'
         | 
| 44 | 
            -
                9
         | 
| 45 31 | 
             
              else
         | 
| 46 | 
            -
                 | 
| 32 | 
            +
                char.to_i
         | 
| 47 33 | 
             
              end
         | 
| 48 34 | 
             
            end
         | 
| 49 35 |  | 
3
コメント内容の修正
    
        answer	
    CHANGED
    
    | @@ -13,7 +13,7 @@ | |
| 13 13 |  | 
| 14 14 | 
             
            html = Nokogiri::HTML(html)
         | 
| 15 15 |  | 
| 16 | 
            -
            # 順位, 大学名, 在籍者数を | 
| 16 | 
            +
            # 正規表現で、順位, 大学名, 在籍者数を含む文字列を抜き出し
         | 
| 17 17 | 
             
            def extract_universities(html)
         | 
| 18 18 | 
             
              regexp = /([0-91234567890]{1,3}位:[○ ● ▲ ◆][^)]+))/
         | 
| 19 19 | 
             
              _, *data = html.text.split(regexp)
         | 
2
コードの処理について コメントを追記
    
        answer	
    CHANGED
    
    | @@ -13,6 +13,7 @@ | |
| 13 13 |  | 
| 14 14 | 
             
            html = Nokogiri::HTML(html)
         | 
| 15 15 |  | 
| 16 | 
            +
            # 順位, 大学名, 在籍者数を正規表現で抜き出し
         | 
| 16 17 | 
             
            def extract_universities(html)
         | 
| 17 18 | 
             
              regexp = /([0-91234567890]{1,3}位:[○ ● ▲ ◆][^)]+))/
         | 
| 18 19 | 
             
              _, *data = html.text.split(regexp)
         | 
| @@ -20,6 +21,7 @@ | |
| 20 21 | 
             
              data
         | 
| 21 22 | 
             
            end
         | 
| 22 23 |  | 
| 24 | 
            +
            # 順位の全角数字 (1 〜 9位) を半角に変換
         | 
| 23 25 | 
             
            def parse_ranking_number(str)
         | 
| 24 26 | 
             
              case str
         | 
| 25 27 | 
             
              when '1'
         | 
| @@ -45,6 +47,7 @@ | |
| 45 47 | 
             
              end
         | 
| 46 48 | 
             
            end
         | 
| 47 49 |  | 
| 50 | 
            +
            # 順位, 大学名, 在籍者数を含む文字列をそれら要素ごとに分解して Hash に纏める
         | 
| 48 51 | 
             
            def parse_to_hash(universities_info_list)
         | 
| 49 52 | 
             
              universities_info_list.map do |x|
         | 
| 50 53 | 
             
                ranking, university_name = x.split(/位:[○ ● ▲ ◆]/)
         | 
1
修正: nokogiri の require 行を追記
    
        answer	
    CHANGED
    
    | @@ -3,6 +3,8 @@ | |
| 3 3 | 
             
            正規表現で巧く抜き出してあげると、「ランキング」「大学名」「在籍学生数」の3要素を Hash としてまとめることもできると思います
         | 
| 4 4 |  | 
| 5 5 | 
             
            ```ruby
         | 
| 6 | 
            +
            require 'nokogiri'
         | 
| 7 | 
            +
             | 
| 6 8 | 
             
            html = <<EOF
         | 
| 7 9 | 
             
            <div class="Article__content">...
         | 
| 8 10 | 
             
            ...
         | 
