Ruby - Statistiky hokeje

Vydávání, hosting a aktualizace umožňují jeho sponzoři.
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ženo 331x (2.87 kB)
Aplikace je včetně zdrojových kódů v jazyce Ruby
Komentáře
Zatím nikdo nevložil komentář - buď první!