IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Ruby - Statistiky hokeje

Ukázkový program Statistiky hokeje. Příklady využití funkcí, čtení ze souboru a dalších konstrukcí. Včetně zdrojových kódů v jazyce Ruby.

class Match
  attr_reader :datum, :cislo_kola, :domaci, :hoste, :vysledek_domaci, :vysledek_hoste, :penalty, :prodlouzeni

  def initialize(datum, cislo_kola, domaci, hoste, vysledek_domaci, vysledek_hoste, prodlouzeni, penalty)
    @datum = datum
    @cislo_kola = cislo_kola.to_i
    @domaci = domaci
    @hoste = hoste
    @vysledek_domaci = vysledek_domaci.to_i
    @vysledek_hoste  = vysledek_hoste.to_i
    @prodlouzeni = prodlouzeni
    @penalty = penalty
  end

  def get_body_domaci
    return 3 if ((@vysledek_domaci > @vysledek_hoste) && (not @penalty) && (not @prodlouzeni))
    return 2 if ((@vysledek_domaci > @vysledek_hoste) && ((@penalty == true) || (@prodlouzeni == true)))
    return 1 if ((@vysledek_domaci < @vysledek_hoste) && ((@penalty) || (@prodlouzeni)))
    return 0
  end

  def get_body_hoste
    return 3 if (@vysledek_domaci < @vysledek_hoste) && (not @penalty) && (not @prodlouzeni)
    return 2 if (@vysledek_domaci < @vysledek_hoste) && ((@penalty) || (@prodlouzeni))
    return 1 if (@vysledek_domaci > @vysledek_hoste) && ((@penalty) || (@prodlouzeni))
    return 0
  end

end


class Team
  attr_reader :jmeno, :body, :branky_obdrzene, :branky_strelene, :branky_domaci
  attr_writer :jmeno, :body, :branky_obdrzene, :branky_strelene, :branky_domaci
   def initialize(jmeno, body, branky_strelene, branky_domaci, branky_obdrzene)
     @jmeno = jmeno
     @branky_obdrzene = branky_obdrzene.to_i
     @branky_strelene = branky_strelene.to_i
     @branky_domaci = branky_domaci.to_i
     @body = body.to_i
   end
end

# naplneni matches
matches = []
begin
File.open(ARGV[0], "r") do |f|
  f.each_line do |line|
    parameters = line.strip.split("\t")
    # dekodovani vysledku
    penalty = (parameters[4].include?("(SN)"))
    prodlouzeni = (parameters[4].include?("(PP)"))
    domacihoste = parameters[4].split(":")
    domaci = domacihoste[0].to_i
    hoste = domacihoste[1].to_i
    matches << Match.new(parameters[0], parameters[1], parameters[2], parameters[3], domaci, hoste, prodlouzeni, penalty)
  end
end
rescue
   puts "Wrong filename, please run me again with correct parameters"
   exit
end


# naplneni teams
teams = []
matches.each do |match|
  #domaci
  if (teams.find { |team| team.jmeno == match.domaci } == nil)
    team = Team.new(match.domaci, match.get_body_domaci, match.vysledek_domaci, match.vysledek_domaci, match.vysledek_hoste)
    teams << team
  else
    existing = teams.find { |team| (team.jmeno == match.domaci) }
    existing.body += match.get_body_domaci
    existing.branky_strelene += match.vysledek_domaci
    existing.branky_obdrzene += match.vysledek_hoste
    existing.branky_domaci += match.vysledek_domaci
  end

  #hoste
  if (teams.find { |team| team.jmeno == match.hoste } == nil)
    team = Team.new(match.hoste, match.get_body_hoste, match.vysledek_hoste, 0, match.vysledek_domaci)
    teams << team
  else
    existing = teams.find { |team| (team.jmeno == match.hoste) }
    existing.body += match.get_body_hoste
    existing.branky_strelene += match.vysledek_hoste
    existing.branky_obdrzene += match.vysledek_domaci
  end


end



puts "5 tymu s nejvyssim poctem bodu"
tm = teams.sort { |team1, team2| team1.body <=> team2.body }
5.times do |i|
  puts tm[-(i + 1)].jmeno + " - " + tm[-(i + 1)].body.to_s
end
puts

puts "3 tymy s nejmensim poctem bodu"
tm = teams.sort { |team1, team2| team1.body <=> team2.body }
3.times do |i|
  puts tm[i].jmeno + " - " + tm[i].body.to_s
end
puts

puts "4 tymy s nejlepsim utokem"
tm = teams.sort { |team1, team2| team1.branky_strelene <=> team2.branky_strelene }
4.times do |i|
  puts tm[-(i + 1)].jmeno + " - " + tm[-(i + 1)].branky_strelene.to_s
end
puts

puts "4 tymy s nejlepsi obranou"
tm = teams.sort { |team1, team2| team1.branky_obdrzene <=> team2.branky_obdrzene }
4.times do |i|
  puts tm[i].jmeno + " - " + tm[i].branky_obdrzene.to_s
end
puts

puts "3 tymy s nejlepsim utokem v domacich utkanich"
tm = teams.sort { |team1, team2| team1.branky_domaci <=> team2.branky_domaci }
3.times do |i|
  puts tm[-(i + 1)].jmeno + " - " + tm[-(i + 1)].branky_domaci.to_s
end
puts

puts "Prumerny pocet branek za jedno utkani"
average = 0
matches.each { |match| average += match.vysledek_domaci + match.vysledek_hoste }
puts (average / matches.length.to_f)

puts
puts "Extraligove kolo, ve kterem padlo nejvice branek"
kolo = 0
max = 0
suma = 0
vkolo = 0;
matches.each do |match|
  if (kolo != match.cislo_kola)
    if (suma > max)
      max = suma
      vkolo = kolo
    end
    kolo += 1
    suma = 0
  end
  suma += match.vysledek_domaci + match.vysledek_hoste
end
puts vkolo


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 332x (2.87 kB)
Aplikace je včetně zdrojových kódů v jazyce Ruby

 

Všechny články v sekci
Ruby
Program pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
Ještě nikdo nehodnotil, buď první!
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity