class UVaTools::Problem

Public Class Methods

new(array) click to toggle source
# File lib/uva-tools/problem.rb, line 27
def initialize(array)
  @info = array
end

Public Instance Methods

accepted() click to toggle source
# File lib/uva-tools/problem.rb, line 56
def accepted
  @info[18]
end
dacu() click to toggle source
# File lib/uva-tools/problem.rb, line 60
def dacu
  @info[3]
end
download() click to toggle source
# File lib/uva-tools/problem.rb, line 72
def download
  unless downloaded?
    FileUtils::mkdir_p dir_name
    Dir.chdir(dir_name) do
      uri = URI("https://uva.onlinejudge.org/external/#{number/100}/#{number}.html")
      source = Net::HTTP.get(uri)
      if source.include? "URL=p#{number}.pdf"
        File.open("#{number.to_s}.pdf", 'w') do |pdf|
          pdf.write open("https://uva.onlinejudge.org/external/#{number/100}/p#{number}.pdf").read
        end
      else
        File.open("#{number.to_s}.html", 'w') { |f| f.write source }

        source.scan(/#{number}img\d{1,3}\.[a-zA-Z]+/).uniq.each do |picture|
          File.open(picture, 'wb') do |pic_file|
            pic_file.write open("https://uva.onlinejudge.org/external/#{number/100}/#{picture}").read
          end
        end
      end
    end
    true
  else
    false
  end
end
downloaded?() click to toggle source
# File lib/uva-tools/problem.rb, line 113
def downloaded?
  File.directory?(dir_name) && (File.exists?("#{dir_name}/#{number}.html") || File.exists?("#{dir_name}/#{number}.pdf"))
end
id() click to toggle source
# File lib/uva-tools/problem.rb, line 31
def id
  @info[0]
end
info() click to toggle source
# File lib/uva-tools/problem.rb, line 43
def info
  {
    id: id,
    number: number,
    title: title,
    run_time: @info[19]
  }
end
number() click to toggle source
# File lib/uva-tools/problem.rb, line 35
def number
  @info[1]
end
open_problem() click to toggle source
# File lib/uva-tools/problem.rb, line 117
def open_problem
  if f_path = path
    `open #{f_path}`
    true
  else
    puts "Problem not downloaded!"
    false
  end
end
remove() click to toggle source
# File lib/uva-tools/problem.rb, line 98
def remove
  if downloaded?
    Dir.chdir(dir_name) do
      Dir.entries('.').each do |file_name|
        if file_name =~ /^#{number}.*/ && !File.directory?(file_name)
          File.delete(file_name)
        end
      end
    end
    true
  else
    false
  end
end
submission_info() click to toggle source
# File lib/uva-tools/problem.rb, line 64
def submission_info
  {
    submitted: submitted,
    accepted: accepted,
    dacu: dacu
  }
end
submitted() click to toggle source
# File lib/uva-tools/problem.rb, line 52
def submitted
  @info[6..18].inject(:+)
end
title() click to toggle source
# File lib/uva-tools/problem.rb, line 39
def title
  @info[2]
end

Private Instance Methods

dir_name() click to toggle source
# File lib/uva-tools/problem.rb, line 128
def dir_name
  "#{UVaTools::ROOT_DIR}/#{number/100}"
end
path() click to toggle source
# File lib/uva-tools/problem.rb, line 132
def path
  if downloaded?
    "#{dir_name}/#{number}.#{File.exists?("#{dir_name}/#{number}.html") ? 'html' : 'pdf'}"
  else
    nil
  end
end